13.07.2015 Views

ELE610 FPGA-del, 2013. Lab. 3, Multiratefilter. Innhold

ELE610 FPGA-del, 2013. Lab. 3, Multiratefilter. Innhold

ELE610 FPGA-del, 2013. Lab. 3, Multiratefilter. Innhold

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

3.17 Mer FIR-filterdesign . . . . . . . . . . . . . . . . . . . . . . . . 123.18 Enda mer FIR-filterdesign . . . . . . . . . . . . . . . . . . . . . 133.19 CIC-filter blokka, lab03k . . . . . . . . . . . . . . . . . . . . . . 153.20 CIC-filter med kompensasjon, lab03l . . . . . . . . . . . . . . . 1511 Multirateteori 1711.1 Nedsampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711.2 Oppsampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1811.3 Multiratefiltrering . . . . . . . . . . . . . . . . . . . . . . . . . . 1912 Litt teori om CIC-filter 2413 Litt teori om filterdesign 2813.1 Generelt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2813.2 Plassering av nullpunkt og poler. . . . . . . . . . . . . . . . . . 3013.3 Vindusmetoden. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.4 Optimeringsmetoden . . . . . . . . . . . . . . . . . . . . . . . . 3113.5 Eksempel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312


0 IntroduksjonVi skal i denne øvinga se litt på multirate, her vil det i praksis si opp- og nedsampling.I <strong>del</strong> 11 er et noe stikkordspreget notat med litt fra mulitrateteorieni signalbehandlingen. Dette er det spesielt viktig å kunne i denne øvinga. Gjenoppfriskdenne teorien for opp- og nedsampling. Prøv å forstå ligningene foropp- og nedsampling i z-planet. Se gjerne på, og kjør, Matlab-fila rater.mtilgjengelig fra nettsida.I Xilinx System Generetor (SG) er nedsampling,måte, mens oppsampling,↑U , kan gjøres på to ulike måter.↓D , gjort på standard• Vanlig måte med (U − 1) nullere mellom hvert sample. Dette har inn-utrelasjoni z planet gitt ved Y (z) = X(z U ).• I stedet for nullere mellom verdiene kan en gjenta hver verdi U ganger,dette gir en trappetrinnskurve på utgangen. Dette er det samme somvanlig oppsampling (som første punkt her) etterfølgt av et boxcar-filtermed lengde U.En anven<strong>del</strong>se av multirate er i Cascaded Integrator-Comb-filter (CIC-filter),dere bør lese gjennom <strong>del</strong> 12 her, der er noe teori om CIC-filter. Det kan ogsåvære nyttig å se på noe mer teori om CIC-filteret, tilgjengelig fra nettsidaog i Wikipedia der dere kan søke på “Cascaded integrator-comb filter”. BådeWikipedia artikkelen og jeg (i <strong>del</strong> 12) prøver å forklare CIC-filter på en enkelmåte, mens dokumentet fra Xilinx og Logicore (tilgjengelig fra nettsida) giren mer fullstendig forklaring, spesielt bra med dokumentet fra Xilinx om CICfilterer de mange figurene med frekvensresponser, ellers er det nok litt vanskeligfor dere å forstå alle detaljene i dette dokumentet.Det er også med litt om filterdesign, <strong>del</strong> 13 her. I de siste oppgavene her skalen lage (finne koeffisienter) i FIR filter med ønsket frekvensrespons.3


3 Oppgaver3.1 Boxcar-filter med lengde 50Her skal vi se på et boxcar-filter med N = 50 og skalert med 1 N . Samplingsfrekvensener F s = 50 MHz.a. Lag et plott av frekvensresponsen for filteret. La x-aksen gå fra 0 tilNyquistfrekvensen, og y-aksen være i desibel.b. Lag enda et plott av frekvensresponsen for filteret. La x-aksen gå fra 0til 2 MHz, og y-aksen være lineær fra 0 til 1.3.2 Boxcar-filter etter oppsamplingGitt system som nedenfor, det er slik oppsampling kan gjøres i System Generator→ ↑U → boxcarU →a. Skal skaleringsfaktoren 1 Uvære med eller ikke i boxcar-filteret her?b. Hvorfor (ikke)?3.3 Lineær interpoleringMed å bruke et boxcar-filter som glattefilter av en trappetrinnskurve (som joer et boxcar-filter som glattefilter etter en ordinær oppsampling) får en en lineærinterpolering mellom samplene. Vis dette med en tegning i tidsdomene,der x(k) er sekvensen 3, 5, 7, 8, 7, 4, 1, 3, for k = 0, 1, . . . , 7. Bruk U = 5 ogsample opp signalet x(k) med et system som vist nedenfor. Med utgangspunkti mo<strong>del</strong>len under plotter dere både x(k) (som kryss), v(m) (som ringer), w(m)(som trekanter), og y(m) (som firkanter), bruk m langs x-aksen, og plott x(k)-verdiene med k = m/U.x(k) → ↑U → v(m) → boxcarU → w(m)w(m) → boxcarU → 1/U → y(m)4


SystemGeneratorMIK200 lab4 (lab04a)SSP = 1/2DigitalADC1 LC↓50z −1Down SampleIn1DAC1 LCFigur 1: Simulink realisasjon av en enkel nedsampling.SystemGenerator<strong>ELE610</strong> (lab03b)Med kopi av sampler !SSP = 1/2DigitalADC1 LC↓50z −1Down Sample↑50Up SamplecastConvertIn1DAC1 LCFigur 2: Simulink realisasjon av en enkel nedsampling og oppsampling.3.4 lab03aMed Simulink og System Generator skal dere implementere en nedsamplingmed D = 50. Bruk Simulink System Period SSP=1/2, det vil si samplingsfrekvens(på inngang) på 50 MHz. For eksempel som lab03a i figur 1. Dere gjørdet på deres måte.3.5 lab03bI punktet over har en ulik samplingsrate på inngang og utgang uten at detgir noen tilsynelatende problemer. Likevel er det ofte greitt å ha høy rateogså på utgangen. Endre systemet deres til lab03b slik det vises i figur 2.Bruk oppsamlingsblokka i SG med kopiering av verdiene. Vi tar også med eiconvert-blokk her, selv om det strengt tatt ikke er nødvendig. Kjør dette, virkersystemet likt som før?3.6 lab03cVi skal laste, kompilere og kjøre systemet lab03c. Her har en brukt subsystemeneSjuDelayAdd og DelayAdd.3.7 lab03dNå prøver vi med å bruke boxcar-filteret med lengde 50 som glattefilter, i tilleggtil at det brukes indirekte en gang allerede i oppsamplingsblokka. Lag og kjørsystemet lab03d som i figur 3 der subsystemet Boxcar50 er vist i figur 4.Merk at vi også må ha med skalering her for å unngå at utgangssignalet blir5


SystemGenerator<strong>ELE610</strong> (lab03d), boxcar50 som glattefilter.SSP = 1/2DigitalADC1 LC↓50z −1Down Sample↑50Med kopi av sampler !InnUtBoxcar50castConvertIn1DAC1 LCFigur 3: Simulink realisasjon av et boxcar-filter med lengde 50 som subsystem.Boxcarfilter med lengde N=50 Forsterkning av DC er 50/32Utformat er alltid Fix 18.17 (signed 2−comp. 18 bit og 17 bit etter komma)1InnFix_12_12In1In2Ut1In1In1In1Fix_18_12 Fix_18_12 Fix_18_12 Fix_18_12Ut1Ut1Ut1In2In2In2SjuDelayAdd1SjuDelayAdd2SjuDelayAdd3SjuDelayAdd4In1In1In1Fix_18_12 Fix_18_12 Fix_18_12Ut1Ut1Ut12 −5 Fix_18_17In2In2In2ScaleSjuDelayAdd5SjuDelayAdd6 SjuDelayAdd71UtFigur 4: Subsystem for et boxcar-filter med lengde 50. dette er brukt i lab03d.Subsystemet SjuDelayAdd er også brukt i lab03c.for stort. Merk også formatet på data ut av boxcar-filteret, Fix_18_17, er dettefornuftig? Test filteret og se hvorden det blir ved ulike frekvenser mellom 0 og1000 kHz.3.8 lab03eVi skal også raskt kjøre systemet over med å ha oppsampling uten å holdeutgangsverdien, det vil sette inn nullere. Deretter har vi et boxcar50-filter somglattefilter. Lag og kjør systemet lab03e som i figur 5, Forklar hvorfor vi nåikke trenger å skalere ned utgangsverdien. Hvilket av de forrige systemene hervil dette systemet fungere likt som?3.9 lab03fTil slutt skal dere lage og kjøre et system med både anti-aliasing filter ogglattefilter, systemet lab03f som i figur 6.3.10 Oppsampling etterfulgt av boxcar-filterI <strong>del</strong> 12 her er det detaljert vist hvordan et boxcar-filter etterfulgt av nedsampling(struktur a) kan implementeres som CIC-filter (struktur h). Nå skal dere6


SystemGenerator<strong>ELE610</strong> (lab03e), boxcar50 som glattefilter.SSP = 1/2DigitalADC1 LC↓50z −1Down Sample↑50Uten kopi av sampler !InnUtBoxcar50castConvertIn1DAC1 LCFigur 5: Simulink realisasjon av en enkel nedsampling etterfulgt av en oppsamplingog boxcar50 filter som glattefilter. Merk at oppsampling her ikkekopierer inn verdien men nullere mellom samplene.SSP = 1/2<strong>ELE610</strong> (lab03f), boxcar50 som anti−aliasing og glattefilter.SystemGeneratorMed kopi av sampler !DigitalADC1 LCInnUtBoxcar50AA↓50z −1↑50InnUtBoxcar50GcastConvertIn1DAC1 LCFigur 6: Simulink realisasjon av et anti-aliasing-filter, en nedsampling, en oppsamplingog boxcar50 filter som glattefilter. Merk at oppsampling skal setteinn verdien, ikke nullere.gjøre tilsvarende utledning for struktur d) og vise hvordan den kan implementeressom CIC-filter.3.11 Lange boxcar-filterFor å nyttiggjøre seg anti-aliasing-filteret som er på P160 kortet må en samplemed f s =50 MHz. I System Generator (SG) skal en da sette SSP=1/2. Har enet lydsignal inn er informasjonen i området 0-20 kHz, og en klarer seg altsåbra med en samplerate på 50 kHz, høykvalitetsmusikk (CD) er samplet medfrekvens 44.1 kHz. Følgelig kan vi her trygt nedsample inngangssignalet, hvisvi antar det er lyd, med en faktor på 1000.I figur 7 er frekvensresponsen for et boxcar-filter med lengde N=1000, skalerfilteret med 1 N for å få enhets forsterkning for DC. Samplingsraten er f s = 50MHz. I figuren viser frekvensområdet opp til 250 kHz i desibelskala.a. Lag en ny figur med frekvensresponsen for samme filter. Vis her kunfrekvensene 0-50 kHz i steg på 250 Hz og bruk lineær skala.I figur 8 er frekvensresponsen for to boxcar-filter i sekvens, hvert med lengdeN=1000 og skalert med 1 for å få enhets forsterkning for DC. SamplingsratenNer fortsatt f s = 50 MHz. I figuren viser frekvensområdet opp til 250 kHz idesibelskala.7


0Frekvensresponsen for et boxcar−filter med lengde 1000.−5−10Amplitudeforsterkning i desibel.−15−20−25−30−35−40−45−500 50 100 150 200 250Frekvens i kHz, samplingsrate er f s= 50 MHz.Figur 7: Frekvensrespons, eksempel til oppgave 11.a.0Frekvensresponsen for 2 boxcar−filter hvert med lengde 1000.−10Amplitudeforsterkning i desibel.−20−30−40−50−600 50 100 150 200 250Frekvens i kHz, samplingsrate er f s= 50 MHz.Figur 8: Frekvensrespons, eksempel til oppgave 11.b.8


0Frekvensresponsen for 3 boxcar−filter hvert med lengde 1000.−10Amplitudeforsterkning i desibel.−20−30−40−50−60−700 50 100 150 200 250Frekvens i kHz, samplingsrate er f s= 50 MHz.Figur 9: Frekvensrespons, eksempel til oppgave 11.c.b. Lag en ny figur med frekvensresponsen for samme filter. Vis her kunfrekvensene 0-50 kHz i steg på 250 Hz og bruk lineær skala.I figur 9 er frekvensresponsen for tre boxcar-filter i sekvens, hvert med lengdeN=1000 og skalert med 1 for å få enhets forsterkning for DC. SamplingsratenNer fortsatt f s = 50 MHz. I figuren viser frekvensområdet opp til 250 kHz idesibelskala.c. Lag en ny figur med frekvensresponsen for samme filter. Vis her kunfrekvensene 0-50 kHz i steg på 250 Hz og bruk lineær skala.En nedsampler resultatet etter filtrene i de tre foregående punkt med en faktorpå 1000.d. Hva blir da samlingsrate etter nedsampling?e. Hva blir Nyquist-frekvensen etter nedsampling?f. Hvilken frekvens speiles frekvensspekeret omkring?9


3.12 CIC-filter implemetasjon, lab03gEn har her et system som skissert nedenfor, N = 1000. Merk at SC boksenrepresenterer både en “skalering” og en “cast”.AD → boxcarN → ↓N → SC → DAa. Implementer systemet. Bruk den effektive CIC-filter implementasjonen,og kall systemet lab03g. Et eksempel for hvordan det kan gjøres viser ifigur 10. Dere gjør det på deres måte.b. Generer og kjør bitfil på <strong>FPGA</strong>.c. Mål amplituderesponsen og fyll ut i en tabell som i figur 12. En kan målepå skopet, eller en kan bruke LED-displayet på <strong>FPGA</strong> utviklingskortet,husk trykknapp 1 for å nullstille før hver avlesing. Uansett kan det væregreitt å normalisere slik at responsen ved 0.25 kHz settes til en. Foreksempel hvis en leser hextallene 4CCC for 0.25 kHz og 4BB3 for 4 kHzkan en i Matlab finne verdien som skal inn i ei rute i tabellen med:v = hex2dec(’4bb3’)/hex2dec(’4ccc’)d. Sammenlign med teorien, det vil si figuren dere lagtet i spørsmål 11.a.e. Se også på amplituderesponsen for noen frekvenser over 50 kHz.f. Forklar hvorfor at en ikke trenger noen oppsampler på utgangen.3.13 CIC-filter lab03hEn har her et system som skissert nedenfor, N = 1000.AD → boxcarN → boxcarN → ↓N → SC → DAa. Implementer systemet. Bruk den effektive CIC-filter implementasjonen,og kall systemet lab03h.b. Generer og kjør bitfil på <strong>FPGA</strong>.c. Mål amplituderesponsen på skopet og fyll ut i en tabell som i figur 12.d. Sammenlign med teorien, det vil si figuren dere laget i spørsmål 11.b.e. Se også på amplituderesponsen for noen frekvenser over 50 kHz.f. Se på “fryst” bilde på scopet for noen av frekvensene.10


<strong>ELE610</strong> (lab03g)PUSH1_SWOut1notIn1Out1ResetFinnMaxIn1Out1ResetV1V2Trykknapp 1 fornullstilling av FinnMaxInverterFinnMax 1V30V4SSP = 1/2ConstantLCD ControllerSystemGeneratorDigitalADC1 LC2 −10ScalecastConvertIn1DAC1 LCaa + bz −1bAddSubDelayIntegrator: 1/(1−z −1 )↓1000z −1Down Sampleaa − bbz −1AddSub 1DifferanseblokkFigur 10: lab03g for oppgave 12. Merk at for å unngå overflyt i første summeringsblokkså er formatet den skal ha på utgangen satt fast, og at det herskal være wrap når det blir overflyt. Det er også satt fast format på utgang avandre summeringsblokk. En kan på denne måten betrakte summeringsblokkasom om en convertblokk er med på utgangen.In112ResetFix_12_12BoolFinnMax, Reset sender inngang til utgang uansett,ellers sendes max av inngang og utgang til utganga a>bb z −0Boolorz −0Boolseld0 z −1Fix_12_12Out11d1Figur 11: Systemet FinnMax.Amplitude på utgangen når inngang er sinusmed passend amplitude, f.eks. 1000 mV (peak-to-peak).mo<strong>del</strong>l \ kHz 0.25 4 8 12 16 20 24 28 32 36 40lab03glab03hlab03ilab03jFigur 12: Tabell som skal fylles ut for spørsmål 12-15.11


3.14 CIC-filter lab03iEn har her et system som skissert nedenfor, N = 1000.AD → boxcarN → ↓N → SC →→ ↑N → boxcarN → SC → DAHer er første linje i figuren en desimator der et boxcar-filter utgjør anti-aliasingfilteret,etter første linje er da signalet med samplingsrate på 50 kHz og en harredusert aliasing noe. Andre linje i figuren er interpolatoren med et boxcarfiltersom glattefilter, hvis en lar oppsampleren holde utgangsverdien (noe enbør gjøre) så har en effekt av to boxcar-filter som glattefilter. Et boxcar-filtersom glattefilter gir trappetrinnkurve ut, to boxcar-filter som glattefilter girlineær interpolasjon mellom punkta ut.a. Implementer systemet. Bruk den effektive CIC-filter implementasjonen,og kall systemet lab03i.b. Generer og kjør bitfil på <strong>FPGA</strong>.c. Mål amplituderesponsen på skopet og fyll ut i en tabell som i figur 12.d. Sammenlign med teorien, det vil si figuren dere laget i spørsmål 11.a.e. Se også på amplituderesponsen for noen frekvenser over 50 kHz.f. Se på “fryst” bilde på scopet for noen av frekvensene.3.15 CIC-filter lab03jEn har her et system som skissert nedenfor, N = 1000.AD → boxcarN → boxcarN → ↓N → SC →→ ↑N → boxcarN → boxcarN → SC → DAHer er første linje i figuren en desimator der to boxcar-filter utgjør anti-aliasingfilteret,etter første linje er da signalet med samplingsrate på 50 kHz og en harredusert aliasing en god <strong>del</strong> mer enn i forrige punkt. Andre linje i figuren erinterpolatoren med to boxcar-filter som glattefilter, hvis en lar oppsamplerenholde utgangsverdien (noe en bør gjøre) så har en effekt av tre boxcar-filtersom glattefilter. Tre boxcar-filter som glattefilter gir kvadratisk interpolasjon,det vil si glattere (rundere) enn rette linjer mellom punkta ut, se effekten påskopet.12


a. Hva er samplefrekvensen etter nedsamplingen og tilhørende Nyquistfrekvens?b. Hva blir observert frekvens og amplitude på det analoge utgangssignalet,etter DA-omformeren og glattefilteret, da?La oss nå anta at vi har et sinussignal med frekvens 80 kHz og amplitude 600mV (peak-to-peak) ved inngangen.c. Hva blir observert frekvens og amplitude på det analoge utgangssignalet,etter DA-omformeren og glattefilteret, da?3.18 Enda mer FIR-filterdesignI figur 13 er frekvensresponsen for et boxcar-filter med lengde N=500, skalerfilteret med 1 N for å få enhets forsterkning for DC. Samplingsraten er f s = 50MHz. I figuren viser frekvensområdet opp til 250 kHz i desibelskala.a. Lag en ny figur med frekvensresponsen for samme filter. Vis her kunfrekvensene 0-100 kHz i steg på 250 Hz og bruk lineær skala.I figur 14 er frekvensresponsen for to boxcar-filter i sekvens, hvert med lengdeN=500 og skalert med 1 for å få enhets forsterkning for DC. SamplingsratenNer fortsatt f s = 50 MHz. I figuren viser frekvensområdet opp til 250 kHz idesibelskala.b. Lag en ny figur med frekvensresponsen for samme filter. Vis her kunfrekvensene 0-100 kHz i steg på 250 Hz og bruk lineær skala.I figur 15 er frekvensresponsen for tre boxcar-filter i sekvens, hvert med lengdeN=500 og skalert med 1 for å få enhets forsterkning for DC. SamplingsratenNer fortsatt f s = 50 MHz. I figuren viser frekvensområdet opp til 250 kHz idesibelskala.c. Lag en ny figur med frekvensresponsen for samme filter. Vis her kunfrekvensene 0-100 kHz i steg på 250 Hz og bruk lineær skala.14


0Frekvensresponsen for et boxcar−filter med lengde 500.−5−10Amplitudeforsterkning i desibel.−15−20−25−30−35−40−45−500 50 100 150 200 250Frekvens i kHz, samplingsrate er f s= 50 MHz.Figur 13: Frekvensrespons, eksempel til oppgave 18a.0Frekvensresponsen for 2 boxcar−filter hvert med lengde 500.−10Amplitudeforsterkning i desibel.−20−30−40−50−600 50 100 150 200 250Frekvens i kHz, samplingsrate er f s= 50 MHz.Figur 14: Frekvensrespons, eksempel til oppgave 18b.15


0Frekvensresponsen for 3 boxcar−filter hvert med lengde 500.−10Amplitudeforsterkning i desibel.−20−30−40−50−60−700 50 100 150 200 250Frekvens i kHz, samplingsrate er f s= 50 MHz.Figur 15: Frekvensrespons, eksempel til oppgave 18c.3.19 CIC-filter blokka, lab03kCIC-filter brukes en god <strong>del</strong> i implementering av digital signalbehandling systemder en har behov stor nedsampling eller oppsampling av signalet, på grunnav sin effektive implementering. I SG er det derfor med en egen blokk for CICfilter,i Xilinx Reference Blockset DSP. Merk at som desimator har oppsamplereni interpolatoren ikke med holdeelement. Dere skal nå bruke CIC-filterblokkene fra SG og implementere systemet lab03i i oppgave 15 slik at det virkereksakt likt som implementasjonen der. Kall det nye systemet for lab03k.Sjekk med å måle frekvensresponsen for noen utvalgte frekveser, og sammenlignform på utsignalet når innsignalet er firkantpulser med noen velvalgtefrekvenser.3.20 CIC-filter med kompensasjon, lab03lVi har nå sett mye på effekten av CIC-filter. For god anti-aliasing og glattingbør en gjerne ha tre gjentakelser av filteret, ulempen er at en da får dempingav mange frekvenser som en gjerne ville hatt gjennom uten demping, hvisen tenker seg lyd her er det spesielt frekvenser fra 5-20 kHz der en får enuønsket demping. Vi skal her se på en struktur som har god anti-aliasing, ogflat respons i passbandet. Det er ofte hesiktsmessig å ikke ta all nedsamplingmed boxcar-filteret, så vi bruker CIC-filter med N = 500.16


Etter CIC-filteret har en da f s = 100 kHz og f N = 50 kHz. Der setter vi inn etFIR-filter som forsterker litt i området 5-20 kHz, og demper godt i området 20-50 kHz. Siden dette filteret har f N = 50 kHz vil responsen bli speila om 50 kHzog en får også god demping fra 50-80 kHz, mens 80-95 kHz blir forsterka igjen,men det gjør ikke så mye siden boxcar-filtrene demper godt her. Strukturenfor systemet er da som detteAD → 3-CIC-↓500 → SC → FIR → ↓2 → SC →→ ↑2 → FIR → SC → 3-CIC-↑500 → SC → DAØverste linje her er da anti-aliasing filter og nedsampling. Mellom disse tolijene kan en tenke seg signalbehandling på lav rate. Siste linje er oppsamplingog glatting.Boksen 3-CIC-↓500 er da det samme somboxcar500 → boxcar500 → boxcar500 → ↓500og tilsvarende betyr boksen3-CIC-↑500↑500 → boxcar500 → boxcar500 → boxcar500Vi lar FIR-filteret ha lengde 50 og være symmetrisk, begge FIR-filter er like.Filterkoeffisientene velges slik vi fant de i oppgave 16. Systemet lab03l erlaget. Generer og kjør bitfil på <strong>FPGA</strong>. Mål amplituderesponsen på skopet ogsjekk at det blir som forventet. Subsystemene Ned1000 og Opp1000 brukt iøving 2, lab02h er laget som dette.17


11 MultirateteoriHer er det kort og stikkordspreget om nedsampling, oppsampling og bruk imultirate filtrering. Mer detaljert og fullstendig informasjon om disse emnerkan dere finne i deres favorittbok i signalbehandling.11.1 NedsamplingNedsampling eller desimering med en heltallsfaktor D er ganske enkelt. Enbeholder hvert D-te sample og kaster de D − 1 samplene mellom hvert av deen beholder, samtidig settes klokkeraten ned. Siden en her “kaster” samplerrisikerer en alltid å miste informasjon. Nedsampling skrives ↓D i flytdiagrammer.På grunn av samplingsteoremet må en kun ha frekvenskomponenter i signaletlavere enn Nyquist-frekvensen (på laveste rate) for å unngå speiling. Sett aten har et system somx(k) → ↓5 → y(m)og samplefrekvensen for x(k) er 100 Hz, da er Nyquistfrekvensen for x(k) 50Hz og signalet x(k) kan inneholde (representere) frekvenser opp til denne frekvensen(50 Hz). På høyre side har en samplefrekvensen for y(m) er 20 Hz, daer Nyquistfrekvensen for y(m) 10 Hz og signalet y(m) kan inneholde (representere)frekvenser opp til denne frekvensen (10 Hz). Sett at x(k) inneholderen frekvenskomponent på 12 Hz, denne vil da bli speila i y(m) omkring 10 Hzog bli en frekvenskomponent på 8 Hz i y(m), også 28 Hz, 32 Hz og 48 Hz ix(k) vil bli 8 Hz i y(m). I z-planet vil en haY (z) = 1 D−1∑X(e −j2πk/D z 1/D ) (1)Dk=0Denne adderingen av ulike frekvenskomponenter er (som regel) ikke ønskeligog en må derfor forsikre seg om at x(k) ikke inneholder frekvenskomponenterover 10 Hz, dette gjøres med et lavpassfilterx(k) → LP → ↓5 → y(m)Lavpassfilteret LP er da ideelt sett et meget flatt og bratt filter med knekkfrekvenspå 1/D (normalisert, det vil si knekkfrekvens lik f N /D, f N er selvsagt18


x(k) → ↑5 → H B (z) → y(m)Oppsampling kan illustres med eksempel i Matlab, der Matlab-fila rater.mer et lite eksempel. Figurene som lages vises her i figur 16-23.11.3 MultiratefiltreringHovedgrunnen til at en bruker ulike rater i et system er at en da kan implementereløsninger på en mer effektiv måte. Hvis et signal et begrenset tilfrekvensområdet 0-20 kHz har det ingen hensikt å sample dette med for eksempelen samplingsrate på 50 MHz. Men sett at en har en situasjon der enhar et signal der de interessante <strong>del</strong>ene av signalet er i området 0-20 kHz,men at signalet kan inneholde også høyere frekvenskomponenter (støy). Hvisen ikke har et fysisk anti-aliasing-filter med riktig knekkfrekvens, men et somhar en mye høyere knekkfrekvens (for eksempel 20 MHz) har en et problem.En kan da en sample med høy rate, for eksempel 50 Mhz, og så ta et (digitalt)lavpassfilter med knekkfrekvens 1/1000, og så nedsample til samplingrate på50 kHz. Videre behandling kan da gjøres med 50 kHz samplingrate, og en kangjøre mye i sekvens mellom to sampler. En utfordring her vil være å effektivtimplementere et digitalt lavpassfilter (som må gå på høy rate) med enknekkfrekvens på 1/1000.Generell rateomforming med en faktor U kan gjøres med en oppsampler, etDlavpassfilter og en nedsampler. Ofte har en U = 1 og kan da unngå oppsampleren.x(k) → ↑U → H LP (z) → ↓D → y(m)Legg merke til at lavpassfiltrering skjer på høy rate. Derfor har en bruk foreffektiv implementering av lavpassfilter. Det vil vi se mer på i laben.20


1.5200 sampler av signal med frekvens f1=8 Hz.10.50−0.5−1−1.50 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2tid i sekund, f1s=100 Hz.Figur 16: Signalet x, en sinus med frekvens på 8 Hz og litt Gaussisk støy.0Effektspeter for x estimer med pwelch.−5−10−15Power/frequency (dB/Hz)−20−25−30−35−40−45−500 5 10 15 20 25 30 35 40 45 50Frekvens i Hz (samplerate er 100 Hz)Figur 17: Effektspekteret av signalet x.21


1.5De 100 første sampler av v, signalfrekvens f1=8 Hz.10.50−0.5−1−1.50 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2Tid i sekund, f2s=500 Hz.Figur 18: Signalet v, det er x oppsamplet med en faktor på 5.−20Effektspeter for v estimer med pwelch.−25−30Power/frequency (dB/Hz)−35−40−45−50−55−600 0.05 0.1 0.15 0.2 0.25Frekvens i kHz (samplerate er 500 Hz)Figur 19: Effektspekteret av signalet v.22


1.5De 100 første sampler av y=filter(ones(U,1),1,v)10.50−0.5−1−1.50 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2tid i sekund, f2s=500 Hz.Figur 20: Signalet y, det er v filtrert med et boxcar-filter med lengde 5.0Effektspeter for y estimer med pwelch.−10−20Power/frequency (dB/Hz)−30−40−50−60−70−800 0.05 0.1 0.15 0.2 0.25Frekvens i kHz (samplerate er 500 Hz)Figur 21: Effektspekteret av signalet y.23


20Frekvensrespons for boxcar−filter med lengde 5100−10−20−30−40−500 50 100 150 200 250Frekvens i Hz ved samplerate 500 HzFigur 22: Frekvensrespons for boxcar-filter med lengde 5.1Frekvenskomponenter for sinus i v.0.500 50 100 150 200 2506Forsterkning for boxcar−filteret.4200 50 100 150 200 2506Frekvenskomponenter for sinus i filtrert signal y.4200 50 100 150 200 250Frekvens i Hz (samplerate er 500 Hz).Figur 23: Frekvenskomponenter for sinuskomponenten i signalene v og y her.24


12 Litt teori om CIC-filterEt Cascaded Integrator-Comb (CIC) filter er en effektiv implementering av et,eller flere i sekvens, boxcar-filter og en oppsamler eller nedsampler. Boxcarfilterer på høy-rate siden av oppsampler eller nedsampler. Altså implemeteresfølgende strukturera) → boxcarN → ↓N →b) → boxcarN → boxcarN → ↓N →c) → boxcarN → · · · → boxcarN → ↓N →d) → ↑N → boxcarN →e) → ↑N → boxcarN → boxcarN →f) → ↑N → boxcarN → · · · → boxcarN →Fra øving 4 husker dere gjerne at struktur d, ↑N → boxcarN , kan implementeressvært enkelt med Xilinx si oppsamplerblokk.La oss se litt mer på boxcar-filteret, her uten skalering. Transferfunksjonen erH(z) = (1 + z −1 + z −2 + · · · + z −(N−1) ) =N−1∑k=0z −k . (5)Vi skal nå trekke forsinkelsefaktoren z −(N−1) ut fra H(z). Da får en et polynomi z, i stedet for z −1 . For<strong>del</strong>en med polynom i z −1 er at de kan greittimplementeres ved å gjøre de om til differanselingninger (til tidsdomentet), etforsinkelsesledd kan implemeteres enkelt fysisk mens et “neste sample”-leddikke kan implementeres (i sanntid). For<strong>del</strong>en med polynom i z er at disse ergreiere å regne på, for eksempel faktorisere. Vi fårN−1∑H(z) = z −(N−1) (z N−1 + z N−2 + · · · + z + 1) = z −(N−1)k=0z k . (6)Vi ser videre på summen fra ligning 6 og multipliserer denne med (z − 1)N−1∑(z − 1)k=0z k = zN−1∑k=0z k −N−1∑k=0z k =N∑z k −k=1N−1∑k=0z k = z N − 1. (7)25


Altså får vi formelen for sum av ei en<strong>del</strong>ig geometrisk rekke 1N−1∑k=0z k = zN − 1z − 1 . (8)Når vi setter resultatet fra ligning 8 inn i ligning 6 får viH(z) = z −(N−1) zN − 1z − 1 = z − z−(N−1)z − 1= 1 − z−N. (9)1 − z−1 En liten digresjon, nå kan vi enkelt faktorisere H(z) i ligning 5 og 6. Fraalgebraen om polynomer har vi at ploynomet (z N − 1) har røtter jevnt for<strong>del</strong>tpå enhetssirkelen. Dere kan lett kontrollere at dette er riktig, selv om jeg ikketar noe formelt bevis her men bare skriver resultatet.N−1∏z N − 1 = (z − wN), k der w N = e j2π/N . (10)k=0Ved å sette dette inn i ligning 9, og husker at (z − wN 0 ) = (z − 1), får viN−1H(z) = z −(N−1) 1 ∏N−1∏(z − w kz − 1N) = z −(N−1) (z − wN) k (11)k=0k=1N−1∏H(z) = (1 − wNz k −1 ) (12)k=1Med dette er digresjonen slutt og vi forstsetter i retning mot CIC-filteret.Siden filteret i ligning 5 og 6 alternativt kan skrives som i ligning 9 så kanboxcar-filteret implementeres som→ boxcarN → ⇔ → 11−z −1 → 1 − z −N →Det er altså en integrator etterfulgt av et filter som tar nåværende sampleog trekker fra samplet for N tidsteg siden. En rett fram implementering avboxcar-filteret, som vi gjorde i øving 2 og øving 4 krever (N − 1) forsinkelserog like mange addisjoner. Implementeringen på høyre side over trenger kun 2addisjonsblokker men en forsinkelse mer, altså N forsinkelser. Det er likeveltilsynelatende et problem, resultatet av integratoren kan vokse til uen<strong>del</strong>ig og gioverflyt samme hvor mange bit en bruker. Imidlertid er det slik at når resultatetut fra integratoren brukes for å ta differansen mellom to sampler med en gittavstand seg imellom så kan en med en 2-er komplement representasjon av1 Vi kunne selvsagt brukt denne formelen direkte. Utledning her er enkel og gjelder foralle z unntatt z = 1.26


tallene likevel ha et begrenset antall bit og få riktige resultater for differansenselv om en har overflyt etter integratoren. Se gjerne på oppgave 2 i lab. 1.Antall bit en trenger er ⌈log 2 N + B⌉, der B er antall bit inn.Et resultat som vi trenger videre er polyfaseidentitene, de kalles ofte de nobleidentitetene. Disse gjelder for et hvilket som helst filter H(z), ikke bare forboxcar-filter.P1: → H(z) → ↑N → ⇔ → ↑N → H(z N ) →P2: → ↓N → H(z) → ⇔ → H(z N ) → ↓N →La oss nå se på implementering av struktur a). Denne implementeringen kallesCascaded Integrator-Comb (CIC) Filter eller Hogenauer filter.a) → boxcarN → ↓N →som blir lik g) → 11−z −1 → 1 − z −N → ↓N →og videre h) → 11−z −1 → ↓N → 1 − z −1 →I g) er boxcar-filteret implementert ut fra ligning 9 . Her ser vi at filteretH 1 (z) = 1 − z −N kan skrives som H 2 (z N ) der H 2 (z) = 1 − z −1 . Med å brukepolyfaseidentiteten P2 kan vi da gå fra g) til h). Strukturen i a) kan altsåimplementeres som strukturen i h). Denne strukturen kalles CIC-filter og implementeresmed en forsinkelse og en addisjon (integrator), en nedsampler også en forsinkelse og en addisjon (differansen), totalt kun to forsinkelser og toaddisjoner i tillegg til nedsampleren. Legg også merke til at kompleksiteten ikkeøker selv om N øker, unntatt at en kanskje trenger flere bit for å representereresultatet.En variant kan en oppnå ved å nedsample med D = N/2 i stedet for N, detteforutsetter at lengden av boxcar-filteret N er et partall. Da får enNår N = 2D er a) → boxcarN → ↓D →ekvivalent med i) → 11−z −1 → ↓D → 1 − z −2 →27


Generelt har vi atNår N = MD er a) → boxcarN → ↓D →ekvivalent med j) → 11−z −1 → ↓D → 1 − z −M →Videre kan vi se på strukturen i b) og får da på samme måteb) → boxcarN → boxcarN → ↓N →(som kan skrives →boxcarN) 2→ ↓N →j) →11−z −1 → 1 − z −N →11−z −1 → 1 − z −N → ↓N →k) →11−z −1 →11−z −1 → ↓N → 1 − z −1 → 1 − z −1 →(k) →) 2 (11−z → ↓N → −11 − z −1 ) 2→En kan merke seg at rekkefølgen for filter i kaskade (etter hverandre) ikke betyrnoe for det en<strong>del</strong>ige resultatet. Men merk at en ikke kan flytte noen filter overpå andre siden av en oppsampler eller nedsampler, hvis en skal gjøre det nåen bruke polyfaseidentitetene P1 og P2. På tilsvarende måte som over kanalle strukturene a) til f) på side 1 implementeres, og en kan også om en vilnedsample (eller oppsample) med D = N/2 og få tilsvarende implementering.Antall bit en trenger for representasjon av mellomliggende tall vil øke når engjentar boxcar-filteret flere ganger, har en filteret totalt K ganger og B erantall bit inn trenger en B max bit, der 2B max = ⌈K log 2 N + B⌉. (13)2 Ut fra ligning 7 i dokumentet fra Xilinx om CIC-filter står det et bit mindre, men utfra erfaring ser det ut som formelen i ligning 13 er riktig.28


13 Litt teori om filterdesignNår en nå underviser digital signalbehandling legger en ikke så mye vekt påfilterdesign eller implementering som for en <strong>del</strong> år siden (for eksempel i 1985).Nå har en mange gode verktøy og funksjoner tilgjengelig, for eksempel “FilterDesign Toolbox” i Matlab, og stort sett er det viktigere å beherske disseverktøyene enn å forstå all teorien bak filterdesign. Merk likevel at for å forståog bruke disse verktøyene er det en stor for<strong>del</strong> om man er stødig i teorien.Vi har ikke anledning til å gå så mye inn på verken filterdesignteorien ellerMatlab-verktøyene her, men vil skrape litt på overflata. Det som er med herer ikke ment som et sammendrag av de viktigste <strong>del</strong>ene for teori eller verktøy.Jeg tar her kun med noen få punkt som kan være nyttig for å få et innblikki noen av problemstillingene knyttet til design og implementering av digitalefilter som så skal realiseres på en <strong>FPGA</strong> brikke.Mange lærebøker og programdokumentasjon har mer utfyllende stoff om filterdesign.1. Matlab-dokumentasjonen for “Filter Design Toolbox” og for FDAtool.Selv om jeg ikke bruker FDAtool så mye i øvingene her er dette et megetgodt verktøy for design av digitale filter. En kan også få med kvantiseringav koeffisienter her.2. Proakis og Manolakis, Prentice Hall 1996, har mye i kapittel 7 og 8.3. Mitra, Mc Graw Hill 2001, har mye i kapittel 6 til 9.4. Det er også en <strong>del</strong> i (de fleste) andre bøker om grunnleggende signalbehandling,se i deres favorittbøker om emne.13.1 GenereltNår en skal lage et filter er det viktig å vite hvilke ønsker en har og krav ensetter til filteret og hvordan en angir dem. En har ofte gitt en ønsket frekvensresponsfor frekvenser, ω, mellom 0 og π, π tilsvarer Nyquist-frekvensenf N , den ønska frekvensresponsen er gjerne gitt som H d (ω). Den virkelige frekvensresponsenfor et filter gitt med transferfunksjonen H(z) får en som kjentmed å beregne denne for punkt på enhetssirkelen, altså H(ω) = H(e jω ), ogdermed er er oppgaven ved filterdesign ofte å finne H(z) = B(z)/A(z) slik atH(ω) ≈ H d (ω). For et FIR-filter har en A(z) = 1 i tillegg. Følgende begreperer viktige:• Passbånd er frekvensområde der en ønsker at signalet skal gå gjennommest mulig uforandret, altså med forsterkning 1, |H(ω)| ≈ 1 ipassbåndet.29


• Passbånd ripple er hvor mye avvik en kan akseptere i passbåndet, enkaller denne gjerne δ p og angir den gjerne i desibel. |H(ω)| = 1 ± δ p ipassbåndet.• Stoppbånd er frekvensområde der en ønsker at signalet skal bli mestmulig dempet, altså med forsterkning 0, |H(ω)| ≈ 0 i stoppbåndet.• Stoppbånd ripple er hvor lite demping en kan akseptere i stoppbåndet,en kaller denne gjerne δ s og angir den gjerne i desibel. |H(ω)| ≤ δ s istoppbåndet.• Transisjonsbånd er frekvenser der en ikke har spesielle krav til forsterkningeller dempning, typisk område mellom passbånd og stoppbånd.• Spesielle bånd er frekvenser der en ønsker en gitt spesiell forsterkning(ulik 1 og 0).• Fase krav En kan også ha fase-krav til et digitalt filter, typisk at det skalha lineær fase eller tilnærmet lineær fase i passbåndet. En kan også hafase-justerende filter som forsterker alle frekvenser likt, det vil si allpassfilter.• Kausalitet er at filterutgangen skal kunne beregnes kun med foregåendeverdier (inngang eller utgang) og nåværende inngang. Kausalitet er ikkeviktig for filtrering av bilder eller filtrering “offline”.Alle krava over går på egenskaper ved filtere. I tillegg kan en ha krav forimplementasjonen• Krav til at filteret skal kjøre på en bestemt hardware.• Krav om at filteret, eller filterbanken, skal være av en bestemt struktur ellerlengde, for eksempel symmetrisk FIR med 20 koeffisienter, halvbåndfilter,eller at et stabilt inverst system, filterbank, skal finnes.• Krav til hvor raskt det skal kunne kjøre, hvor høy samplerate som skalhåndteres.• Krav til at filteret skal være robust med hensyn på avrunding (kvantifisering)av koeffisienter. En må være klar over at en i praksis alltid vil haavrunding av koeffisienter og at for store polynom kan en liten endring(avrunding) av koeffisienter føre til mye større endring i røttene. Likeveler ofte 12-16 bit oppløsning tilstrekkelig for filterkoeffisientene, og medenkle (korte) polynomer kan en gjerne klare seg med 8-12 bit oppløsning.• Krav til at filteret skal være robust med hensyn på avrunding (kvantifisering)av signalverdier.30


• Krav om at filteret skal være adaptivt.• Krav om behandling av flere kanaler samtidig.Design av FIR-filter er gjerne noe enklere enn design av IIR-filter.13.2 Plassering av nullpunkt og poler.I denne <strong>del</strong>en tar vi først for oss enkel design av filter ved plassering av nullpunktog poler. De plasseres parvis (som komplekskonjungerte par) i det komplekseplanet. Nullpunkt plasseres nær enhetssirkelen for de frekvenser en ønskerå dempe, til nærmere enhetssirkelen til mer demping, og på enhetssirkelenhvis en ønsker å stoppe aktuell frekvens totalt. Frekvenser langt fra nullpunktvil forsterkes. Poler må alltid plasseres innenfor enhetssirkelen, eller i spesielletilfeller på enhetssirkelen, for eksempel i en integrator er det en pol i 1. Hvisen pol og et nullpunkt er nær hverandre vil de i stor grad oppveie hverandrefor frekvenser som er omtrent like langt borte fra begge to.Plassering av nullpunkt og poler er stort sett ikke så mye brukt fordi en ofteikke er fleksibel nok, og det blir vanskelig å forutsi responsen når det er mangenullpunkt og poler. Det er to unntak:• Notch-filter som vi skal se mer på i neste øving.• Spesielt enkle (og raske) filter, med enkle koeffisienter som er små heltallslik at de gjerne kan implementeres uten multiplikasjoner. Dette så vi påi øving 3 der vi laget et særlig enkelt lavpassfilter:H(z) = 1256 z−9 (z 2 + 1)(2z 2 + z + 2)(z 2 + z + 1)(2z 2 + 3z + 2)(z + 1) (14)Som en kunne få noe flatere i passbåndet med et ekstra par nullpunkt:H 1 (z) = H(z)(−2z 2 + 5z − 2) (15)13.3 Vindusmetoden.Har en filterkoeffisientene h(n) kan en finne z-transferfunksjonen medH(z) = ∑ nh(n)z −n (16)En kan finne frekvensresponsen H(ω) ved å beregne transferfunksjonen påenhetssirkelen, altså sette z = e jω , der 0 ≤ ω < 2π. Dette blir det samme somå ta Fourier-transformen av h(n)H(ω) = ∑ nh(n)e −jωn (17)31


Som skrevet i <strong>del</strong> 13.1 har en gjerne gitt en ønsket frekvensrespons, H d (ω). Nåkan en bruke den inverse Fourier-transformen for å finne de ønskede filterkoeffisienteneh d (n),h d (n) = 1 ∫ πH d (ω)e jωn dω (18)2π −πDette vil generelt gi en uen<strong>del</strong>ig lang impulsrespons h d (n), der −∞ < n < ∞.For å få et implementerbart filter må en kutte denne ønska impulsresponsenslik at en får ønska lengde. En setter dah(n) = w(n)h d (n) (19)der w(n) er en vindusfunksjon som har N verdier ulik null. Noen aktuelle vindukan være rektangulært (boxcar), triangulært (Bartlett), Blackman, Hanning,Hamming, Tukey, Kaiser eller Lanczos, se gjerne deres favorittbok (om signalbehandling).Vanligvis har en at både h d (n) og w(n) er symmetriske, og dermedat h(n) også er symmetrisk, siden en da sentrerer vinduet om symmetripunkteti h d (n). Filter lages på denne måten med fir1 og fir2 kommandoene iMatlab.13.4 OptimeringsmetodenFor et FIR-filter med lengde N har en N frie variabler, eller ⌈N/2⌉ hvis enforlanger at filterkoeffisientene skal være symmetriske. En kan da formulereet otimeringspromlem som: Finn de (reelle) filterkoeffisientene slik at følgendeuttrykk minimeres.∫ π−πw(ω)f(H(w) − H d (ω))dω (20)I stedet for integral kan en alternativt ha max. Funksjonen w(ω) er en vektfunksjonsom sier hvilke områder som er viktigst, for eksempel kan denne være0 for frekvenser som ikke betyr noe. Funksjonen f(·) er typisk på form f(| · | p )der p er 1 eller 2. En bruker da optimeringsteknikker for å finne de bestefilterkoeffisientene. Dette er gjort i Matlab-funksjoner som firls og firpm.13.5 EksempelLa oss ta et eksempel i Matlab som viser hvordan firpm kan brukes, dette erslik en kommer fram til kompensasjons-FIR-filter i oppgave 1. Det er her mye32


uk av Matlab og dere bør se på dokumentasjonen, hjelpeteksten, for deulike kommandoer som brukes og som dere ikke kjenner i fra før. Ikke prioriterå forstå alt som er i Matlab-fila cic fig.m, men de kommadoene som er her.Kanskje kan dere lage kompensasjons-FIR-filteret selv uten å bruke cic fig.m.Her skal vi se på hvordan en tenker for å komme fram til FIR-filterert sombrukes i oppgave 5 i denne øvinga.Vi starter med følgende system der N = 500, dette er som systemet representertmed boksen 3-CIC-↓500 .a) → boxcarN → boxcarN → boxcarN → ↓N →En har en kaskade av 3 boxcar-filter, alle med lengde 500, og de går med samplingsfrekvenspå 50 MHz. De er etterfulgt av en nedsampler med faktor 500altså til samplingsfrekvens på 100 kHz. Dette filteret kan effektivt implementeressom et CIC-filter, slik vi skal gjøre det i denne øvinga. Dette CIC-filteretdemper frekvenser over 80 kHz ganske bra, se figur 15. La oss anta at detegentlig kun er frekvensene lavere enn ca. 18-25 kHz som er viktige, eventuelthøyere frekvenser antas å være støy, det kan da være et lydsignal på inngangen.Dermed kan vi godt nedsample videre med en faktor på 2 slik at vi enderopp med en samplingsfrekvens på 50 kHz. Før vi nedsampler siste gang må vita et lavpassfilter som stopper det meste av frekvenser over 25 kHz, dette ernødvendig for å unngå speiling i den siste nedsamplinga. Lavpassfilteret somvi skal lage opererer altså på en samplefrekvens på 100 kHz, og har dermeden Nyquist-frekvensen på 50 kHz. Samtidig ønsker vi å gjøre det totale filteretflatere i passbåndet, FIR-filteret vi lager skal altså kompensere for dempingaCIC-filteret gir i området opp mot 18 kHz.I figur 15 viser frekvensresponsen etter CIC-filteret, her riktig nok i desibel, velså informativ er gjerne frekvensresponsen i lineær skala. Vi ser at frekvenserover ca 10 kHz begynner å bli en <strong>del</strong> dempet, slik at om vi kan få FIR-filteretvårt til å forsterke disse frekvensene noe er det gunstig. Vi ønsker så flatrespons som mulig opp til 18 kHz. Vi ønsker altså H d (ω) = 1/H 3−CIC (ω) for0 ≤ ω ≤ 18 kHz, og H d (ω) = 0 for 25 ≤ ω ≤ 50 kHz, på grunn av speiling om50 kHz vil da også frekvenser i området 50-75 kHz bli godt dempet.Vi lar h 1 (k) være filterkoeffisientene for et boxcar-filter med lengde 500, tilhørendefrekvensrespons kaller vi da H 1 (ω). Frekvensresponsen for en kaskade av treslike filter er H 3 (ω) = H 3 1(ω). Samplingsfrekvensen 50 MHz. Følgende Matlab-kommandoerfinner frekvensresponsen for CIC-filteret for noen utvalgtefrekvenser.N = 500;fs = 5e7; % 50 MHz (for SSP=1/2)h1=ones(1,N)/N; % et enkelt skalert boxcar-filter33


w=0:100:50000; % noen utvalgte frekvenser i Hz[H1,w]=freqz(h1,1,w,fs); % frekvensresponsen for et filterH3 = H1.^3; % og for tre filter i kaskadeVi skal bruke firpm for å lage filteret vårt og vi trenger da å angi ønsketfilterrespons, denne angis med F og A, som er en vektor med frekvenser, startog endepunkt for linjestykker, og en vektor med ønsket forsterkning i aktuellfrekvens. Samtidig angir vi vekter w, og lengde på filteret tapsb. Til slutt finnesfilterkoeffisientene med firpm og vi multipliserer disse med en faktor for så åavrunde til heltall.F=[0:17; (1:18)-0.01]; F=F(:)’; % noen frekvenser, her i kHz[H1,w]=freqz(h1,1,F*1000,fs); % frekvensresponsenH3 = H1.^3; % og for tre filter i kaskadeA=[ones(1,length(H3))./abs(H3), 0, 0, 0, 0]; % ønska forsterkning% ved disse normaliserte frekvenser (1 f_N = f_s/2)F=[F, 25, 35, 35.1, 50]/50; % her normaliserte frekvenserw = ones(1,length(F)/2); % vektingw(end-1)=0.5;w(end)=0.2; % mindre vekt på stoppbandtapsb=50; % lengde på filteretb=firpm(tapsb-1, F, A, w);forsterkningDC = 1.1; % kan ha litt forsterkning ogsåb=floor(b*forsterkningDC*2048+0.5); % avrunder koeffisienteneFilteret er nå designet og vi kan lage og plotte resulterenede frekvensresponeser.Koden under gir resultatet i lineær skala, plottet er i figur 24. Tilsvarende plotti desibel er i figur 25.w=0:200:100000; % nye frekvenser igjen i Hz[H1,w]=freqz(h1,1,w,fs); % frekvensresponsenH3 = H1.^3; % og for tre filter i kaskade[B,w] = freqz(b/sum(b), 1, w, fs/500); % b er på lavere ratefigure(2);hold on;% plotter ikke ønsket respons for FIR filteret her% plot(reshape(F*50,2,length(F)/2),reshape(A,2,length(A)/2),’b-’);plot(w/1e3,abs(H3),’b-’); % blå for CIC-filteretplot(w/1e3,abs(B),’k-’); % sort for FIR-filteretplot(w/1e3,abs(B.*H3),’r-’); % og rødt for beggegrid on;xlabel(’Frekvens i kHz’);ylabel(’Amplitudeforsterkning, lineær skala.’);title(’Frekv.res. CIC (blå), FIR (sort) og begge (rød).’);print(’-f2’,’-depsc2’,’lab07_f7’);34


1.4Frekvensrespons for CIC (blå), FIR (sort) og begge filter (rød).1.2Amplitudeforsterkning, lineær skala.10.80.60.40.200 10 20 30 40 50 60 70 80 90 100Frekvens i kHzFigur 24: Frekvensrespons, eksempel i <strong>del</strong> 13.510Frekvensrespons for CIC (blå), FIR (sort) og begge filter (rød).0−10Amplitudeforsterkning i desibel.−20−30−40−50−60−70−800 10 20 30 40 50 60 70 80 90 100Frekvens i kHzFigur 25: Frekvensrespons, eksempel i <strong>del</strong> 13.535

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

Saved successfully!

Ooh no, something went wrong!