1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-10 10:33:29 -05:00

IQ swap: fixed decimators

This commit is contained in:
f4exb 2020-06-22 04:16:04 +02:00
parent c4136c6a44
commit c8f87d1c87
5 changed files with 620 additions and 613 deletions

File diff suppressed because it is too large Load Diff

View File

@ -49,11 +49,12 @@ public:
void decimate64_cen(FSampleVector::iterator* it, const float* buf, qint32 nbIAndQ); void decimate64_cen(FSampleVector::iterator* it, const float* buf, qint32 nbIAndQ);
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator2; // 1st stages IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator2; // 1st stages
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator4; // 2nd stages IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, true> m_decimator2s; // 1st stages - straight
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator8; // 3rd stages IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, true> m_decimator4; // 2nd stages
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator16; // 4th stages IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, true> m_decimator8; // 3rd stages
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator32; // 5th stages IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, true> m_decimator16; // 4th stages
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, IQOrder> m_decimator64; // 6th stages IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, true> m_decimator32; // 5th stages
IntHalfbandFilterEOF<DECIMATORSFF_HB_FILTER_ORDER, true> m_decimator64; // 6th stages
}; };
template<bool IQOrder> template<bool IQOrder>
@ -93,10 +94,10 @@ void DecimatorsFF<IQOrder>::decimate8_inf(FSampleVector::iterator* it, const flo
xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]); xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]); yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
(**it).setReal(xreal[1]); (**it).setReal(IQOrder ? xreal[1] : yimag[1]);
(**it).setImag(yimag[1]); (**it).setImag(IQOrder ? yimag[1] : xreal[1]);
++(*it); ++(*it);
} }
@ -116,10 +117,10 @@ void DecimatorsFF<IQOrder>::decimate8_sup(FSampleVector::iterator* it, const flo
xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]); xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]); yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]);
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
(**it).setReal(xreal[1]); (**it).setReal(IQOrder ? xreal[1] : yimag[1]);
(**it).setImag(yimag[1]); (**it).setImag(IQOrder ? yimag[1] : xreal[1]);
++(*it); ++(*it);
} }
@ -141,13 +142,13 @@ void DecimatorsFF<IQOrder>::decimate16_inf(FSampleVector::iterator* it, const fl
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
(**it).setReal(xreal[3]); (**it).setReal(IQOrder ? xreal[3] : yimag[3]);
(**it).setImag(yimag[3]); (**it).setImag(IQOrder ? yimag[3] : xreal[3]);
++(*it); ++(*it);
} }
@ -169,13 +170,13 @@ void DecimatorsFF<IQOrder>::decimate16_sup(FSampleVector::iterator* it, const fl
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
(**it).setReal(xreal[3]); (**it).setReal(IQOrder ? xreal[3] : yimag[3]);
(**it).setImag(yimag[3]); (**it).setImag(IQOrder ? yimag[3] : xreal[3]);
++(*it); ++(*it);
} }
@ -195,18 +196,18 @@ void DecimatorsFF<IQOrder>::decimate32_inf(FSampleVector::iterator* it, const fl
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]); m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
(**it).setReal(xreal[7]); (**it).setReal(IQOrder ? xreal[7] : yimag[7]);
(**it).setImag(yimag[7]); (**it).setImag(IQOrder ? yimag[7] : xreal[7]);
++(*it); ++(*it);
} }
@ -226,18 +227,18 @@ void DecimatorsFF<IQOrder>::decimate32_sup(FSampleVector::iterator* it, const fl
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]); m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
(**it).setReal(xreal[7]); (**it).setReal(IQOrder ? xreal[7] : yimag[7]);
(**it).setImag(yimag[7]); (**it).setImag(IQOrder ? yimag[7] : xreal[7]);
++(*it); ++(*it);
} }
@ -257,14 +258,14 @@ void DecimatorsFF<IQOrder>::decimate64_inf(FSampleVector::iterator* it, const fl
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]); m_decimator2s.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]); m_decimator2s.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]); m_decimator2s.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]); m_decimator2s.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
@ -276,8 +277,8 @@ void DecimatorsFF<IQOrder>::decimate64_inf(FSampleVector::iterator* it, const fl
m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]); m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
(**it).setReal(xreal[15]); (**it).setReal(IQOrder ? xreal[15] : yimag[15]);
(**it).setImag(yimag[15]); (**it).setImag(IQOrder ? yimag[15] : xreal[15]);
++(*it); ++(*it);
} }
@ -297,14 +298,14 @@ void DecimatorsFF<IQOrder>::decimate64_sup(FSampleVector::iterator* it, const fl
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]); m_decimator2s.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]); m_decimator2s.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]); m_decimator2s.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]); m_decimator2s.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
@ -316,8 +317,8 @@ void DecimatorsFF<IQOrder>::decimate64_sup(FSampleVector::iterator* it, const fl
m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]); m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
(**it).setReal(xreal[15]); (**it).setReal(IQOrder ? xreal[15] : yimag[15]);
(**it).setImag(yimag[15]); (**it).setImag(IQOrder ? yimag[15] : xreal[15]);
++(*it); ++(*it);
} }

View File

@ -49,11 +49,12 @@ public:
void decimate64_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ); void decimate64_cen(SampleVector::iterator* it, const float* buf, qint32 nbIAndQ);
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator2; // 1st stages IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator2; // 1st stages
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator4; // 2nd stages IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, true> m_decimator2s; // 1st stages - straight
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator8; // 3rd stages IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, true> m_decimator4; // 2nd stages
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator16; // 4th stages IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, true> m_decimator8; // 3rd stages
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator32; // 5th stages IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, true> m_decimator16; // 4th stages
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, IQOrder> m_decimator64; // 6th stages IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, true> m_decimator32; // 5th stages
IntHalfbandFilterEOF<DECIMATORSFI_HB_FILTER_ORDER, true> m_decimator64; // 6th stages
}; };
template<bool IQOrder> template<bool IQOrder>
@ -93,10 +94,10 @@ void DecimatorsFI<IQOrder>::decimate8_inf(SampleVector::iterator* it, const floa
xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]); xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]); yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
(**it).setReal(xreal[1] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[1] : yimag[1]) * SDR_RX_SCALED);
(**it).setImag(yimag[1] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[1] : xreal[1]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -116,10 +117,10 @@ void DecimatorsFI<IQOrder>::decimate8_sup(SampleVector::iterator* it, const floa
xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]); xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]); yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]);
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
(**it).setReal(xreal[1] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[1] : yimag[1]) * SDR_RX_SCALED);
(**it).setImag(yimag[1] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[1] : xreal[1]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -141,13 +142,13 @@ void DecimatorsFI<IQOrder>::decimate16_inf(SampleVector::iterator* it, const flo
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
(**it).setReal(xreal[3] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[3] : yimag[3]) * SDR_RX_SCALED);
(**it).setImag(yimag[3] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[3] : xreal[3]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -169,13 +170,13 @@ void DecimatorsFI<IQOrder>::decimate16_sup(SampleVector::iterator* it, const flo
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
(**it).setReal(xreal[3] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[3] : yimag[3]) * SDR_RX_SCALED);
(**it).setImag(yimag[3] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[3] : xreal[3]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -195,18 +196,18 @@ void DecimatorsFI<IQOrder>::decimate32_inf(SampleVector::iterator* it, const flo
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]); m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
(**it).setReal(xreal[7] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[7] : yimag[7]) * SDR_RX_SCALED);
(**it).setImag(yimag[7] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[7] : xreal[7]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -226,18 +227,18 @@ void DecimatorsFI<IQOrder>::decimate32_sup(SampleVector::iterator* it, const flo
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]); m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
(**it).setReal(xreal[7] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[7] : yimag[7]) * SDR_RX_SCALED);
(**it).setImag(yimag[7] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[7] : xreal[7]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -257,14 +258,14 @@ void DecimatorsFI<IQOrder>::decimate64_inf(SampleVector::iterator* it, const flo
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]); m_decimator2s.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]); m_decimator2s.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]); m_decimator2s.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]); m_decimator2s.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
@ -276,8 +277,8 @@ void DecimatorsFI<IQOrder>::decimate64_inf(SampleVector::iterator* it, const flo
m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]); m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
(**it).setReal(xreal[15] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[15] : yimag[15]) * SDR_RX_SCALED);
(**it).setImag(yimag[15] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[15] : xreal[15]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }
@ -297,14 +298,14 @@ void DecimatorsFI<IQOrder>::decimate64_sup(SampleVector::iterator* it, const flo
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]); m_decimator2s.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]); m_decimator2s.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]); m_decimator2s.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]); m_decimator2s.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
@ -316,8 +317,8 @@ void DecimatorsFI<IQOrder>::decimate64_sup(SampleVector::iterator* it, const flo
m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]); m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
(**it).setReal(xreal[15] * SDR_RX_SCALED); (**it).setReal((IQOrder ? xreal[15] : yimag[15]) * SDR_RX_SCALED);
(**it).setImag(yimag[15] * SDR_RX_SCALED); (**it).setImag((IQOrder ? yimag[15] : xreal[15]) * SDR_RX_SCALED);
++(*it); ++(*it);
} }

View File

@ -76,11 +76,12 @@ public:
void decimate64_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ); void decimate64_cen(FSampleVector::iterator* it, const T* buf, qint32 nbIAndQ);
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator2; // 1st stages IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator2; // 1st stages
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator4; // 2nd stages IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, true> m_decimator2s; // 1st stages - straight
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator8; // 3rd stages IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, true> m_decimator4; // 2nd stages
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator16; // 4th stages IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, true> m_decimator8; // 3rd stages
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator32; // 5th stages IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, true> m_decimator16; // 4th stages
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, IQOrder> m_decimator64; // 6th stages IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, true> m_decimator32; // 5th stages
IntHalfbandFilterEOF<DECIMATORS_IF_FILTER_ORDER, true> m_decimator64; // 6th stages
}; };
template<typename T, uint InputBits, bool IQOrder> template<typename T, uint InputBits, bool IQOrder>
@ -254,10 +255,10 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate8_inf(FSampleVector::iterator*
xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]); xreal[1] = (buf[pos+0] - buf[pos+3] + buf[pos+7] - buf[pos+4]);
yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]); yimag[1] = (buf[pos+1] - buf[pos+5] + buf[pos+2] - buf[pos+6]);
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
(**it).setReal(xreal[1] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[1] : yimag[1]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[1] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[1] : xreal[1]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -277,10 +278,10 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate8_sup(FSampleVector::iterator*
xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]); xreal[1] = (buf[pos+1] - buf[pos+2] - buf[pos+5] + buf[pos+6]);
yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]); yimag[1] = (- buf[pos+0] - buf[pos+3] + buf[pos+4] + buf[pos+7]);
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
(**it).setReal(xreal[1] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[1] : yimag[1]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[1] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[1] : xreal[1]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -360,13 +361,13 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate16_inf(FSampleVector::iterator
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
(**it).setReal(xreal[3] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[3] : yimag[3]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[3] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[3] : xreal[3]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -386,13 +387,13 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate16_sup(FSampleVector::iterator
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
(**it).setReal(xreal[3] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[3] : yimag[3]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[3] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[3] : xreal[3]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -521,18 +522,18 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate32_inf(FSampleVector::iterator
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]); m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
(**it).setReal(xreal[7] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[7] : yimag[7]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[7] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[7] : xreal[7]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -552,18 +553,18 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate32_sup(FSampleVector::iterator
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]); m_decimator8.myDecimate(xreal[3], yimag[3], &xreal[7], &yimag[7]);
(**it).setReal(xreal[7] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[7] : yimag[7]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[7] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[7] : xreal[7]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -789,14 +790,14 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate64_inf(FSampleVector::iterator
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]); m_decimator2s.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]); m_decimator2s.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]); m_decimator2s.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]); m_decimator2s.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
@ -808,8 +809,8 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate64_inf(FSampleVector::iterator
m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]); m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
(**it).setReal(xreal[15] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[15] : yimag[15]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[15] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[15] : xreal[15]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }
@ -829,14 +830,14 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate64_sup(FSampleVector::iterator
pos += 8; pos += 8;
} }
m_decimator2.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]); m_decimator2s.myDecimate(xreal[0], yimag[0], &xreal[1], &yimag[1]);
m_decimator2.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]); m_decimator2s.myDecimate(xreal[2], yimag[2], &xreal[3], &yimag[3]);
m_decimator2.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]); m_decimator2s.myDecimate(xreal[4], yimag[4], &xreal[5], &yimag[5]);
m_decimator2.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]); m_decimator2s.myDecimate(xreal[6], yimag[6], &xreal[7], &yimag[7]);
m_decimator2.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]); m_decimator2s.myDecimate(xreal[8], yimag[8], &xreal[9], &yimag[9]);
m_decimator2.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]); m_decimator2s.myDecimate(xreal[10], yimag[10], &xreal[11], &yimag[11]);
m_decimator2.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]); m_decimator2s.myDecimate(xreal[12], yimag[12], &xreal[13], &yimag[13]);
m_decimator2.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]); m_decimator2s.myDecimate(xreal[14], yimag[14], &xreal[15], &yimag[15]);
m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]); m_decimator4.myDecimate(xreal[1], yimag[1], &xreal[3], &yimag[3]);
m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]); m_decimator4.myDecimate(xreal[5], yimag[5], &xreal[7], &yimag[7]);
@ -848,8 +849,8 @@ void DecimatorsIF<T, InputBits, IQOrder>::decimate64_sup(FSampleVector::iterator
m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]); m_decimator16.myDecimate(xreal[7], yimag[7], &xreal[15], &yimag[15]);
(**it).setReal(xreal[15] * decimation_scale<InputBits>::scaleIn); (**it).setReal((IQOrder ? xreal[15] : yimag[15]) * decimation_scale<InputBits>::scaleIn);
(**it).setImag(yimag[15] * decimation_scale<InputBits>::scaleIn); (**it).setImag((IQOrder ? yimag[15] : xreal[15]) * decimation_scale<InputBits>::scaleIn);
++(*it); ++(*it);
} }

File diff suppressed because it is too large Load Diff