26.07.2013 Views

Digitale filtre

Digitale filtre

Digitale filtre

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!