1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
void wci_nyq_filt ( intSigGen i_symb, // I symbol input
intSigGen q_symb, // Q symbol input
vector<intSigGen> &nyq_coeffs, // Nyquist coefficients for I and Q
vector<intSigGen> &nyq_delay_i, // I delay line storage
vector<intSigGen> &nyq_delay_q, // Q delay line storage
intSigGen *nyq_iout, // I output from Nyquist filter
intSigGen *nyq_qout) // Q output from Nyquist filter
{
// intSigGen i;
intSigGen sumI, sumQ;
vector<intSigGen>::iterator iter;
vector<intSigGen>::iterator iterCoeffs;
vector<intSigGen>::iterator iterDelayI;
vector<intSigGen>::iterator iterDelayQ;
// Compute the next filter output
sumI = sumQ = 0;
for (iterCoeffs = nyq_coeffs.begin(),
iterDelayI = nyq_delay_i.begin(),
iterDelayQ = nyq_delay_q.begin();
iterCoeffs != nyq_coeffs.end();
++iterCoeffs,
++iterDelayI,
++iterDelayQ)
{
sumI += *iterDelayI * *iterCoeffs;
sumQ += *iterDelayQ * *iterCoeffs;
}
*nyq_iout = sumI;
*nyq_qout = sumQ;
// *nyq_iout = inner_product(nyq_coeffs.begin(),
// nyq_coeffs.end(),
// nyq_delay_i.begin(),
// 0);
// *nyq_qout = inner_product(nyq_coeffs.begin(),
// nyq_coeffs.end(),
// nyq_delay_q.begin(),
// 0);
// Shift the delay lines and put the next symbol in the delay lines
nyq_delay_i.pop_back();
iter = nyq_delay_i.begin();
nyq_delay_i.insert(iter, i_symb);
nyq_delay_q.pop_back();
iter = nyq_delay_q.begin();
nyq_delay_q.insert(iter, q_symb);
}
|