From fbefc2c84ee2c953b57809d13b2064bf20384e11 Mon Sep 17 00:00:00 2001 From: paul Date: Sun, 11 Aug 2019 11:10:50 +0200 Subject: [PATCH] Updated the OPF tests --- tests/OnePoleFilterT.cpp | 162 +++++++++++++++--- .../OnePoleFilter/OPF_high_gain_0.1.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_high_gain_0.3.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_high_gain_0.5.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_high_gain_0.7.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_high_gain_0.9.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_input_gain_0.1.npy | Bin 640 -> 640 bytes .../OnePoleFilter/OPF_input_gain_0.3.npy | Bin 640 -> 640 bytes .../OnePoleFilter/OPF_input_gain_0.5.npy | Bin 640 -> 640 bytes .../OnePoleFilter/OPF_input_gain_0.7.npy | Bin 640 -> 640 bytes .../OnePoleFilter/OPF_input_gain_0.9.npy | Bin 640 -> 640 bytes .../OnePoleFilter/OPF_low_gain_0.1.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_low_gain_0.3.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_low_gain_0.5.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_low_gain_0.7.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_low_gain_0.9.npy | Bin 0 -> 640 bytes .../OnePoleFilter/OPF_output_gain_0.1.npy | Bin 640 -> 0 bytes .../OnePoleFilter/OPF_output_gain_0.3.npy | Bin 640 -> 0 bytes .../OnePoleFilter/OPF_output_gain_0.5.npy | Bin 640 -> 0 bytes .../OnePoleFilter/OPF_output_gain_0.7.npy | Bin 640 -> 0 bytes .../OnePoleFilter/OPF_output_gain_0.9.npy | Bin 640 -> 0 bytes 21 files changed, 135 insertions(+), 27 deletions(-) create mode 100644 tests/TestFiles/OnePoleFilter/OPF_high_gain_0.1.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_high_gain_0.3.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_high_gain_0.5.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_high_gain_0.7.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_high_gain_0.9.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_low_gain_0.1.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_low_gain_0.3.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_low_gain_0.5.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_low_gain_0.7.npy create mode 100644 tests/TestFiles/OnePoleFilter/OPF_low_gain_0.9.npy delete mode 100644 tests/TestFiles/OnePoleFilter/OPF_output_gain_0.1.npy delete mode 100644 tests/TestFiles/OnePoleFilter/OPF_output_gain_0.3.npy delete mode 100644 tests/TestFiles/OnePoleFilter/OPF_output_gain_0.5.npy delete mode 100644 tests/TestFiles/OnePoleFilter/OPF_output_gain_0.7.npy delete mode 100644 tests/TestFiles/OnePoleFilter/OPF_output_gain_0.9.npy diff --git a/tests/OnePoleFilterT.cpp b/tests/OnePoleFilterT.cpp index 1d29efdb..512c6a9b 100644 --- a/tests/OnePoleFilterT.cpp +++ b/tests/OnePoleFilterT.cpp @@ -4,10 +4,27 @@ #include "gsl/gsl-lite.hpp" #include #include +#include using namespace Catch::literals; template -void testInputOutput(const std::filesystem::path& inputNumpyFile, const std::filesystem::path& outputNumpyFile, Type gain) +inline bool approxEqual(const std::vector& lhs, const std::vector& rhs) +{ + if (lhs.size() != rhs.size()) + return false; + + for (size_t i = 0; i < rhs.size(); ++i) + if (lhs[i] != Approx(rhs[i]).epsilon(1e-3)) + { + std::cerr << lhs[i] << " != " << rhs[i] << " at index " << i << '\n'; + return false; + } + + return true; +} + +template +void testLowpass(const std::filesystem::path& inputNumpyFile, const std::filesystem::path& outputNumpyFile, Type gain) { const auto input = cnpy::npy_load(inputNumpyFile.string()); REQUIRE( input.word_size == 8 ); @@ -31,72 +48,163 @@ void testInputOutput(const std::filesystem::path& inputNumpyFile, const std::fil OnePoleFilter filter { gain }; std::vector outputData (size); filter.processLowpass(inputData, outputData); - for (size_t i = 0; i < size; ++i) - REQUIRE( outputData[i] == Approx(expectedData[i]) ); + REQUIRE( approxEqual(outputData, expectedData) ); filter.reset(); std::fill(outputData.begin(), outputData.end(), 0.0); std::vector gains(size); std::fill(gains.begin(), gains.end(), gain); filter.processLowpassVariableGain(inputData, outputData, gains); - for (size_t i = 0; i < size; ++i) - REQUIRE( outputData[i] == Approx(expectedData[i]) ); + REQUIRE( approxEqual(outputData, expectedData) ); } -TEST_CASE("[OnePoleFilter] Float") +template +void testHighpass(const std::filesystem::path& inputNumpyFile, const std::filesystem::path& outputNumpyFile, Type gain) { - testInputOutput( + const auto input = cnpy::npy_load(inputNumpyFile.string()); + REQUIRE( input.word_size == 8 ); + const auto inputSpan = gsl::make_span(input.data(), input.shape[0]); + + const auto output = cnpy::npy_load(outputNumpyFile.string()); + REQUIRE( output.word_size == 8 ); + const auto outputSpan = gsl::make_span(output.data(), output.shape[0]); + auto size = std::min(outputSpan.size(), inputSpan.size()); + REQUIRE( size > 0 ); + + std::vector inputData; + std::vector expectedData; + inputData.reserve(size); + expectedData.reserve(size); + for (auto& data: inputSpan) + inputData.push_back(static_cast(data)); + for (auto& data: outputSpan) + expectedData.push_back(static_cast(data)); + + OnePoleFilter filter { gain }; + std::vector outputData (size); + filter.processHighpass(inputData, outputData); + REQUIRE( approxEqual(outputData, expectedData) ); + + filter.reset(); + std::fill(outputData.begin(), outputData.end(), 0.0); + std::vector gains(size); + std::fill(gains.begin(), gains.end(), gain); + filter.processHighpassVariableGain(inputData, outputData, gains); + REQUIRE( approxEqual(outputData, expectedData) ); +} + +TEST_CASE("[OnePoleFilter] Lowpass Float") +{ + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.1.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.1.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.1.npy", 0.1f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.3.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.3.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.3.npy", 0.3f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.5.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.5.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.5.npy", 0.5f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.7.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.7.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.7.npy", 0.7f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.9.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.9.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.9.npy", 0.9f ); } -TEST_CASE("[OnePoleFilter] Double") +TEST_CASE("[OnePoleFilter] Lowpass Double") { - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.1.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.1.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.1.npy", 0.1f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.3.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.3.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.3.npy", 0.3f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.5.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.5.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.5.npy", 0.5f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.7.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.7.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.7.npy", 0.7f ); - testInputOutput( + testLowpass( std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.9.npy", - std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_output_gain_0.9.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_low_gain_0.9.npy", + 0.9f + ); +} + +TEST_CASE("[OnePoleFilter] Highpass Float") +{ + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.1.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.1.npy", + 0.1f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.3.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.3.npy", + 0.3f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.5.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.5.npy", + 0.5f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.7.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.7.npy", + 0.7f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.9.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.9.npy", + 0.9f + ); +} + +TEST_CASE("[OnePoleFilter] Highpass Double") +{ + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.1.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.1.npy", + 0.1f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.3.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.3.npy", + 0.3f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.5.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.5.npy", + 0.5f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.7.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.7.npy", + 0.7f + ); + testHighpass( + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_input_gain_0.9.npy", + std::filesystem::current_path() / "tests/TestFiles/OnePoleFilter/OPF_high_gain_0.9.npy", 0.9f ); } diff --git a/tests/TestFiles/OnePoleFilter/OPF_high_gain_0.1.npy b/tests/TestFiles/OnePoleFilter/OPF_high_gain_0.1.npy new file mode 100644 index 0000000000000000000000000000000000000000..0f15488c795ea0f5b9203b745f371f1d9aa61859 GIT binary patch literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL411_yEjyd-WKifZWa+%5W_u>A{Dqpr4D?i)6`Au%tp_M!A zd*9uCRQ&h({%d^p-7|f^+M5Q>S>M0xuKhlD!-p4yUhKcWPC$Bk(C_^Tv(y9AmwvF{ z;J0U9Q^O|v8a3rv8Jf@SH>g_L*IBjOYc5b;*q-rzf5OwFM+KHl-d}X6q3TiQSNqKm z>>AXLpV+TZ$CkM!oB0{&T! z;i3oj-&=g-)Q9s74pNU5cPz_%w4Z~Y)8^azH~Uo@j~MP%*uMXgugH9-rVsX7(K$;* zEl=;4xYc_yqV(+kg2P1;)f4a7Gd?(XpY7s}{T}=d2jAb`Yu~_s>H9nX8~dF%dY^ZR zcx1n1-edbix9-_jDZIK;8Srv{os;Z${nRu2kBc2xv^V0by`?PI+xs^6?7wKLmAKx0 zus`c@#$f~VH}>Z)_pFz;|FFOHz&o$k{7d$?2X;y>WcajSW?s6;|CU?(g)4qXpYS`^pkO-fwG%KajrMU?!c|ctzqBD=l#Kf5(DuTH@G`H+8bbq_A%4AN`C9Vf4k5oVx67nn= zok^pg&5ooqX!LBUELSGD#goc}#6M>XZpw)rmx}~B#Lgc(9nLt;pcT^ozrFW4pZKOu zEl?_^Ld_HxWMTtdYP5kbp=?)N8N;^BQ|z?GHDrzrYg?#@5tfmQ-TtGX@U1BF&-jkb zR0}zZWX6ucUTOI=BSdfM#X-t(B&jsG@7z4-3rBtAUSc#Zldlys<{;r-)?H1Y8$0(K z1Qy3IiWF3P`Klh4miQl|xYOt`)Hr{ytU%RnPu61W5R|2cOfGV|p^2g7#RbgZ+fs2# zmc|Wv>HMne@2sdfxv&~~;u}Oi)=c!pjpK^`7In!K{A>Vy5mf4)<HUfu(GQ;5-`Lx_XoJqp{Tr_6 zKA89OlfBH`Wg9#TkJ{VJKJaC()2sa_LwKJ=>72L!)i%3&gWNOw2Iq|10;@jl4^7}0%t@of9(?aKT8^k3PplAfrL z+xU9F%8B}jV37;aO zuH*J%-9lms^=0__K}qz?ZoH(^cb` z9Ijg5?KS27us^K(!ITL3FZMcrxxEw3Z`&VuJ>m4B8}sbDo>jlJp7?72^(87io<+Cq zosv~WMN|*%muuxu^j-R7|B*ijR`K8YVSndCO3?K6-}i5G$#UPQ_-4ONoohE2ZM(KSu?GO&{3(_I literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_high_gain_0.7.npy b/tests/TestFiles/OnePoleFilter/OPF_high_gain_0.7.npy new file mode 100644 index 0000000000000000000000000000000000000000..df049fd74b6e4d6ff5501a129eebee9b2156600a GIT binary patch literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL411`gosM^J~7wuilZoEF(b=h9dkz<2q-jn^Di^KTtK6ztb zaMnoW(%fD9Ys?J{Yo2}HpR%sh=8f=o`?d+rPnsJ3?O&##!dSlSoBbo!``>4O{IFjm zX1>RQklp*ku3R+flc4MW?{r&6CH^eJcKeNBweJiMw_11narORHLt8du)Ld!zG*;nk^a%}$Y5Bp_ef;Jv+I&J^p*#`EP z=Qi5^$-DB!^Tq@F7lK>GGnh{84>P+mBQWvF{+frP&)!6z*{@To8F1;v6MKc&uv@3~ zSK6=8-4$}^&lP(Y`L|{=!YB7vWY{)pTOY7j-IMZX|KYp)lgxCMZ@hM8zs=W)B{>(4 z?Ps-O6yv`0aDQFY*9V~&p4u}kS+dEJ)6rf+^^x!LzPI*&zMYZNHGjWf*v%~7Amz$_ zh5z&Huh!hPH=1ibMa}PyJrDn!9F2#M_CHG9+~)G*f&KiI+-no29@_uO_pIm>(Fgk- uVh+yVzi5%Y?$pn3`6J%iJ6}EAvLoW%einfXH_qzr+JEHAJ@1V2yZZrjK`Vd& literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_high_gain_0.9.npy b/tests/TestFiles/OnePoleFilter/OPF_high_gain_0.9.npy new file mode 100644 index 0000000000000000000000000000000000000000..eaff90579b03c1340c20cab073a0e8732235a440 GIT binary patch literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL411{U6!r`5@x9zR8Yi1kId9**jdumqg?dSV1HFAeOYx!vJ z!SHM1q^GOwZL+F078KpGU-om~Y0u4<_p>l&ZCj-9!2bC81FE+*KJ2ejn-jWi_Hp~( z*Rst2b5`${*dMdezV3$op{9z>YYKksPvBe{a!K%y{R)=cPG{z$_BM^qiYNBx`q*YoS^B}=>V@G`IfqaCuYJzgv+dy%`#W7`VOreB_Ges? zxh8M&*q$NbxJC4e7yAorzTMCW4q}N2<;LpYb@l-)pC! z)SSa7_g|XaR+#$t>i+0+H?wl>9@<}Fj(_=b{^tD`C$Wi1Ykk=78of&T_^z+^-Ns7g zBF3Nh&-$`ccwWs%`ze9yms~d;w~r7Gar@MG#(ss;4fBrF)Ali@Px{TLG99?@zP;RE z^tC-hoW??fgzSIk t-*;y_<8}MFi8Ia=-gvdYuX*hP+3wRldjKZ0Ckp@o literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.1.npy b/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.1.npy index 7c87bb65274b8c256611685b37a0891a1d0c28fd..3dc90c5468b83f5c24a0b1195b01d0e3c569bd88 100644 GIT binary patch delta 523 zcmV+m0`&cW1%L&RfPZ3H75AuP^*{Xr`(U{Q*uUVQ%x}gkc6voKK>Rs^*<=w2Rwpip!vLBh&|mkUuJ# zQZ}yX=RavNNm5w5yFXQN4u{ET@4u6%Jb*KazQ2^99*Z>W^?yGps)?AAHK@O2Pb+|M zK*+y{X~EKNwAR101$OWG=hi>YLpnj|>Ht9gohMkGL-{|y@nB(vIQPGorB({ajMBdf z4^8O)2kyTyM(%**gZ01S_xS6gZ_>XNb^K41$>+Z_aMAjn3*f)RYurQ+#{NHNBmGSk zJLA7B8o>_7K7aAQCh^v9`#{&fkmo>ET}$gfV6M;K&Ct`ov?Jj6bi~)c1@9eX`svg^ z*A8&{Jq+N#Coy>b*2#}%d=|jzrLlEAM$eQKLM;5YvI_}zhCuvnGWCKzl}%kc{tJV NzhESYM+83W!M}0iBOL$$ delta 523 zcmV+m0`&cW1%L&RfPebJ7NYtl>p$cEHxh9q)IV+}(9~)S$v=96cQPw@@W1@_7C@nmvs3yT7)LBlc78)4!en{q9Wg;6KeWbn6fP06^WVD&&I5yg#q-(?W6}_P?uR z3t4Ni;6Fz;bwENA>OcPiQp~?f(7%qmiJbb|$Ug}hpz#JI>3=`?AMl*?tKdI$reHaz zD(=5u-aV&uCfYxAVA#%K^~VazpuaE6%;@KH-9Jhggw`QQ(7#Zcc)Ur2;JDtQ;=lD} z!ZP@~;y=I5c~R~+xIdNyv?{_=?LW=d*=$2R?Y}&urP>{u;eWrB&y&qnyJ05`R6~4vq@cZU)Vo=TBc%-kJ&#pcZBZD1=qiQ5vF+M==MJ@@8A+?Sg*gz zCtyJjk>x*8)z6!wW1&Cm-eqj>48K10L2Kh-}4q6EU8OT51t*f-{# z%;7(A09uu(#ecp(?|Ih0F}KXWjlPWM^vLHw5a1%J!k*Hn5lFDM{LQtSP{A%~oM zZ;Zb`^;SDgj^zKpX7+X*j@RzLtRgjb`O54+1e!$set)szzug?H;%aNQzqg&a*jvry zKl`QF`UHIPzXy@=x)-V4KP8K0KVmh*KXcW4cb;tVzj1k}e9TAjKS~yPf%PNmzv+m* zCbEa_zY`T>3>-`2zivc&+?p-%zcSGt;vC4}zZwIAGP`igzpcEaU^ianzr3qMc(PIG Nzf4ZY4g?HA>p!6u9J&Ai delta 523 zcmV+m0`&cW1%L&RfPXifBnPsv+&{sP(F&VP`9HUaaRQAT;=dL1Q}YIq%0KsQA>p-@ z_dhF2-1KdD`@f=EIiU`P=s$*r_>t+tn z+48>!Suenl7Wcn*h$hws7ty~{$rTg4UdO-J%2b6H(bzw`{7fS@9`HXl)bhLueegeM z^z&@P_255S&EYr9F5*9nhQ>yFMAAP@icfE&ANxO8=04Y#@8drh*6R=zx7$Cm53>E| zf1*DqDPLCwo`1i;i%y>to$B?vDofQ{|HjL)uJF}CWzFJj~aC^+%Ix{(sj zlq}^x!%8fNKjEQ2oRdwz(f|p-m|x0o4WaTs1wh=C-hayHKVI>ML#qAeKV+I-46!5d zKlYy+)c|etKl{DMuS0tDKkt4hs07&SKNW&5>fSuqzdoTT8ys7LzfwD#DG}%QKPtub z!KZD{Khx+$hwZ7oKRC5NK^md(zg0ahHz^1FzaDOkbu`z|KXXGW2|xS(KQZs=HyNPR NKf?|JXauGO-#_$n3(5ch diff --git a/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.5.npy b/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.5.npy index a7a3e7736b13c22b1c5521faf05356a9867d5cc7..bd6cfe1001187ae503b4ed76baab3139c05f2681 100644 GIT binary patch delta 523 zcmV+m0`&cW1%L&RfPbTfjz|aI=|A8v7b1W!tv~ks^7oWA`oGDdctqlN&_BZk13zHA z;XhQ(9wx7Z+`mFFMLEwfv%hCTkB(7Opg&x`V+|@l@jo=@$^`aKNx#9+Q@Sg2<-gF; z>8x<2-@j4i1JWw`(Z4atLPNdk&_6_r=aJ#X`oEflRVnJj@_#?EC!8?@dCkABCK8Uv zi15F!7k~aYJnKKeH-9y=8vDPDkUi6Twtzpv&+B&Bj_tqUjvpzQ)bKz3!%q|qy5>KC z_~j4@SmVE?Q~mp&=fyu`dh@L^Vevnj%n!PfCGfwRiJH~<=eoZ%jtmnF3i7|S1jluK zg8)E9(sgFAxqtM(l;??nnJV4C@Rp;Y8bjzmJnqMCuomvWF)4muPU!Ey!HU0~ z>jl9-oK>_5%7ErSCbWI!OsfgNu3c(Q&`S3|1lwSqC4VRLzvz?R2YL?kKP}CYIg&H; zKMk|?pt^~F9}>p!Fbp)`z=)jvUVF2;P+y}z3GwzW}l(ZAEWyrkWO=)VOWZi%bKmcK5@ ztOXfg(7zNtwH9T*_P_WDjv1kUw7-G_!se+D?LTz6`x4$Z_kTY;H4Rs`)%U-9iIQzfGdTLp>fcHNOGL6zjjaf73Af^w~dL-kw2y>Civ*Cj2u55yC&O^lR_^ z=hMGqwu+%zoPWB%>;3rySkuox*ZB|+9Ovpk$DNmFtDWt?>A#}(elyj-Bzi1nTxt40 zQ(KVWo}1~vWa_!J1_A)U>67tl_$Bne*dHK{qZGw02p?zyGO4#JH`~zisY%3x#sWzko+hLCy#F NKRLuqCj<$x_`jw{9@zi@ diff --git a/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.7.npy b/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.7.npy index eb17324d5e5ee1db008cc2e8b6270e15a9111dda..a33ec54f9e8a2bb924609f6d715f37fe486c85e9 100644 GIT binary patch delta 523 zcmV+m0`&cW1%L&RfPaR?8CCqd-9Oyr1Fg5(>^~+|2$1xh(Z516FPvUD_dj5o$sgYi z@IU07T6X?L@xM15FaOc)`#)u;0G9^Y{=chkH~i|(@ISl0fvJwl^1qHNc7Up!@W1g> zxLV1u_CHJ!A(=HpgFoVt|IXE-z&~-`A}>Zx@jpfMTu(EG@_#=MgRS9ZEZ0AQv;28W zq=LV{tv`Dv745&??)i2V;qkwRj@`CWg5tljq%#|LxZA&m@YW|tF4(`{3iXbxiSxhZ z2cq+bc)maQzy%A(4e7r#A;B1VRCmAL`V0hk&$GX|5ZptLet^Hs*j6oKk>tM;a_Pl~ zRNlY5_8bQeIDh^>$$FY}nzhrvM>CPo8^PB<$U38cIx^co8V?fdg~;?jv^xZ8iFN5e z6w2E$8S>1(eJX)7m|5Dtr|&Ihet+mc%B;G>x#r|QAatNyRwDC1PiHfgqju;&1`CFM z0-x|d_66aLVCKp{quY3TyBEs8z&a~#(J$J+0{Y+SEPvnhzxlIck33YCKbu5~Gqy#? zzsPXQd`&j?KRcSd>tll9zvVt{vod<=zsV!r?X)VjKb{aU(mhD#KdxHDUl|_Uzxkbg zA}4g@Ki~Ew!t&eAKi=l@&7XYYzme{D*1BBRze}d^J6P@VKOC_#F~N!Ezg59KltusI Nzy7Tm+XU=~^}mPSAKw4~ delta 523 zcmV+m0`&cW1%L&RfPdgb3zT_ByT4f1)Pc8j#6K9AfbsPf#S5%$v^C1-GbQ{?7wJ{!^l%TCx?(jaQ(|lVUGSR=8+U=A~q{6?D6+<{M{nS5{rF3sWg4aKECwKiYPuahsFYh9A?)|@=6|48N zzxhAD4(4*fxPSRS?jU>3sGaP;K=b5aQ>Vi}j2DQvo?GERkxcHj4(ivx$zyn;#Odol zmEj>W{EN~*-mfm4$?lXt(Gt&KYbF9fK}=gyEs6j@tMXG10NUg~ufwl`RI>BGO}yeB z+plsz-wIkcNW{QD{^&j9%ewbJ!NH!2J$%4F3Ps5BQ-5UOKdIBK6CqXLKN>?hoi(QD zKi>u@YUJqDKOC(N$2sf3zqPRBIEpsRzw}<7#7}6^KMG5rOU)(Ozi+JIdllO0KV*xj z)$`c&zssD+wbJiKe&=7I*9J}zn$6jm_)+! NKkqhR%LGS<=|3fJA?^SG diff --git a/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.9.npy b/tests/TestFiles/OnePoleFilter/OPF_input_gain_0.9.npy index 5b88b3214535638cf394cb7225659c7009cb7e64..c959901724a40b5fe06d5d3cfaa5b03bd1209fd6 100644 GIT binary patch delta 523 zcmV+m0`&cW1%L&RfPZ28h2N+h>OX6A=YD29)xVokn_~eB`@e@02->#3-9LK^;_VY4 z-9J^0ahZ(5^FRBv8hmkk<3Hup*7gC8`9HbW3~0^K*T3|#h2h;vv_Cr>ALXR^q`%oF z%gX~H=0CDQ_Z;{A0l-h_qeaZh^FOakoqEdo^*>c!^53Pb*MC1$;HloPG6BHjbh-DK zHR-=YWXA2q{qaAhNlXZ8S@ORd5U|2Hj;-at^{Z?jAm!S>#j*IP za--HiNAo$;VFczs%_R{S*IDO3ynIO>9Gkemi-}Z2fqzZpKTs7hDh?9(zvrH_CuO7T zKfw?y+v(8xzrI!3XlQYjKOmmKUCWNEKVco=)DL3%zsDI7h4sVNKVjR^*1fv-KPj`g zCmCS-zvQRFi^|y3KmLv-^G4&!KM$2y1Q3<%KLJ7mWf7C-zeCm)10a;pKbN=+g~edW NKdb>7&;;t?@jv!18QlN? delta 523 zcmV+m0`&cW1%L&RfPcWakXM|Z|G&-lsn%RYEmINm*1w*w zaP<|K@;^0bxDM6$ygye(Ehq$a`9E`@{{1ca_&>I;@WajN=zqT<1USBI(#gL^UU6kn ze)K;exSZzM(%!!r-@G89l>I*l2PxAaxxqhmo8RR9*yq0l{=GCS+q=J03=4i@Edjtj zAr+0OX92*8(xE7 zHBY_2;f!(Gow519Kxpe0-^0|ubx|u23C#LGaf@gR-+#CAzbr0)?%BiAKT^l1`XUwh zKewub){rRhzfC(4bx7p|z#V4)U*b*Szo(j7C|4 z=^o4QKjwfKCWdO4% NKjMz$)&vK^v diff --git a/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.1.npy b/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.1.npy new file mode 100644 index 0000000000000000000000000000000000000000..f63964d4021f485e66a0d0e855271a3fa640cc60 GIT binary patch literal 640 zcmbWr>q}E{9DwnoU1noOI4mlKmEg2oX4Jvd`k`sT$y-ie7>cZRP7AzlIhGcPF$vA^ zl1o=!(87wXnJ#f^`?}*co0ql8i7aa(Xf;tYl@zjz{R=(so=teMY&mdQZf0@&x*2T|6tyr0D zpb>E;bA8lefYWO){be~8U}-3!hfxFO!bN45S3ThdpQHDiMOdWoC$y_ zN?BvKLdyqDo>MmiUL9#aNQ^K`?V6u8KG2=DF9UeWAncoY^ v-ob;qMl2m^lsa%L}{ literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.3.npy b/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.3.npy new file mode 100644 index 0000000000000000000000000000000000000000..e24005389129640a42e260464aab432c4270b0cf GIT binary patch literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL41FrKk*YX~EJkP#k%Eyi3+Sl#(+&cd9Py8GErylhQ_tihx zXSL7v(CU9+pY!f|=*pej?7!UpXzjW0kbTMr$$+QY2kg&=2P{dH+_PWIH$3<7nxp%( zBAjk&n4R7q60k9Si@=`!YYShz)D+lhKSSGNeyiUld%opc%;c!v24% zH*XbYU*4Z_Ye`k!@0HhLZkKJawz1`23%`)r;S|2I_MWS?uaaKB!w)QMj<2lua-xg+Yp_Otudra8aQ{Wifq z;qJ}5Z>OKy&%^#baH96!{R|2YzmKeS*{{HKxgtaN*8Zin+k%&LKiZ!W!qD_E_St^_ u+P)pOH=ghBIb*9i)%(%@llM41`ePsL_jFWu{TcOm|J3Iq4w1E&_X7Z)i7co9 literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.5.npy b/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.5.npy new file mode 100644 index 0000000000000000000000000000000000000000..7d373bfc69b65ccb1044fb8b0030a004b2b671ae GIT binary patch literal 640 zcmbWr{V&u39KiA8hn8p7iY{>}zSnlSY*fqTvuwI-WfyCqoZWFmmh(N?H7BP$th7m; z7FJR;nYc_>+PRN&m$+lxJamU{_jQQMc9@N{mHvg^zrA0N;x3-&B{|UwXoW<&NRmbp zCm94M;{?HC5E;2-J}J1KnoFjO{`na}jzqNWlB)u-X#1JR!dZt|j3UPW=jxl(Rn`$@ zf&srP{Hh2uB>(m-UTLu)N9fItbh0BkOH9u{>;yCCj_mW#c3>ZODa5kUTwWC6z%A>b-p?XH+ZD=&3_s#4; zwOWDx?tPI#$G-rt)+NKOvJdJqgZw(=W4PSkwAscULoZ=XZH&eQN2M{8Ew3Mx7c51G z(uPq!^)2TYH3$K$L|$C=B9gsK-TLfzly3T$%0~v!RuDM4=P*IrdL8$e7iy?vxYiEb~KXu@4{$Te;4+iF}xYhgSKWE=Pwg|{+s literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.7.npy b/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.7.npy new file mode 100644 index 0000000000000000000000000000000000000000..372bbde17dd0bb54b1b0040812a66dc064806f6f GIT binary patch literal 640 zcmbWr{WH@69Kdm|g?6r7lFQM3OBz|o#hm2hSxG42`bAb|h;dujxzy~sN+q`9h}^m4 zlybM&)fd}*wx+goJGF?Y3kA+J2ZBt11($G(CJOY8e4iuDM@noC5(n zC(bo?1wMACjmE!Q1P9qzKU6pl>}@q2O2;I+@WmA02Ubjzt_yuGE@Ahd)`+km6V~kQ zO1G$IQEM_Bq1?7$UxPbyN3RL}*1}Yj-8vK=j0~-Io5A+bTupQN5WXl55WD5QLUV0- zx>YfT`nKOqlGHiW!m_sGo)PL8zS-P%3vj90<%$gzcsP^C1;bMiCC;2z4t$3YfrI0} zwhYf|qg$I#eg!_yDoD)J;I|3?*9C86@GHg3MV@VjvN3bRsSis)i0z%FQajkCGT-P> z8;Cke_fxdoMXHCJ zgGAAzl35@bU9J%#1BSe%Q3AttNWFEyBPT%%<995poD(V-P@FOBGD-om9+N#$Iw(-n umHG$??(wM{-Pt#T;~b-B{MIpO7bRurk9~n2ermrr&xmb~L{Y#wEB*zJA};&@ literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.9.npy b/tests/TestFiles/OnePoleFilter/OPF_low_gain_0.9.npy new file mode 100644 index 0000000000000000000000000000000000000000..93297867dbc6b497c88b5ff91762d80d97d5b6fe GIT binary patch literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL41FlxXAL%Fd-mn)qqFBKA9Fv_}aCf+g@kg z`?J^WkL*(Yng8>&{hSvUwb(6h@4x3VA>E|o+x{CJo0T3jzuM2inxlEfY|q2~c-SPc9pKzWtc>m5mkp0+8!SJv4XN=?OWETFm=P2V)yZ!9wegO@!rMLfo z-~UA{_UggS&-Qz1hi&t_`f$I%={A*Ps_XaL>F1xSPPlI`wBqW`TLI7Pog)8K&F{Nv zFU%>CU0QO{zTx)#D`6!!_xJcL`2YOE<^3Y}*2m4gd~JWpo|r!~_P*G^z;IQ24ysB7_){WsZ|zusqkZ69#vSf-HUhW)25$o+N?f4cu~YHG@M?$h=X uxq@OQA`k5!{8?ecti8*AT9kM4W!E$NUrkHDXJvcJ{zclvdE306*aHBGxhhxy literal 0 HcmV?d00001 diff --git a/tests/TestFiles/OnePoleFilter/OPF_output_gain_0.1.npy b/tests/TestFiles/OnePoleFilter/OPF_output_gain_0.1.npy deleted file mode 100644 index 2a0b42dd847ac65d129235156850cd8176c673d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL41Fix|`&W+pH`_~Jj54*Hd(_@5kV|{j{Nwg_BBR!qIc~PU zuzT?**}9eXm+K8y?7h0jp4EAe?Z#QF?SDis_qrCd!Twv{2EP|4F4;5O=!o2!c*j1Y z#DIV8iu3k)*8^vNJhb0lMnLR=OZOT3rRM)-WA2}||M*}&qsHFj_MW?&k0@O}XYXjT z_FkOX6??l4Yu-N9I%6+Yb4l>_!x{6}N2Wt_DaT9j+o;I`HN(w?3tqHi|aGi-hC zbEm(`-t142Q?MS{3 zym~*M^H)vHjR*Iuc+5(j$98Fd%DbH!D<)mq-^6gm)yn?({vDay7ao1uzhA&iCgSS) zi}w1pr*_`>{J{RQiZ9QUTTkp|+M<^{5O{8{<8^N#ck)a7__}LJ_q5;Gvu-@nqWJ8& z{hqI1^($o`*^3@Oki7ZYE&Bi|W3Kl3*X{c&ryh`BebqiERIzfE*bVzNzb|xnmEN~c zi9Ir<+vkbB^xn_1qT+AtxoR7vx>mfgzdXz8O+xDv`@gq2&HNi4*e{FwyMFnvNA@Os s_ntH=JhuN86uR%r?Ys7q-JQhLu3ojzT>gIB1%r$Bm9eTm-3q7d0U|~s;{X5v diff --git a/tests/TestFiles/OnePoleFilter/OPF_output_gain_0.3.npy b/tests/TestFiles/OnePoleFilter/OPF_output_gain_0.3.npy deleted file mode 100644 index b17e6d959566191a7a3345dd3fc3d6105b683c00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL41FjXHrnBv+-esS*?abnTM;_Q$wKBI{Z+l?B>1dao2GdD< ztvG}Dy%X-+?}_MHB6{JJ{TD8WwaK2l_cyUAasB6gVjo?7=-kEm5A0Vqh&(tOcies< z%eS(XDYxxEY3|WF5_{afRV#acPV2?}o7U+SyVjrGzu}^3`9bMJ_Dmk3xqpLR+OKUe z5>L?oYR`Y3;kwuV=k`+)U+kQ)=j48Oqe~mti$B;O;?KRK^~d%77Y_do{D0u^{%edO z3olMOXTL7t;4OWv$M$y(RGz)K{?vX))T1Zw6)U5(scFa6Z@P0#qM=G|6qTupyLu> z?FaiUzf5`86Z&w!%9r?3p?9bDha{}k)$U!rpKo`QVEXI}`*q#l8N~)Z*q`)uZETF31z_H#V@GdDeJ=d-l8=ugv+X``A9R|5oPun5*{DCsn$St$1Yr zt?u15&A*rJ4dP0w92id8*S@fpUf*@s-mIfLbFb7{`zq~4Z3Z(|@3(pu#=6n(`u+(b zXTzPQ-Pj+0WhbgkQ5k7fHM!VX7rZ#!W>jh&(Fo5I%pCnqhm zxX5?XUj5Q%f7fLv?HByhlAd?5#r{#-;v?%_5AJXHlk;%${4D#fnF|ha`(L+rI3#)K z+4b%A-g=VkUoPF)UlhFDc-8&O_Hx&SBIh5uVJ~g`YfZ(0m;3iOc=L&^`?~++)_|zM zZ7=sP__w*bWy7QWXJ3ERj5T?-ze3qS{Dks~{Y5Nur!wq#Xm9d(>8?)&2lgj;+t1AS zeSiP$P32`l6H?*|xe0Rm(@`rj<+0lpgi+(+vw*TYR v{RVEwUHtSP?ax&y=w+RJZNHiLMR$gO7x&-M?-L3-d&NE=uwZe=gH84T_~$W6 diff --git a/tests/TestFiles/OnePoleFilter/OPF_output_gain_0.7.npy b/tests/TestFiles/OnePoleFilter/OPF_output_gain_0.7.npy deleted file mode 100644 index dcbda93bc77f29c48777bc68e8465e9a900460b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmbR27wQ`j$;eQ~P_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I$dCOVor3bhL411{zk*DDg`%l5x$n=^M0Pp|!!U7@!MB2MgA{^2=!(~L{@ z_y06JwTS;<-%^>pRprJLdmTnQ#*GR`_pjWxGmSgv$$qJZa0TrRNB6UFUHSQK(f$4A zU-BD1Dm~gCcF0pF@5G_~85{I$ZcJNXe@5odn^{Fy_aE?hF7za9@BU9e?i=1~dTOtd zKBslV`lI{vymDhrf4$n@BHa^w>C~tFNilgdeuq5XpZi67YuCw(`^}#V%u)aQeE(l# z+kNx@-r7Gicgo?(%{TX-z9i$nwerFKd5(;`FYLaszu-j2hpY4F+M6DDoMOA|lD)#O zx2(HTm)IZ4{8T?@(cArNPF%Tb8hLU5ha0aN7LThd#wB) zyC>|wy~R=q-u;E&?G?11zcj9xVlT2_i-QHvgZ*56OY_d}Ua;R#xZz@g=u`Vw+&^44 ze0^bWzhR00?aepsgGEJ7Sl8UQ|F(b54~^xI?KP^c-E7}Hv}Zk~7CQO)F?;`ngs3>t zz55vsdwwsi3AQ(J-!b<<^2+^3`cJn#+keDf;-QtqiM(U`>z3))t`2^@-yvvv?^($d* zvw45B1Sa0uFOk2Pk=<~=eTID41@4_U_Ny7Ly^(h3!G8WDs|rq+-m$;^T%GmF{tNqE zAN;6#qIQ43SoqQn#XGLqKM|g=S8-l_a>rib zPp4+F(VhKPUz2ypxAqtHPjLED^l|^%a_iZW*BK5x|8a*!IsNDUpczdePEtSjE1yha&$#$~{{bDh zxwd+EAiH9Q3cAGhqUQ95>T zuKR2I$928dm;QaS_o+MAp|Sn${-P!CPe~>I+pln9;h*mdZ|~cNr^gh_ zZa=dBlD6*Jaj%Q^Nx$xOUt4u^fAZDO&UI5?*=JmSa^&avi}saLB`n(JzxN-y$YDA! z_~(A1%S(a_jh^p6#S#9PpY#6yd+(TgxF}x8Y?n})$ xV}F4md(yAE>-NUmwjVs`b$$PY+|V?Ri!1kE_wdr26Mfgd=DW(Ydk=T)2LQx$IMe_D