23 #ifndef SDRBASE_DSP_INTHALFBANDFILTEREO2_H_ 24 #define SDRBASE_DSP_INTHALFBANDFILTEREO2_H_ 32 template<u
int32_t HBFilterOrder>
111 doInterpolateFIR(SampleOut);
114 m_samples[m_ptr][0] = sampleIn->
real();
115 m_samples[m_ptr][1] = sampleIn->
imag();
134 storeSample32(*x, *y);
306 doInterpolateFIR(&s);
311 m_samples[m_ptr][0] = sampleIn->
real();
312 m_samples[m_ptr][1] = sampleIn->
imag();
335 doInterpolateFIR(&s);
340 m_samples[m_ptr][0] = sampleIn->
real();
341 m_samples[m_ptr][1] = sampleIn->
imag();
505 doInterpolateFIR(&s);
510 m_samples[m_ptr][0] = sampleIn->
real();
511 m_samples[m_ptr][1] = sampleIn->
imag();
534 doInterpolateFIR(&s);
539 m_samples[m_ptr][0] = sampleIn->
real();
540 m_samples[m_ptr][1] = sampleIn->
imag();
568 storeSample32(x1, y1);
571 storeSample32(*x2, *y2);
591 storeSample32(*x1, *y1);
604 m_samples[m_ptr][0] = *x1;
605 m_samples[m_ptr][1] = *y1;
621 doInterpolateFIR(x2, y2);
624 void myInterpolateInf(qint32 *x1, qint32 *y1, qint32 *x2, qint32 *y2, qint32 *x3, qint32 *y3, qint32 *x4, qint32 *y4)
626 myInterpolate(x1, y1, x2, y2);
627 myInterpolate(x3, y3, x4, y4);
640 void myInterpolateSup(qint32 *x1, qint32 *y1, qint32 *x2, qint32 *y2, qint32 *x3, qint32 *y3, qint32 *x4, qint32 *y4)
642 myInterpolate(x1, y1, x2, y2);
643 myInterpolate(x3, y3, x4, y4);
667 if ((m_ptr % 2) == 0)
669 m_even[0][m_ptr/2] = sampleI;
670 m_even[1][m_ptr/2] = sampleQ;
671 m_even[0][m_ptr/2 + m_size] = sampleI;
672 m_even[1][m_ptr/2 + m_size] = sampleQ;
676 m_odd[0][m_ptr/2] = sampleI;
677 m_odd[1][m_ptr/2] = sampleQ;
678 m_odd[0][m_ptr/2 + m_size] = sampleI;
679 m_odd[1][m_ptr/2 + m_size] = sampleQ;
685 if ((m_ptr % 2) == 0)
687 m_even[0][m_ptr/2] = x;
688 m_even[1][m_ptr/2] = y;
689 m_even[0][m_ptr/2 + m_size] = x;
690 m_even[1][m_ptr/2 + m_size] = y;
694 m_odd[0][m_ptr/2] = x;
695 m_odd[1][m_ptr/2] = y;
696 m_odd[0][m_ptr/2 + m_size] = x;
697 m_odd[1][m_ptr/2 + m_size] = y;
703 if ((m_ptr % 2) == 0)
705 m_even[0][m_ptr/2] = x;
706 m_even[1][m_ptr/2] = y;
707 m_even[0][m_ptr/2 + m_size] = x;
708 m_even[1][m_ptr/2 + m_size] = y;
712 m_odd[0][m_ptr/2] = x;
713 m_odd[1][m_ptr/2] = y;
714 m_odd[0][m_ptr/2 + m_size] = x;
715 m_odd[1][m_ptr/2 + m_size] = y;
721 m_ptr = m_ptr + 1 < 2*m_size ? m_ptr + 1: 0;
729 int a = m_ptr/2 + m_size;
731 for (
int i = 0; i < HBFIRFilterTraits<HBFilterOrder>::hbOrder / 4;
i++)
733 if ((m_ptr % 2) == 0)
748 if ((m_ptr % 2) == 0)
768 int a = m_ptr/2 + m_size;
771 for (
int i = 0; i < HBFIRFilterTraits<HBFilterOrder>::hbOrder / 4;
i++)
773 if ((m_ptr % 2) == 0)
788 if ((m_ptr % 2) == 0)
812 for (
int i = 0; i < HBFIRFilterTraits<HBFilterOrder>::hbOrder / 4;
i++)
833 for (
int i = 0; i < HBFIRFilterTraits<HBFilterOrder>::hbOrder / 4;
i++)
846 template<u
int32_t HBFilterOrder>
851 for (
int i = 0;
i < 2*m_size;
i++)
void storeSample(const FixReal &sampleI, const FixReal &sampleQ)
void myInterpolate(qint32 *x1, qint32 *y1, qint32 *x2, qint32 *y2)
void myDecimate(int32_t x1, int32_t y1, int32_t *x2, int32_t *y2)
void storeSample64(qint64 x, qint64 y)
void doFIR(int32_t *x, int32_t *y)
void myInterpolateInf(qint32 *x1, qint32 *y1, qint32 *x2, qint32 *y2, qint32 *x3, qint32 *y3, qint32 *x4, qint32 *y4)
void doInterpolateFIR(qint32 *x, qint32 *y)
bool workDecimateLowerHalf(Sample *sample)
void doFIR(Sample *sample)
bool workInterpolateUpperHalfZeroStuffing(Sample *sampleIn, Sample *sampleOut)
void doInterpolateFIR(Sample *sample)
void myDecimate(const Sample *sample1, Sample *sample2)
bool workInterpolateLowerHalfZeroStuffing(Sample *sampleIn, Sample *sampleOut)
bool workInterpolateLowerHalf(Sample *sampleIn, Sample *sampleOut)
bool workDecimateUpperHalf(Sample *sample)
bool workDecimateCenter(Sample *sample)
bool workDecimateCenter(int32_t *x, int32_t *y)
void myInterpolateZeroStuffing(int32_t *x1, int32_t *y1, int32_t *x2, int32_t *y2)
void myInterpolateZeroStuffing(Sample *sample1, Sample *sample2)
bool workInterpolateCenterZeroStuffing(Sample *sampleIn, Sample *SampleOut)
bool workInterpolateUpperHalf(Sample *sampleIn, Sample *sampleOut)
void myInterpolateSup(qint32 *x1, qint32 *y1, qint32 *x2, qint32 *y2, qint32 *x3, qint32 *y3, qint32 *x4, qint32 *y4)
void storeSample32(int32_t x, int32_t y)
bool workInterpolateCenter(Sample *sampleIn, Sample *SampleOut)