Digital Signal Processing Reference
In-Depth Information
mid[i].real = 0.0;
mid[i].imag = 0.0;
treble[i].real = 0.0;
treble[i].imag = 0.0;
}
for (i=0; i<NUMCOEFFS; i++) //same # of coeff for each filter
{
bass[i].real = lpcoeff[i]; //lowpass coeff
mid[i].real = bpcoeff[i]; //bandpass coeff
treble[i].real = hpcoeff[i]; //highpass coef
}
cfftr2_dit(bass,W,PTS); //transform each band
cfftr2_dit(mid,W,PTS);
//into frequency domain
cfftr2_dit(treble,W,PTS);
comm_intr(); //initialise DSK, codec, McBSP
while(1)
//frame processing infinite loop
{
while (flag == 0); //wait for iobuffer full
flag = 0;
for (i=0 ; i<PTS/2 ; i++) //iobuffer into samples buffer
{
samples[i].real = iobuffer[i];
iobuffer[i] = overlap[i]; //previously processed output
} //to iobuffer
for (i=0 ; i<PTS/2 ; i++)
{ //upper-half samples to overlap
overlap[i] = samples[i+PTS/2].real;
samples[i+PTS/2].real = 0.0; //zero-pad input from iobuffer
}
for (i=0 ; i<PTS ; i++)
samples[i].imag = 0.0; //init samples buffer
cfftr2_dit(samples,W,PTS);
for (i=0 ; i<PTS ; i++) //construct freq domain filter
{ //sum of bass,mid,treble coeffs
h[i].real = bass[i].real*bass_gain + mid[i].real*mid_gain
+ treble[i].real*treble_gain;
h[i].imag = bass[i].imag*bass_gain + mid[i].imag*mid_gain
+ treble[i].imag*treble_gain;
}
for (i=0; i<PTS; i++) //frequency-domain representation
{ //complex multiply samples by h
a = samples[i].real;
b = samples[i].imag;
samples[i].real = h[i].real*a - h[i].imag*b;
samples[i].imag = h[i].real*b + h[i].imag*a;
}
icfftr2_dif(samples,W,PTS);
for (i=0 ; i<PTS ; i++)
samples[i].real /= PTS;
for (i=0 ; i<PTS/2 ; i++) //add 1st half to overlap
overlap[i] += samples[i].real;
} //end of infinite loop
} //end of main()
FIGURE 6.24. ( Continued )
Search WWH ::




Custom Search