From 43d71251bfe403bb0a1b832bd62d29cb572db96a Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Mon, 1 Feb 2021 16:40:23 +0000 Subject: [PATCH] Add 128 and 256 decimation for AirspyHF --- plugins/samplesource/airspyhf/airspyhfgui.cpp | 2 +- plugins/samplesource/airspyhf/airspyhfgui.ui | 20 +- .../samplesource/airspyhf/airspyhfworker.cpp | 12 + plugins/samplesource/airspyhf/readme.md | 2 +- sdrbase/dsp/decimatorsfi.h | 845 ++++++++++++++++++ 5 files changed, 874 insertions(+), 7 deletions(-) diff --git a/plugins/samplesource/airspyhf/airspyhfgui.cpp b/plugins/samplesource/airspyhf/airspyhfgui.cpp index 791569a2c..93da0660d 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.cpp +++ b/plugins/samplesource/airspyhf/airspyhfgui.cpp @@ -292,7 +292,7 @@ void AirspyHFGui::on_sampleRate_currentIndexChanged(int index) void AirspyHFGui::on_decim_currentIndexChanged(int index) { - if ((index < 0) || (index > 6)) + if ((index < 0) || (index > 8)) return; m_settings.m_log2Decim = index; sendSettings(); diff --git a/plugins/samplesource/airspyhf/airspyhfgui.ui b/plugins/samplesource/airspyhf/airspyhfgui.ui index 1d0e2455a..40463d73b 100644 --- a/plugins/samplesource/airspyhf/airspyhfgui.ui +++ b/plugins/samplesource/airspyhf/airspyhfgui.ui @@ -395,6 +395,16 @@ 64 + + + 128 + + + + + 256 + + @@ -591,17 +601,17 @@ + + ButtonSwitch + QToolButton +
gui/buttonswitch.h
+
ValueDial QWidget
gui/valuedial.h
1
- - ButtonSwitch - QToolButton -
gui/buttonswitch.h
-
TransverterButton QPushButton diff --git a/plugins/samplesource/airspyhf/airspyhfworker.cpp b/plugins/samplesource/airspyhf/airspyhfworker.cpp index a7227528a..22fdc1b1b 100644 --- a/plugins/samplesource/airspyhf/airspyhfworker.cpp +++ b/plugins/samplesource/airspyhf/airspyhfworker.cpp @@ -111,6 +111,12 @@ void AirspyHFWorker::callbackIQ(const float* buf, qint32 len) case 6: m_decimatorsIQ.decimate64_cen(&it, buf, len); break; + case 7: + m_decimatorsIQ.decimate128_cen(&it, buf, len); + break; + case 8: + m_decimatorsIQ.decimate256_cen(&it, buf, len); + break; default: break; } @@ -145,6 +151,12 @@ void AirspyHFWorker::callbackQI(const float* buf, qint32 len) case 6: m_decimatorsQI.decimate64_cen(&it, buf, len); break; + case 7: + m_decimatorsQI.decimate128_cen(&it, buf, len); + break; + case 8: + m_decimatorsQI.decimate256_cen(&it, buf, len); + break; default: break; } diff --git a/plugins/samplesource/airspyhf/readme.md b/plugins/samplesource/airspyhf/readme.md index d43807468..b4df31de0 100644 --- a/plugins/samplesource/airspyhf/readme.md +++ b/plugins/samplesource/airspyhf/readme.md @@ -71,7 +71,7 @@ Although the combo box is there to present a choice of sample rates at present t

8: Decimation factor

-The I/Q stream from the AirspyHF to host is downsampled by a power of two before being sent to the passband. Possible values are increasing powers of two: 1 (no decimation), 2, 4, 8, 16, 32, 64. When using audio channel plugins (AM, DSD, NFM, SSB...) please make sure that the sample rate is not less than the audio sample rate. +The I/Q stream from the AirspyHF to host is downsampled by a power of two before being sent to the passband. Possible values are increasing powers of two: 1 (no decimation), 2, 4, 8, 16, 32, 64, 128, 256. When using audio channel plugins (AM, DSD, NFM, SSB...) please make sure that the sample rate is not less than the audio sample rate.

9: Transverter mode open dialog

diff --git a/sdrbase/dsp/decimatorsfi.h b/sdrbase/dsp/decimatorsfi.h index 67babc61e..eb14e41dc 100644 --- a/sdrbase/dsp/decimatorsfi.h +++ b/sdrbase/dsp/decimatorsfi.h @@ -47,6 +47,8 @@ public: void decimate64_inf(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ); void decimate64_sup(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ); void decimate64_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ); + void decimate128_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ); + void decimate256_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ); IntHalfbandFilterEOF m_decimator2; // 1st stages IntHalfbandFilterEOF m_decimator2s; // 1st stages - straight @@ -55,6 +57,8 @@ public: IntHalfbandFilterEOF m_decimator16; // 4th stages IntHalfbandFilterEOF m_decimator32; // 5th stages IntHalfbandFilterEOF m_decimator64; // 6th stages + IntHalfbandFilterEOF m_decimator128; // 7th stages + IntHalfbandFilterEOF m_decimator256; // 8th stages }; @@ -1135,4 +1139,845 @@ void DecimatorsFI::decimate64_cen(SampleVector::iterator* it, const flo } } +template +void DecimatorsFI::decimate128_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ) +{ + float intbuf[128]; + + for (int pos = 0; pos < nbIAndQ - 255; pos += 256) + { + float *intbufp; + int posi; + + intbufp = intbuf; + posi = pos; + for (int i = 0; i < 4; i++) + { + intbufp[0] = buf[posi+2]; + intbufp[1] = buf[posi+3]; + intbufp[2] = buf[posi+6]; + intbufp[3] = buf[posi+7]; + intbufp[4] = buf[posi+10]; + intbufp[5] = buf[posi+11]; + intbufp[6] = buf[posi+14]; + intbufp[7] = buf[posi+15]; + intbufp[8] = buf[posi+18]; + intbufp[9] = buf[posi+19]; + intbufp[10] = buf[posi+22]; + intbufp[11] = buf[posi+23]; + intbufp[12] = buf[posi+26]; + intbufp[13] = buf[posi+27]; + intbufp[14] = buf[posi+30]; + intbufp[15] = buf[posi+31]; + intbufp[16] = buf[posi+34]; + intbufp[17] = buf[posi+35]; + intbufp[18] = buf[posi+38]; + intbufp[19] = buf[posi+39]; + intbufp[20] = buf[posi+42]; + intbufp[21] = buf[posi+43]; + intbufp[22] = buf[posi+46]; + intbufp[23] = buf[posi+47]; + intbufp[24] = buf[posi+50]; + intbufp[25] = buf[posi+51]; + intbufp[26] = buf[posi+54]; + intbufp[27] = buf[posi+55]; + intbufp[28] = buf[posi+58]; + intbufp[29] = buf[posi+59]; + intbufp[30] = buf[posi+62]; + intbufp[31] = buf[posi+63]; + intbufp += 32; + posi += 64; + } + + intbufp = intbuf; + posi = pos; + for (int i = 0; i < 2; i++) + { + m_decimator2.myDecimate( + buf[posi+0], + buf[posi+1], + &intbufp[0], + &intbufp[1]); + m_decimator2.myDecimate( + buf[posi+4], + buf[posi+5], + &intbufp[2], + &intbufp[3]); + m_decimator2.myDecimate( + buf[posi+8], + buf[posi+9], + &intbufp[4], + &intbufp[5]); + m_decimator2.myDecimate( + buf[posi+12], + buf[posi+13], + &intbufp[6], + &intbufp[7]); + m_decimator2.myDecimate( + buf[posi+16], + buf[posi+17], + &intbufp[8], + &intbufp[9]); + m_decimator2.myDecimate( + buf[posi+20], + buf[posi+21], + &intbufp[10], + &intbufp[11]); + m_decimator2.myDecimate( + buf[posi+24], + buf[posi+25], + &intbufp[12], + &intbufp[13]); + m_decimator2.myDecimate( + buf[posi+28], + buf[posi+29], + &intbufp[14], + &intbufp[15]); + m_decimator2.myDecimate( + buf[posi+32], + buf[posi+33], + &intbufp[16], + &intbufp[17]); + m_decimator2.myDecimate( + buf[posi+36], + buf[posi+37], + &intbufp[18], + &intbufp[19]); + m_decimator2.myDecimate( + buf[posi+40], + buf[posi+41], + &intbufp[20], + &intbufp[21]); + m_decimator2.myDecimate( + buf[posi+44], + buf[posi+45], + &intbufp[22], + &intbufp[23]); + m_decimator2.myDecimate( + buf[posi+48], + buf[posi+49], + &intbufp[24], + &intbufp[25]); + m_decimator2.myDecimate( + buf[posi+52], + buf[posi+53], + &intbufp[26], + &intbufp[27]); + m_decimator2.myDecimate( + buf[posi+56], + buf[posi+57], + &intbufp[28], + &intbufp[29]); + m_decimator2.myDecimate( + buf[posi+60], + buf[posi+61], + &intbufp[30], + &intbufp[31]); + m_decimator2.myDecimate( + buf[posi+64], + buf[posi+65], + &intbufp[32], + &intbufp[33]); + m_decimator2.myDecimate( + buf[posi+68], + buf[posi+69], + &intbufp[34], + &intbufp[35]); + m_decimator2.myDecimate( + buf[posi+72], + buf[posi+73], + &intbufp[36], + &intbufp[37]); + m_decimator2.myDecimate( + buf[posi+76], + buf[posi+77], + &intbufp[38], + &intbufp[39]); + m_decimator2.myDecimate( + buf[posi+80], + buf[posi+81], + &intbufp[40], + &intbufp[41]); + m_decimator2.myDecimate( + buf[posi+84], + buf[posi+85], + &intbufp[42], + &intbufp[43]); + m_decimator2.myDecimate( + buf[posi+88], + buf[posi+89], + &intbufp[44], + &intbufp[45]); + m_decimator2.myDecimate( + buf[posi+92], + buf[posi+93], + &intbufp[46], + &intbufp[47]); + m_decimator2.myDecimate( + buf[posi+96], + buf[posi+97], + &intbufp[48], + &intbufp[49]); + m_decimator2.myDecimate( + buf[posi+100], + buf[posi+101], + &intbufp[50], + &intbufp[51]); + m_decimator2.myDecimate( + buf[posi+104], + buf[posi+105], + &intbufp[52], + &intbufp[53]); + m_decimator2.myDecimate( + buf[posi+108], + buf[posi+109], + &intbufp[54], + &intbufp[55]); + m_decimator2.myDecimate( + buf[posi+112], + buf[posi+113], + &intbufp[56], + &intbufp[57]); + m_decimator2.myDecimate( + buf[posi+116], + buf[posi+117], + &intbufp[58], + &intbufp[59]); + m_decimator2.myDecimate( + buf[posi+120], + buf[posi+121], + &intbufp[60], + &intbufp[61]); + m_decimator2.myDecimate( + buf[posi+124], + buf[posi+125], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + posi += 128; + } + + intbufp = intbuf; + for (int i = 0; i < 2; i++) + { + m_decimator4.myDecimate( + intbufp[0], + intbufp[1], + &intbufp[2], + &intbufp[3]); + m_decimator4.myDecimate( + intbufp[4], + intbufp[5], + &intbufp[6], + &intbufp[7]); + m_decimator4.myDecimate( + intbufp[8], + intbufp[9], + &intbufp[10], + &intbufp[11]); + m_decimator4.myDecimate( + intbufp[12], + intbufp[13], + &intbufp[14], + &intbufp[15]); + m_decimator4.myDecimate( + intbufp[16], + intbufp[17], + &intbufp[18], + &intbufp[19]); + m_decimator4.myDecimate( + intbufp[20], + intbufp[21], + &intbufp[22], + &intbufp[23]); + m_decimator4.myDecimate( + intbufp[24], + intbufp[25], + &intbufp[26], + &intbufp[27]); + m_decimator4.myDecimate( + intbufp[28], + intbufp[29], + &intbufp[30], + &intbufp[31]); + m_decimator4.myDecimate( + intbufp[32], + intbufp[33], + &intbufp[34], + &intbufp[35]); + m_decimator4.myDecimate( + intbufp[36], + intbufp[37], + &intbufp[38], + &intbufp[39]); + m_decimator4.myDecimate( + intbufp[40], + intbufp[41], + &intbufp[42], + &intbufp[43]); + m_decimator4.myDecimate( + intbufp[44], + intbufp[45], + &intbufp[46], + &intbufp[47]); + m_decimator4.myDecimate( + intbufp[48], + intbufp[49], + &intbufp[50], + &intbufp[51]); + m_decimator4.myDecimate( + intbufp[52], + intbufp[53], + &intbufp[54], + &intbufp[55]); + m_decimator4.myDecimate( + intbufp[56], + intbufp[57], + &intbufp[58], + &intbufp[59]); + m_decimator4.myDecimate( + intbufp[60], + intbufp[61], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 2; i++) + { + m_decimator8.myDecimate( + intbufp[2], + intbufp[3], + &intbufp[6], + &intbufp[7]); + m_decimator8.myDecimate( + intbufp[10], + intbufp[11], + &intbufp[14], + &intbufp[15]); + m_decimator8.myDecimate( + intbufp[18], + intbufp[19], + &intbufp[22], + &intbufp[23]); + m_decimator8.myDecimate( + intbufp[26], + intbufp[27], + &intbufp[30], + &intbufp[31]); + m_decimator8.myDecimate( + intbufp[34], + intbufp[35], + &intbufp[38], + &intbufp[39]); + m_decimator8.myDecimate( + intbufp[42], + intbufp[43], + &intbufp[46], + &intbufp[47]); + m_decimator8.myDecimate( + intbufp[50], + intbufp[51], + &intbufp[54], + &intbufp[55]); + m_decimator8.myDecimate( + intbufp[58], + intbufp[59], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 2; i++) + { + m_decimator16.myDecimate( + intbufp[6], + intbufp[7], + &intbufp[14], + &intbufp[15]); + m_decimator16.myDecimate( + intbufp[22], + intbufp[23], + &intbufp[30], + &intbufp[31]); + m_decimator16.myDecimate( + intbufp[38], + intbufp[39], + &intbufp[46], + &intbufp[47]); + m_decimator16.myDecimate( + intbufp[54], + intbufp[55], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 2; i++) + { + m_decimator32.myDecimate( + intbufp[14], + intbufp[15], + &intbufp[30], + &intbufp[31]); + m_decimator32.myDecimate( + intbufp[46], + intbufp[47], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 2; i++) + { + m_decimator64.myDecimate( + intbufp[30], + intbufp[31], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + m_decimator128.myDecimate( + intbuf[62], + intbuf[63], + &intbuf[126], + &intbuf[127]); + + (**it).setReal(intbuf[126] * SDR_RX_SCALED); + (**it).setImag(intbuf[127] * SDR_RX_SCALED); + ++(*it); + } +} + +template +void DecimatorsFI::decimate256_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ) +{ + float intbuf[256]; + + for (int pos = 0; pos < nbIAndQ - 511; pos += 512) + { + float *intbufp; + int posi; + + intbufp = intbuf; + posi = pos; + for (int i = 0; i < 8; i++) + { + intbufp[0] = buf[posi+2]; + intbufp[1] = buf[posi+3]; + intbufp[2] = buf[posi+6]; + intbufp[3] = buf[posi+7]; + intbufp[4] = buf[posi+10]; + intbufp[5] = buf[posi+11]; + intbufp[6] = buf[posi+14]; + intbufp[7] = buf[posi+15]; + intbufp[8] = buf[posi+18]; + intbufp[9] = buf[posi+19]; + intbufp[10] = buf[posi+22]; + intbufp[11] = buf[posi+23]; + intbufp[12] = buf[posi+26]; + intbufp[13] = buf[posi+27]; + intbufp[14] = buf[posi+30]; + intbufp[15] = buf[posi+31]; + intbufp[16] = buf[posi+34]; + intbufp[17] = buf[posi+35]; + intbufp[18] = buf[posi+38]; + intbufp[19] = buf[posi+39]; + intbufp[20] = buf[posi+42]; + intbufp[21] = buf[posi+43]; + intbufp[22] = buf[posi+46]; + intbufp[23] = buf[posi+47]; + intbufp[24] = buf[posi+50]; + intbufp[25] = buf[posi+51]; + intbufp[26] = buf[posi+54]; + intbufp[27] = buf[posi+55]; + intbufp[28] = buf[posi+58]; + intbufp[29] = buf[posi+59]; + intbufp[30] = buf[posi+62]; + intbufp[31] = buf[posi+63]; + intbufp += 32; + posi += 64; + } + + intbufp = intbuf; + posi = pos; + for (int i = 0; i < 4; i++) + { + m_decimator2.myDecimate( + buf[posi+0], + buf[posi+1], + &intbufp[0], + &intbufp[1]); + m_decimator2.myDecimate( + buf[posi+4], + buf[posi+5], + &intbufp[2], + &intbufp[3]); + m_decimator2.myDecimate( + buf[posi+8], + buf[posi+9], + &intbufp[4], + &intbufp[5]); + m_decimator2.myDecimate( + buf[posi+12], + buf[posi+13], + &intbufp[6], + &intbufp[7]); + m_decimator2.myDecimate( + buf[posi+16], + buf[posi+17], + &intbufp[8], + &intbufp[9]); + m_decimator2.myDecimate( + buf[posi+20], + buf[posi+21], + &intbufp[10], + &intbufp[11]); + m_decimator2.myDecimate( + buf[posi+24], + buf[posi+25], + &intbufp[12], + &intbufp[13]); + m_decimator2.myDecimate( + buf[posi+28], + buf[posi+29], + &intbufp[14], + &intbufp[15]); + m_decimator2.myDecimate( + buf[posi+32], + buf[posi+33], + &intbufp[16], + &intbufp[17]); + m_decimator2.myDecimate( + buf[posi+36], + buf[posi+37], + &intbufp[18], + &intbufp[19]); + m_decimator2.myDecimate( + buf[posi+40], + buf[posi+41], + &intbufp[20], + &intbufp[21]); + m_decimator2.myDecimate( + buf[posi+44], + buf[posi+45], + &intbufp[22], + &intbufp[23]); + m_decimator2.myDecimate( + buf[posi+48], + buf[posi+49], + &intbufp[24], + &intbufp[25]); + m_decimator2.myDecimate( + buf[posi+52], + buf[posi+53], + &intbufp[26], + &intbufp[27]); + m_decimator2.myDecimate( + buf[posi+56], + buf[posi+57], + &intbufp[28], + &intbufp[29]); + m_decimator2.myDecimate( + buf[posi+60], + buf[posi+61], + &intbufp[30], + &intbufp[31]); + m_decimator2.myDecimate( + buf[posi+64], + buf[posi+65], + &intbufp[32], + &intbufp[33]); + m_decimator2.myDecimate( + buf[posi+68], + buf[posi+69], + &intbufp[34], + &intbufp[35]); + m_decimator2.myDecimate( + buf[posi+72], + buf[posi+73], + &intbufp[36], + &intbufp[37]); + m_decimator2.myDecimate( + buf[posi+76], + buf[posi+77], + &intbufp[38], + &intbufp[39]); + m_decimator2.myDecimate( + buf[posi+80], + buf[posi+81], + &intbufp[40], + &intbufp[41]); + m_decimator2.myDecimate( + buf[posi+84], + buf[posi+85], + &intbufp[42], + &intbufp[43]); + m_decimator2.myDecimate( + buf[posi+88], + buf[posi+89], + &intbufp[44], + &intbufp[45]); + m_decimator2.myDecimate( + buf[posi+92], + buf[posi+93], + &intbufp[46], + &intbufp[47]); + m_decimator2.myDecimate( + buf[posi+96], + buf[posi+97], + &intbufp[48], + &intbufp[49]); + m_decimator2.myDecimate( + buf[posi+100], + buf[posi+101], + &intbufp[50], + &intbufp[51]); + m_decimator2.myDecimate( + buf[posi+104], + buf[posi+105], + &intbufp[52], + &intbufp[53]); + m_decimator2.myDecimate( + buf[posi+108], + buf[posi+109], + &intbufp[54], + &intbufp[55]); + m_decimator2.myDecimate( + buf[posi+112], + buf[posi+113], + &intbufp[56], + &intbufp[57]); + m_decimator2.myDecimate( + buf[posi+116], + buf[posi+117], + &intbufp[58], + &intbufp[59]); + m_decimator2.myDecimate( + buf[posi+120], + buf[posi+121], + &intbufp[60], + &intbufp[61]); + m_decimator2.myDecimate( + buf[posi+124], + buf[posi+125], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + posi += 128; + } + + intbufp = intbuf; + for (int i = 0; i < 4; i++) + { + m_decimator4.myDecimate( + intbufp[0], + intbufp[1], + &intbufp[2], + &intbufp[3]); + m_decimator4.myDecimate( + intbufp[4], + intbufp[5], + &intbufp[6], + &intbufp[7]); + m_decimator4.myDecimate( + intbufp[8], + intbufp[9], + &intbufp[10], + &intbufp[11]); + m_decimator4.myDecimate( + intbufp[12], + intbufp[13], + &intbufp[14], + &intbufp[15]); + m_decimator4.myDecimate( + intbufp[16], + intbufp[17], + &intbufp[18], + &intbufp[19]); + m_decimator4.myDecimate( + intbufp[20], + intbufp[21], + &intbufp[22], + &intbufp[23]); + m_decimator4.myDecimate( + intbufp[24], + intbufp[25], + &intbufp[26], + &intbufp[27]); + m_decimator4.myDecimate( + intbufp[28], + intbufp[29], + &intbufp[30], + &intbufp[31]); + m_decimator4.myDecimate( + intbufp[32], + intbufp[33], + &intbufp[34], + &intbufp[35]); + m_decimator4.myDecimate( + intbufp[36], + intbufp[37], + &intbufp[38], + &intbufp[39]); + m_decimator4.myDecimate( + intbufp[40], + intbufp[41], + &intbufp[42], + &intbufp[43]); + m_decimator4.myDecimate( + intbufp[44], + intbufp[45], + &intbufp[46], + &intbufp[47]); + m_decimator4.myDecimate( + intbufp[48], + intbufp[49], + &intbufp[50], + &intbufp[51]); + m_decimator4.myDecimate( + intbufp[52], + intbufp[53], + &intbufp[54], + &intbufp[55]); + m_decimator4.myDecimate( + intbufp[56], + intbufp[57], + &intbufp[58], + &intbufp[59]); + m_decimator4.myDecimate( + intbufp[60], + intbufp[61], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 4; i++) + { + m_decimator8.myDecimate( + intbufp[2], + intbufp[3], + &intbufp[6], + &intbufp[7]); + m_decimator8.myDecimate( + intbufp[10], + intbufp[11], + &intbufp[14], + &intbufp[15]); + m_decimator8.myDecimate( + intbufp[18], + intbufp[19], + &intbufp[22], + &intbufp[23]); + m_decimator8.myDecimate( + intbufp[26], + intbufp[27], + &intbufp[30], + &intbufp[31]); + m_decimator8.myDecimate( + intbufp[34], + intbufp[35], + &intbufp[38], + &intbufp[39]); + m_decimator8.myDecimate( + intbufp[42], + intbufp[43], + &intbufp[46], + &intbufp[47]); + m_decimator8.myDecimate( + intbufp[50], + intbufp[51], + &intbufp[54], + &intbufp[55]); + m_decimator8.myDecimate( + intbufp[58], + intbufp[59], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 4; i++) + { + m_decimator16.myDecimate( + intbufp[6], + intbufp[7], + &intbufp[14], + &intbufp[15]); + m_decimator16.myDecimate( + intbufp[22], + intbufp[23], + &intbufp[30], + &intbufp[31]); + m_decimator16.myDecimate( + intbufp[38], + intbufp[39], + &intbufp[46], + &intbufp[47]); + m_decimator16.myDecimate( + intbufp[54], + intbufp[55], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 4; i++) + { + m_decimator32.myDecimate( + intbufp[14], + intbufp[15], + &intbufp[30], + &intbufp[31]); + m_decimator32.myDecimate( + intbufp[46], + intbufp[47], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 4; i++) + { + m_decimator64.myDecimate( + intbufp[30], + intbufp[31], + &intbufp[62], + &intbufp[63]); + intbufp += 64; + } + + intbufp = intbuf; + for (int i = 0; i < 2; i++) + { + m_decimator128.myDecimate( + intbufp[62], + intbufp[63], + &intbufp[126], + &intbufp[127]); + intbufp += 64; + } + + m_decimator256.myDecimate( + intbuf[126], + intbuf[127], + &intbuf[254], + &intbuf[255]); + + (**it).setReal(intbuf[254] * SDR_RX_SCALED); + (**it).setImag(intbuf[255] * SDR_RX_SCALED); + ++(*it); + } +} + #endif /* SDRBASE_DSP_DECIMATORSFI_H_ */