projectNe10 / Ne10

An open optimized software library project for the ARM® Architecture
Other
1.46k stars 408 forks source link

FIR decimator with decimation factor 3 makes needles #288

Open Radimoid opened 1 year ago

Radimoid commented 1 year ago

// initialization m_neon_decimator.M = 3; m_neon_decimator.numTaps = firLen; m_neon_decimator.pCoeffs = firCoefs; m_state.resize(m_neon_decimator.numTaps + len, 0.0f); // or m_neon_decimator.numTaps + len - 1 (has no effect) m_neon_decimator.pState = &state[0];

// decimation ne10_fir_decimate_float(&m_neon_decimator, in, out, len);

When using on ARM, there are unexpected needles in signal on the begining of each new block of data (after the len samples) If I use just FIR filter and decimate the signal by myself, it works fine. Is this a known issue? Can anyone explain it?

My fir coefs: const float firCoefs[] = { 0.00000050210021190120859, -0.000034228285083098877, -0.000092754336923977324, -0.00015557320504029068, -0.00016869734220992594, -0.000087828472441034143, 0.000072358091520568224, 0.00021834967506824691, 0.00022544194000779147, 0.000038771611527053258, -0.00024670053427927049, -0.00041362049666060583, -0.00027422523534979137, 0.00014910674531216518, 0.0005731692576012164, 0.00062469059103831791, 0.00014775747227131021, -0.00059103999780911953, -0.0010176735959221989, -0.00067519292096128111, 0.00033891792729655367, 0.0013125734929416611, 0.0013898320097359028, 0.00028818270514501497, -0.0013146641601913481, -0.0021476885952631322, -0.0013203469118128904, 0.00081608452015475674, 0.0027021050544952805, 0.0026648119723109188, 0.00034312897240270832, -0.0027309161564440798, -0.0040735920911981246, -0.002201497643114001, 0.0018983208818263899, 0.0051445223344098283, 0.0046103353139922464, 0.000058907202663463021, -0.0053612696019353211, -0.0071925066658073272, -0.0032364938425027828, 0.0041692989134663652, 0.0093379081003107933, 0.0074786652256386074, -0.0010735062279496051, -0.010237173900496235, -0.012324720642499232, -0.0042723291231899089, 0.008930495381024299, 0.016990330867712209, 0.012026898235023757, -0.0043078644993643708, -0.020354890703290978, -0.022247552115120393, -0.0051166188483511921, 0.020827594074549902, 0.035303955194452105, 0.022313620924252941, -0.015522007438030852, -0.053627923871104419, -0.057729259584455267, -0.0055920695652333617, 0.09546150492724724, 0.20770789994796729, 0.28124764861749707, 0.28124764861749707, 0.20770789994796729, 0.09546150492724724, -0.0055920695652333617, -0.057729259584455267, -0.053627923871104419, -0.015522007438030852, 0.022313620924252941, 0.035303955194452105, 0.020827594074549902, -0.0051166188483511921, -0.022247552115120393, -0.020354890703290978, -0.0043078644993643708, 0.012026898235023757, 0.016990330867712209, 0.008930495381024299, -0.0042723291231899089, -0.012324720642499232, -0.010237173900496235, -0.0010735062279496051, 0.0074786652256386074, 0.0093379081003107933, 0.0041692989134663652, -0.0032364938425027828, -0.0071925066658073272, -0.0053612696019353211, 0.000058907202663463021, 0.0046103353139922464, 0.0051445223344098283, 0.0018983208818263899, -0.002201497643114001, -0.0040735920911981246, -0.0027309161564440798, 0.00034312897240270832, 0.0026648119723109188, 0.0027021050544952805, 0.00081608452015475674, -0.0013203469118128904, -0.0021476885952631322, -0.0013146641601913481, 0.00028818270514501497, 0.0013898320097359028, 0.0013125734929416611, 0.00033891792729655367, -0.00067519292096128111, -0.0010176735959221989, -0.00059103999780911953, 0.00014775747227131021, 0.00062469059103831791, 0.0005731692576012164, 0.00014910674531216518, -0.00027422523534979137, -0.00041362049666060583, -0.00024670053427927049, 0.000038771611527053258, 0.00022544194000779147, 0.00021834967506824691, 0.000072358091520568224, -0.000087828472441034143, -0.00016869734220992594, -0.00015557320504029068, -0.000092754336923977324, -0.000034228285083098877, 0.00000050210021190120859 };