simple crude fir filter
This commit is contained in:
parent
c91a78a91d
commit
c33d644fb0
@ -3,6 +3,25 @@
|
||||
add_executable(testtests experiments/example-test.cpp)
|
||||
target_link_libraries(testtests PRIVATE Catch2::Catch2WithMain)
|
||||
|
||||
|
||||
# Firmware modules tests
|
||||
file(GLOB_RECURSE FWMODULES_SOURCES
|
||||
"${CMAKE_SOURCE_DIR}/floatpump/Modules/*.cpp"
|
||||
)
|
||||
|
||||
add_executable(fwmodules
|
||||
${FWMODULES_SOURCES}
|
||||
modules.cpp
|
||||
)
|
||||
|
||||
|
||||
|
||||
target_include_directories(fwmodules PUBLIC
|
||||
${CMAKE_SOURCE_DIR}/floatpump/Modules
|
||||
)
|
||||
|
||||
target_link_libraries(fwmodules PRIVATE Catch2::Catch2WithMain)
|
||||
|
||||
# General catch configuration
|
||||
include(CTest)
|
||||
include(Catch)
|
||||
|
18
Tests/modules.cpp
Normal file
18
Tests/modules.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include "filter_fir_crude.h"
|
||||
|
||||
TEST_CASE("Filter Modules", "[filter]")
|
||||
{
|
||||
SECTION("FIR Filter Crude Implementation")
|
||||
{
|
||||
float coeffs[] = {1,1,1};
|
||||
FilterFIRCrude filter1(coeffs, 3);
|
||||
|
||||
filter1.process(10);
|
||||
filter1.process(10);
|
||||
auto res = filter1.process(10);
|
||||
|
||||
REQUIRE(res == 10);
|
||||
}
|
||||
}
|
30
floatpump/Modules/filter_fir_crude.cpp
Normal file
30
floatpump/Modules/filter_fir_crude.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
#include "filter_fir_crude.h"
|
||||
|
||||
FilterFIRCrude::FilterFIRCrude(const float* coeffs, size_t numTaps) :
|
||||
_coeffs(coeffs), _histsize(numTaps), _index(0)
|
||||
{
|
||||
_history = new float[_histsize];
|
||||
std::memset(_history, 0 , numTaps*sizeof(float));
|
||||
}
|
||||
|
||||
float FilterFIRCrude::process(float input)
|
||||
{
|
||||
_history[_index] = input;
|
||||
|
||||
float result = 0.0f;
|
||||
size_t idx = _index;
|
||||
for (size_t i = 0; i < _histsize; ++i)
|
||||
{
|
||||
result += _coeffs[i] * _history[idx];
|
||||
if (idx == 0)
|
||||
{
|
||||
idx = _histsize - 1;
|
||||
} else
|
||||
{
|
||||
--idx;
|
||||
}
|
||||
_index = (_index + 1) % _histsize;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
19
floatpump/Modules/filter_fir_crude.h
Normal file
19
floatpump/Modules/filter_fir_crude.h
Normal file
@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <cstddef>
|
||||
|
||||
class FilterFIRCrude
|
||||
{
|
||||
public:
|
||||
FilterFIRCrude(const float* coeffs, size_t numTaps);
|
||||
float process(float input);
|
||||
|
||||
private:
|
||||
const float* _coeffs;
|
||||
size_t _histsize;
|
||||
float* _history;
|
||||
size_t _index;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user