Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
6. juni 2005<br />
<strong>Digitale</strong> <strong>filtre</strong><br />
4.7 Software simulering og implementering af FIR løsning<br />
Ved implementering af et filter på signal processoren er det fordelagtigt at<br />
konvertere filterkoefficienterne til fast tals format, se ressource afsnittet om<br />
Blackfin processoren på side 9. Til konverteringen benytes en udleveret<br />
konverterings funktion 'gen_C_header'.<br />
Det er fordelagtigt at undersøge om filteret virker under kontrollerede forhold.<br />
Dete gøres ved at skrive koden der skal behandle indgangssignal og teste koden<br />
med et kendt signal. Ved hjælp af MATLAB og 'gen_C_header' kan der laves et<br />
signal, der umiddelbart kan bruges til simulering i visualDSP++ med Blackfin<br />
processorens talformat og regne instruktioner.<br />
Til simuleringen defineres et hukommelsesområde hvor udgangssignalet<br />
gemmes. Værdierne i hukommelsen kan efter en foldning med det genererede<br />
signal sammenlignes med værdierne af en foldning af det samme signal med<br />
MATLAB.<br />
Funktionen til foldning af inputsignal med filter<br />
/**<br />
* Convolution of delayLine and filter<br />
*<br />
* _x is a delayline of _n elementens<br />
* the delayLine will contain data in the format<br />
* delayLine[] = { x0, x1, x2, x3, x4, x5 }<br />
* ^ _xOffset should be 0 as the next sample should be placed at<br />
* location 0 in the array<br />
*<br />
* after reciving 2 more samples the delayline would contain data as following:<br />
* delayLine[] = { x6, x7, x2, x3, x4, x5 }<br />
* ^ _xOffset should be 2<br />
*<br />
* _h is the filter coeffecients<br />
*<br />
*/<br />
inline fract32 runFIR(const fract16 _x[], const fract16 _h[], const int _n,<br />
const int _xOffset) {<br />
fract32 y = 0;<br />
int k = 0;<br />
//sum delayline with filter, starting with oldest value x[old] -> x[_n-1]<br />
for (k = 0; k < _n; k++) {<br />
fract32 temp = mult_fr1x32(_x [ (_xOffset + k + 1 ) % _n ] ,_h[_n-1-k]);<br />
y = add_fr1x32( temp, y);<br />
}<br />
return y;<br />
}<br />
ITVP4 – Gruppe 5 Side 32 af 53