Glidande medelvärde filter fas fördröjningen
FIR Filter Basics 1.1 Vad är quotFIR filtersquot FIR-filter är en av två primära typer av digitala filter som används i Digital Signal Processing (DSP) applikationer, den andra typen är IIR. 1.2 Vad betyder quotFIRquot mean quotFIRquot quotFinite Impulse Responsequot. Om du sätter in en impuls, det vill säga ett enda kvotprov följt av många quot0quotprover kommer nollor att komma ut efter att kvototprovet har gått igenom filterets fördröjningslinje. 1.3 Varför är impulssvaret quotfinitequot I det gemensamma fallet är impulsresponsen begränsad eftersom det inte finns någon feedback i FIR. En brist på feedback garanterar att impulsresponsen blir begränsad. Därför är uttrycket quotfinit-impulsresponsequot nästan synonymt med kvot-feedbackquot. Om återkoppling används är emellertid impulssvaret ändligt, filtret är fortfarande en FIR. Ett exempel är det rörliga genomsnittsfiltret, där det Nth föregående provet subtraheras (matas tillbaka) varje gång ett nytt prov kommer in. Detta filter har ett ändligt impulsrespons även om det använder feedback: efter N-prov av en impuls, kommer alltid att vara noll. 1.4 Hur uttalar jag quotFIRquot Vissa säger att bokstäverna F-I-R andra människor uttalar sig som om det var en typ av träd. Vi föredrar trädet. (Skillnaden är om du pratar om ett F-I-R-filter eller ett FIR-filter.) 1.5 Vad är alternativet till FIR-filter DSP-filter kan också vara quotInfinite Impulse Responsequot (IIR). (Se dspGurus IIR FAQ.) IIR-filter använder feedback, så när du matar in en impuls ringer utgången teoretiskt på obestämd tid. 1.6 Hur jämför FIR-filter med IIR-filter Var och en har fördelar och nackdelar. Sammantaget överväger fördelarna med FIR-filter dock nackdelarna, så de används mycket mer än IIR. 1.6.1 Vilka är fördelarna med FIR-filter (jämfört med IIR-filter) Jämfört med IIR-filter, erbjuder FIR-filter följande fördelar: De kan enkelt utformas för att vara kvadratisk fasquot (och vanligtvis är). Enkelt sagt, linjära fasfilter fördröjer ingångssignalen, men donrsquot snedvrider sin fas. De är enkla att genomföra. På de flesta DSP-mikroprocessorer kan FIR-beräkningen göras genom att slinga en enda instruktion. De är lämpade för flervärdiga applikationer. Med flera räntesatser menar vi antingen quotdecimationquot (reducering av samplingsfrekvensen), quotinterpolationquot (ökning av samplingsfrekvensen) eller båda. Oavsett om decimering eller interpolering gör det, använder användningen av FIR-filter några av beräkningarna att utelämnas, vilket ger en viktig beräkningseffektivitet. Däremot, om IIR-filter används, måste varje utmatning beräknas individuellt, även om den utsignalen kommer att kasseras (så återkopplingen kommer att införlivas i filtret). De har önskvärda numeriska egenskaper. I praktiken måste alla DSP-filter implementeras med hjälp av finit-precision aritmetik, det vill säga ett begränsat antal bitar. Användningen av slutgiltig aritmetik i IIR-filter kan orsaka signifikanta problem på grund av användningen av återkoppling, men FIR-filter utan återkoppling kan vanligtvis implementeras med färre bitar och konstruktören har färre praktiska problem att lösa i samband med icke-idealisk aritmetik. De kan implementeras med fraktionell aritmetik. Till skillnad från IIR-filter är det alltid möjligt att implementera ett FIR-filter med hjälp av koefficienter med en storlek mindre än 1,0. (Den totala förstärkningen av FIR-filtret kan justeras vid dess utgång, om så önskas.) Detta är ett viktigt övervägande vid användning av fastpunkts-DSP, eftersom det gör implementeringen mycket enklare. 1.6.2 Vad är nackdelarna med FIR-filter (jämfört med IIR-filter) Jämfört med IIR-filter har FIR-filter ibland nackdelen att de behöver mer minne och eller beräkning för att uppnå en viss filterresponskarakteristik. Också vissa svar är inte praktiska att implementera med FIR-filter. 1.7 Vilka termer används för att beskriva FIR-filter? Impulsrespons - Quimpulsresponsequot av ett FIR-filter är egentligen bara uppsättningen FIR-koefficienter. (Om du lägger ett kvotplott i ett FIR-filter som består av ett quot1quot-prov följt av många quot0quot-prov, kommer filtrets utdata att vara uppsättningen koefficienter, eftersom det 1 provet rör sig förbi varje koefficient i sin tur för att bilda utgången.) Knacka - En FIR quottapquot är helt enkelt ett koefficientdelay-par. Antalet FIR-kranar (ofta betecknat som quotNquot) är en indikation på 1) mängden minne som krävs för att implementera filtret, 2) antalet beräkningar som krävs och 3) mängden kvoteringskvot som filtret kan åstadkomma, fler kranar betyder mer stoppbanddämpning, mindre krusning, smalare filter etc. Multiplicera-ackumulera (MAC) - I ett FIR-sammanhang är en quotMACquot funktionen att multiplicera en koefficient med motsvarande fördröjda dataprov och ackumulera resultatet. FIR kräver vanligen en MAC per kran. De flesta DSP-mikroprocessorer implementerar MAC-operationen i en enda instruktionscykel. Övergångsband - frekvensbandet mellan passband och stoppbandskanter. Ju smalare övergångsbandet desto större kranar krävs för att implementera filtret. (Ett quotsmallquot-övergångsband resulterar i ett kvartsarpotfilter.) Delay Line - Den uppsättning minneselement som implementerar kvZ-1quot-fördröjningselementen i FIR-beräkningen. Cirkulär buffert - En speciell buffert som är quotcircularquot eftersom inkrementering i slutet gör att den slingras runt till början, eller eftersom minskning från början gör att den slingrar sig runt till slutet. Cirkulära buffertar tillhandahålls ofta av DSP-mikroprocessorer för att implementera kvotens kvotenhet för proverna via FIR-fördröjningslinjen utan att behöva bokstavligen flytta data i minnet. När ett nytt prov läggs till i bufferten, ersätter det automatiskt den äldsta one. Recursive Moving Average Filter bull citationstecken (0) 0 bull 2 160160160160 Det rörliga genomsnittliga filtret är ett FIR-filter med längd N med alla kranar lika med (1N ) .160 Det är känt för elak frekvensavskiljning, men utmärkt tidsvar - i det avseendet är det Bessels a Bessel filter.160 Du kan implementera det med SigmaStudios FIR-blocket som beskrivet här: Ju längre filter desto mer utjämning - - men standard FIR-filteralgoritmen använder många instruktioner för stora filter eftersom det måste multiplicera koefficienter för varje krets.160 Detta är ett slöseri när alla koefficienterna är lika.160 Som kapitel 15 i Steven W. Smiths bok pekar ut , kan du göra ett glidande medelfilter med en rekursiv teknik som har en kran före och efter en (N-1) storleksfördröjning.160 Ett sådant filter visas nedan som en del av en testkrets med signalkälla och ett Bessel-filter för jämförelse: 160160160160 Koefficienter är pulle d ut till det enskilda förstärkningsblocket vid ingången.160 Det aktuella provet lägger till utsignalen när det går in i fördröjningen, subtraherar det fördröjda provet från utgången när det går ut.160 Adderaren med återkopplingen ackumulerar dessa tillägg och subtraktioner för att bilda output - det gör något som är trivialt i C men är annars en smärta i GUI.160. Även om en rekursiv teknik används, är filtret ett äkta FIR-filter - längden av dess impulsrespons ställs endast in genom din fördröjning. 160160160160 Min testinmatning är en kvadratvåg med extra ljud.160 Filtrerade resultat visas som det övre spåret i båda bilderna - Första glidande medelfiltret: Bessel-filtret: 160160160160 Det glidande medelfiltret ger mer ljud genom, men det bevarar bättre kvadratiska vågformar - det går inte runt hörnen och upp och ner sluttningarna är symmetriska (dess linjära fas). 160 Lyssna på de två vågformerna med hörlurar visar ett liknande resultat - mer brus med det glidande medelfiltret, men det karakteristiska ljudet av en kvadratvåg kommer igenom. Dokumentation Beskrivning gd, w grpdelay (b, a) returnerar gruppfördröjningsresponsen, gd. av det diskreta tidsfiltret som anges av ingångsvektorerna, b och a. Ingångsvektorerna är koefficienterna för täljaren, b. och nämnare, a. polynomier i z -1. Z-transformen av det diskreta tidsfiltret är H (z) B (z) A (z) x2211 lO N x2212 1 b (n 1) z x2212 l x2211 l 0 M x2212 1 a (1 1) z x2212 l. Filtergruppsfördröjningsresponsen utvärderas vid 512 lika åtskilda punkter i intervallet 0, 960) på enhetscirkeln. Utvärderingspunkterna på enhetscirkeln returneras i w. gd, w grpdelay (b, a, n) returnerar gruppfördröjningsreaktionen av diskret-tidsfiltret utvärderat vid n lika åtskilda punkter på enhetscirkeln i intervallet 0, 960). n är ett positivt heltal. För bästa resultat, sätt n till ett värde som är större än filterordningen. gd, w grpdelay (sos, n) returnerar gruppfördröjningsreaktionen för den andra ordningens sektionsmatris, sos. sos är en K-by-6 matris, där antalet sektioner, K. måste vara större än eller lika med 2. Om antalet sektioner är mindre än 2, anser grpdelay att ingången är täljarevektorn, b. Varje rad av sos motsvarar koefficienterna för ett andra ordning (biquad) filter. Den första rad av sosmatrisen motsvarar bi (1) bi (2) bi (3) ai (1) ai (2) ai (3). gd, w grpdelay (d, n) returnerar gruppfördröjningsresponsen för det digitala filtret, d. Använd designfilt för att generera d baserat på frekvensresponsspecifikationer. gd, f grpdelay (.n, fs) specificerar en positiv samplingsfrekvens fs i hertz. Den returnerar en längd-vektor, f. innehållande frekvenspunkterna i hertz vid vilken gruppfördröjningsreaktionen utvärderas. f innehåller n poäng mellan 0 och fs2. gd, w grpdelay (.n, hel) och gd, f grpdelay (.n, hel, fs) använd n poäng runt hela enhetens cirkel (från 0 till 2 960 eller från 0 till fs). gd grpdelay (.w) och gd grpdelay (.f, fs) returnerar gruppfördröjningsreaktionen utvärderad vid vinkelfrekvenserna i w (i radianprov) eller i f (i cykel-enhetstid), där fs är samplingsfrekvensen. w och f är vektorer med minst två element. grpdelay (.) utan utgångsargument avbildar gruppfördröjningsresponsen mot frekvens. grpdelay fungerar för både reella och komplexa filter. Obs! Om ingången till grpdelay är enkel precision, beräknas gruppfördröjningen med enkelräkningsräkning. Utgången, gd. är enkel precision. Välj ditt CountryFIR-filter FAQ Finite Impulse Response (FIR) - filter är ett av de viktigaste ämnena i Digital Signal Processing. Här svarar dspGuru Vanliga frågor om FIR-filtrering. FIR Filter Basics 1.1 Vad är quotFIR filtersquot FIR-filter är en av två primära typer av digitala filter som används i Digital Signal Processing (DSP) applikationer, den andra typen är IIR. 1.2 Vad betyder quotFIRquot mean quotFIRquot quotFinite Impulse Responsequot. Om du sätter in en impuls, det vill säga ett enda kvotprov följt av många quot0quotprover kommer nollor att komma ut efter att kvototprovet har gått igenom filterets fördröjningslinje. 1.3 Varför är impulssvaret quotfinitequot I det gemensamma fallet är impulsresponsen begränsad eftersom det inte finns någon feedback i FIR. En brist på feedback garanterar att impulsresponsen blir begränsad. Därför är uttrycket quotfinit-impulsresponsequot nästan synonymt med kvot-feedbackquot. Om återkoppling används är emellertid impulssvaret ändligt, filtret är fortfarande en FIR. Ett exempel är det rörliga genomsnittsfiltret, där det Nth föregående provet subtraheras (matas tillbaka) varje gång ett nytt prov kommer in. Detta filter har ett ändligt impulsrespons även om det använder feedback: efter N-prov av en impuls, kommer alltid att vara noll. 1.4 Hur uttalar jag quotFIRquot Vissa säger att bokstäverna F-I-R andra människor uttalar sig som om det var en typ av träd. Vi föredrar trädet. (Skillnaden är om du pratar om ett F-I-R-filter eller ett FIR-filter.) 1.5 Vad är alternativet till FIR-filter DSP-filter kan också vara quotInfinite Impulse Responsequot (IIR). (Se dspGurus IIR FAQ.) IIR-filter använder feedback, så när du matar in en impuls ringer utgången teoretiskt på obestämd tid. 1.6 Hur jämför FIR-filter med IIR-filter Var och en har fördelar och nackdelar. Sammantaget överväger fördelarna med FIR-filter dock nackdelarna, så de används mycket mer än IIR. 1.6.1 Vilka är fördelarna med FIR-filter (jämfört med IIR-filter) Jämfört med IIR-filter, erbjuder FIR-filter följande fördelar: De kan enkelt utformas för att vara kvadratisk fasquot (och vanligtvis är). Enkelt sagt, linjära fasfilter fördröjer ingångssignalen, men donrsquot snedvrider sin fas. De är enkla att genomföra. På de flesta DSP-mikroprocessorer kan FIR-beräkningen göras genom att slinga en enda instruktion. De är lämpade för flervärdiga applikationer. Med flera räntesatser menar vi antingen quotdecimationquot (reducering av samplingsfrekvensen), quotinterpolationquot (ökning av samplingsfrekvensen) eller båda. Oavsett om decimering eller interpolering gör det, använder användningen av FIR-filter några av beräkningarna att utelämnas, vilket ger en viktig beräkningseffektivitet. Däremot, om IIR-filter används, måste varje utmatning beräknas individuellt, även om den utsignalen kommer att kasseras (så återkopplingen kommer att införlivas i filtret). De har önskvärda numeriska egenskaper. I praktiken måste alla DSP-filter implementeras med hjälp av finit-precision aritmetik, det vill säga ett begränsat antal bitar. Användningen av slutgiltig aritmetik i IIR-filter kan orsaka signifikanta problem på grund av användningen av återkoppling, men FIR-filter utan återkoppling kan vanligtvis implementeras med färre bitar och konstruktören har färre praktiska problem att lösa i samband med icke-idealisk aritmetik. De kan implementeras med fraktionell aritmetik. Till skillnad från IIR-filter är det alltid möjligt att implementera ett FIR-filter med hjälp av koefficienter med en storlek mindre än 1,0. (Den totala förstärkningen av FIR-filtret kan justeras vid dess utgång, om så önskas.) Detta är ett viktigt övervägande vid användning av fastpunkts-DSP, eftersom det gör implementeringen mycket enklare. 1.6.2 Vad är nackdelarna med FIR-filter (jämfört med IIR-filter) Jämfört med IIR-filter har FIR-filter ibland nackdelen att de behöver mer minne och eller beräkning för att uppnå en viss filterresponskarakteristik. Också vissa svar är inte praktiska att implementera med FIR-filter. 1.7 Vilka termer används för att beskriva FIR-filter? Impulsrespons - Quimpulsresponsequot av ett FIR-filter är egentligen bara uppsättningen FIR-koefficienter. (Om du lägger ett kvotplott i ett FIR-filter som består av ett quot1quot-prov följt av många quot0quot-prov, kommer filtrets utdata att vara uppsättningen koefficienter, eftersom det 1 provet rör sig förbi varje koefficient i sin tur för att bilda utgången.) Knacka - En FIR quottapquot är helt enkelt ett koefficientdelay-par. Antalet FIR-kranar (ofta betecknat som quotNquot) är en indikation på 1) mängden minne som krävs för att implementera filtret, 2) antalet beräkningar som krävs och 3) mängden kvoteringskvot som filtret kan åstadkomma, fler kranar betyder mer stoppbanddämpning, mindre krusning, smalare filter etc. Multiplicera-ackumulera (MAC) - I ett FIR-sammanhang är en quotMACquot funktionen att multiplicera en koefficient med motsvarande fördröjda dataprov och ackumulera resultatet. FIR kräver vanligen en MAC per kran. De flesta DSP-mikroprocessorer implementerar MAC-operationen i en enda instruktionscykel. Övergångsband - frekvensbandet mellan passband och stoppbandskanter. Ju smalare övergångsbandet desto större kranar krävs för att implementera filtret. (Ett quotsmallquot-övergångsband resulterar i ett kvartsarpotfilter.) Delay Line - Den uppsättning minneselement som implementerar kvZ-1quot-fördröjningselementen i FIR-beräkningen. Cirkulär buffert - En speciell buffert som är quotcircularquot eftersom inkrementering i slutet gör att den slingras runt till början, eller eftersom minskning från början gör att den slingrar sig runt till slutet. Cirkulära buffertar tillhandahålls ofta av DSP-mikroprocessorer för att implementera kvotens kvotenhet för proverna via FIR-fördröjningslinjen utan att behöva bokstavligen flytta data i minnet. När ett nytt prov läggs till i bufferten, ersätter det automatiskt den äldsta. FIR-filteregenskaper 2.1 Linjär fas 2.1.1 Vad är kopplingen mellan FIR-filter och kvadratlinjefasquot De flesta FIR är linjärfasfilter när ett linjärtfasfilter önskas, används vanligtvis FIR. 2.1.2 Vad är en linjärfasfilterkvot? Linjärfasquot hänvisar till det tillstånd där filtrets fassvar är en linjär (rak) funktion av frekvensen (exklusive fasomslag vid - 180 grader). Detta medför att förseningen genom filtret är densamma vid alla frekvenser. Därför orsakar filtret inte kvotförvrängning eller kvotförvrängningskvot. Bristen på fasvisningsförvrängning kan vara en kritisk fördel med FIR-filter över IIR och analoga filter i vissa system, exempelvis i digitala datamodem. 2.1.3 Vilket villkor för linjära fas FIR-filter är vanligtvis utformade för att vara linjärfas (men de behöver inte vara). Ett FIR-filter är linjärfas om (och endast om) dess koefficienter är symmetriska runt mittkoefficienten , det vill säga den första koefficienten är densamma som den sista, den andra är densamma som den näst sista, etc. (Ett linjärt fas-FIR-filter med ett udda antal koefficienter kommer att ha en enda koefficient i mitten som har ingen kompis.) 2.1.4 Vad är fördröjningen av en linjär fas FIR Formeln är enkel: med ett FIR-filter som har N-kranar, är fördröjningen: (N - 1) (2 Fs), där Fs är samplingsfrekvens. Således har exempelvis ett 21-krets linjärt fas-FIR-filter som arbetar med en 1 kHz-hastighet fördröjning: (21 - 1) (2 1 kHz) 10 millisekunder. 2.1.4 Vad är alternativet till linjär fas Icke-linjär fas, givetvis. -) Egentligen är det mest populära alternativet kvadratminimumsfaktorn. Minimumfasfilter (som bättre skulle kunna kallas kvadratiska delayquotfilter) har mindre fördröjning än linjärfasfilter med samma amplitudsvar, till kostnaden för en icke-linjär faskarakteristik, a. k. kvasförvrängningsquot. Ett lowpass-FIR-filter har sin största magnitudkoefficienter i mitten av impulssvaret. I jämförelse är de största magnitudkoefficienterna för ett minimifasfilter närmare början. (Se dspGurus-handledning Hur man utformar FIR-filter med minimala faser för mer information.) 2.2 Frekvensrespons 2.2.1 Vad är Z-transformen av ett FIR-filter För ett N-tap FIR-filter med koefficienterna h (k), vars produktion beskrivs av: y (n) h (0) x (n) h (1) x (n-1) h (2) x (n-2). h (N-1) x (n-N-1), filtren Z transformen är: H (z) h (0) z-0h (1) z-1 h (2) z-2. h (N-1) z - (N-1). eller 2.2.2 Vad är frekvensreaktionsformeln för ett FIR-filter Variabeln z i H (z) är en kontinuerlig komplex variabel, och vi kan beskriva den som: zrmiddote j w. där r är en magnitud och w är z-vinkeln. Om vi släpper r1 blir H (z) runt enhetens cirkel filtrets frekvenssvar H (j w). Det betyder att utbyte av ejw för z i H (z) ger oss ett uttryck för filterfrekvenssvaret H (w), vilket är: H (jw) h (0) e-j0 wh (1) e - j1 wh (2) ) e-j2 w. h (N-1) e-j (N-1) w. eller använder Eulers identitet, e - ja cos (a) - jsin (a) kan vi skriva H (w) i rektangulär form som: H (jw) h (0) cos (0 w) - jsin (0 w) h (1) cos (1 w) - jsin (1 w). h (N-1) cos ((N-1) w) - jsin ((N-1) w). eller 2.2.3 Kan jag beräkna frekvensresponsen hos ett FIR med Discrete Fourier Transform (DFT) Ja. För en N-tap FIR kan du få N jämnt fördelade punkter i frekvenssvaret genom att göra en DFT på filterkoefficienterna. För att få filterets frekvenssvar vid vilken som helst godtycklig frekvens (det vill säga vid frekvenser mellan DFT-utgångarna) måste du använda formeln ovan. 2.2.4 Vad är DC-förstärkningen av ett FIR-filter Tänk på en DC (noll Hz) ingångssignal som består av prover som vardera har värde 1.0. Efter att FIR: s fördröjningslinje hade fyllts med 1,0 proverna skulle utmatningen vara summan av koefficienterna. Därför är förstärkningen av ett FIR-filter vid DC bara summan av koefficienterna. Detta intuitiva resultat kan kontrolleras mot ovanstående formel. Om vi ställer w till noll är cosinus termen alltid 1 och sinus termen är alltid noll, så frekvenssvaret blir: 2.2.5 Hur skala jag förstärkningen av ett FIR-filter Enkelt multiplicera alla koefficienter med skalfaktorn. 2.3 Numeriska egenskaper 2.3.1 Är FIR-filter iboende stabila Ja. Eftersom de inte har några feedbackelement, resulterar någon begränsad ingång i en begränsad utgång. 2.3.2 Vad gör de numeriska egenskaperna hos FIR filters quotgoodquot Återigen är nyckeln bristen på feedback. De numeriska fel som uppstår vid implementering av FIR-filter i datorräkningen uppträder separat med varje beräkning, men FIR noterar inte sina tidigare numeriska fel. Däremot kan återkopplingsaspekten av IIR-filter orsaka numeriska fel att förena med varje beräkning, eftersom numeriska fel matas tillbaka. Den praktiska inverkan av detta är att FIRs generellt kan implementeras med färre bitar av precision än IIR. FIRs kan till exempel vanligtvis implementeras med 16 bitar, men IIR kräver i allmänhet 32 bitar eller ännu mer. 2.4 Varför föredras FIR-filter i allmänhet över IIR-filter i multirate-system (decimering och interpolering) Eftersom endast en bråkdel av de beräkningar som skulle krävas för att implementera ett decimerande eller interpolerande FIR på ett bokstavligt sätt måste faktiskt göras. Eftersom FIR-filter inte använder återkoppling måste endast de utdata som faktiskt används användas. Därför behöver de andra N-1-utgångarna inte beräknas när det gäller decimering av FIR (där endast 1 av N-utgångar kommer att användas). På samma sätt för att interpolera filter (i vilka nollor sätts in mellan ingångsproverna för att höja samplingsfrekvensen) behöver du inte faktiskt multiplicera de införda nollorna med deras motsvarande FIR-koefficienter och summera resultatet som du helt och hållet släpper bort de multiplikationstillägg som är associerade med nollorna (eftersom de ändå inte ändrar resultatet ändå.) I motsats till att eftersom IIR-filter använder feedback måste varje ingång användas, och varje ingång måste beräknas eftersom alla ingångar och utgångar bidrar till återkopplingen i filtret. 2.5 Vilka speciella typer av FIR-filter finns det Bortsett från quotregularquot och quotextra crispyquot finns det: Boxcar - Boxcar FIR-filter är helt enkelt filter där varje koefficient är 1,0. Därför är utgången bara för summan av de tidigare N-proverna för en N-tap-boxvagn. Eftersom Boxcar FIRs kan implementeras med endast adders, är de av intresse främst i hårdvaruimplementeringar, där multiplikatorer är dyra att implementera. Hilbert Transformer - Hilbert Transformers byter fasens fas vid 90 grader. De används främst för att skapa den imaginära delen av en komplex signal, med tanke på den verkliga delen. Differentiator - Differentiatorer har ett amplitudsvar som är en linjär funktion av frekvens. De är inte så populära idag, men används ibland för FM-demodulatorer. Lth-Band - Även kallade quotNyquistquot-filter, är dessa filter en speciell klass av filter som används främst i multirate-applikationer. Deras nyckelförsäljningspunkt är att en av varje L-koefficienter är noll - ett faktum som kan utnyttjas för att minska antalet multiplikat-ackumulerade operationer som krävs för att implementera filtret. (Det kända quothalf-bandquot-filtret är faktiskt ett LTH-bandfilter med L2.) Raised-Cosine - Det här är ett speciellt slags filter som ibland används för digitala dataprogram. (Frekvensresponsen i passbandet är en cosinusform som har kvoterats med en konstant.) Se dspGurus Raised-Cosine FAQ för mer information. Massor av andra. FIR-filterdesign 3.1 Vilka metoder används för att utforma FIR-filter De tre mest populära designmetoderna är (i ordning): Parks-McClellan: Parks-McClellan-metoden (felaktigt kallad quotRemezquot av Matlab) är förmodligen den mest använda FIR-filterdesignmetoden . Det är en iterationsalgoritm som accepterar filterspecifikationer när det gäller passband och stopbandsfrekvenser, passband-rippel och stoppbanddämpning. Det faktum att du direkt kan ange alla viktiga filterparametrar är det som gör den här metoden så populär. PM-metoden kan designa inte bara FIR-kvoter, utan även FIR-quotdifferentiatorsquot och FIR quotHilbert transformersquot. Windowing:. I fönsterfönstret erhålles ett initialt impulsrespons genom att man tar den inverterade diskreta Fourier-transformen (IDFT) av det önskade frekvenssvaret. Därefter raffineras impulsreaktionen genom att applicera ett datafönster till det. Direkt beräkning: Impulssvaren hos vissa typer av FIR-filter (t ex Raised Cosine och Windowed Sinc) kan beräknas direkt från formlerna. 3.2 Hur designar jag faktiskt FIR-filter Med ett FIR-filter designprogram, förstås. -) Även om det är möjligt att utforma FIR-filter med manuell metod, är det mycket enklare att bara använda ett FIR-filterdesignprogram. 3.3 Vilka FIR-filterdesignprogram finns tillgängliga FIR-filterdesignprogrammen finns i tre stora kategorier: Filterdesignprogram: Se dspGuru39s digitala filterdesignprogram för att se en lista över filterdesignprogram. Nära och kära till oss här på dspGuru är Iowegian39s egen ScopeFIR-produkt. Vi tror att ScopeFIR erbjuder en utmärkt kombination av professionella funktioner, smidigt användargränssnitt och överkomligt pris. Vi säljer det för bara 599, med en provperiod på 30 dagar. Även om du redan använder Matlab, kan ScopeFIR39s quotpoint och shootquot kapacitet förbättra din FIR-filterdesign produktivitet. Matematiska program: Matlab och dess fria kloner erbjuder inbyggda FIR-filterdesignfunktioner. Källkod: En av de bästa platserna på nätet för att hitta källkod för att designa FIR-filter är Charles Poynton39s filterdesign-programssida. FIR-filterimplementering 4.1 Vad är grundalgoritmen för implementering av FIR-filter Strukturellt består FIR-filter av bara två saker: en provfördröjningslinje och en uppsättning koefficienter. För att implementera filtret: Sätt in insamlingsprovet i fördröjningslinjen. Multiplicera varje prov i fördröjningslinjen med motsvarande koefficient och ackumulera resultatet. Ändra fördröjningslinjen med ett prov för att skapa plats för nästa ingångsprov. 4.2 Hur implementerar jag FIR-filter i C Det finns många möjligheter, inklusive några knep. För att illustrera har vi tillhandahållit en uppsättning FIR-filteralgoritmer implementerade i C som heter FirAlgs. c i ScopeFIRs distributionsfil. FirAlgs. c innehåller följande funktioner: firbasic. Illustrerar den grundläggande FIR-beräkningen som beskrivs ovan genom att implementera den mycket bokstavligt. cirkulär Illustrerar hur cirkulära buffertar används för att implementera FIRs. firshuffle. Illustrerar shuffle down-tekniken som används av några Texas Instruments-processorer. firsplit. Splitterar FIR-beräkningen i två plana (icke-cirkulära) bitar för att undvika användning av cirkulär buffertlogik och blandning. firdoublez. Använder en fördröjningslinje med dubbla storlekar så att FIR-beräkningen kan göras med en platt buffert. firdoubleh. På samma sätt som firdoublez använder den en dubbelt stor koefficient så att FIR-beräkningen kan göras med en platt buffert. 4.3 Hur implementerar jag FIR-filter i montering FIR-monteringsalgoritmer är ganska processorspecifika, men det vanligaste systemet använder en cirkulär buffertmekanism som tillhandahålls av DSP-processorn. De grundläggande stegen är: Konfigurera den cirkulära buffertbelastningen koefficienten och fördröjningslinjerna. Sedan, för varje ingångssamtal: Spara inkommande data i fördröjningslinjen öka fördröjningslinjepekaren. Rensa multiplikator-ackumulatorn. Loop över alla koefficientsdelays ackumulerar de värden som erhållits genom att multiplicera koefficienterna med de fördröjda proverna. Runda eller avkorta resultatet som FIR-utgången. Alternativt används en shuffle-down-metod i Texas Instruments äldre fastpunktsprocessorer för att implementera cirkulära buffertar. Processorn flyttar bokstavligen varje provfördröjningsvärde med en slits under varje multiplikat-ackumuleras (via MACD-instruktionen). Varje DSP-mikroprocessortillverkare tillhandahåller exempel FIR-monteringskod i sina databöcker eller dess användarhandböcker, så se till dem innan du återuppfinner den cirkulära bufferten. 4.4 Hur testar jag mitt FIR-genomförande Här är några metoder: Impulstest: Ett mycket enkelt och effektivt test är att ge en impuls till det (vilket bara är ett 1 prov följt av att N-1 nollar inte finns). Du kan också sätta i ett impulståg, med de 1 proverna åtskilda åtminstone N proverna isär. Om alla koefficienterna i filtret kommer ut i rätt ordning finns det en bra chans att ditt filter fungerar korrekt. (Du kanske vill testa med icke-linjära faskoefficienter så att du kan se vilken ordning de kommer ut.) Vi rekommenderar att du gör detta test när du skriver en ny FIR-filterrutin. Stegtest: Ange N eller mer 1 prov. Utgången efter N-prover bör vara summan (DC-förstärkning) för FIR-filtret. Sine Test: Ange en sinusvåg vid en eller flera frekvenser och se om utgångssynan har den förväntade amplituden. Slagit FM-test: Från Eric Jacobsen: Mitt favoritprov efter ett impulståg är att ta två identiska instanser av filtret som testas, använd dem som I och Q-filter och sätt ett komplext FM-linjärt svep genom dem från DC till Fs2. Du kan göra en FFT på resultatet och se filterets fullständiga frekvenssvar, se till att fasen är fin och kontinuerlig överallt och matcha svaret på vad du förväntar dig från koefficientuppsättningen, precisionen etc. 4.5 Vilka knep är Användbar för att implementera FIR-filter FIR-trickcenter på två saker 1) Beräkna inte saker som inte behöver beräknas, och 2) Faking cirkulära buffertar i programvara. 4.5.1 Hur hoppar jag över onödiga beräkningar För det första, om ditt filter har nollvärderade koefficienter, behöver du inte faktiskt beräkna de kranar du kan lämna dem ut. Ett vanligt fall av detta är halvband filter, som har egenskapen att varannan koefficient är noll. För det andra, om ditt filter är symmetriskt (linjär fas), kan du lägga till de prover som multipliceras med samma koefficientvärde, innan multipliceringen görs. Eftersom denna teknik huvudsakligen handlar om ett tillägg för en multiplicering, är det inte riktigt användbart i DSP-mikroprocessorer som kan göra en multiplicering i en enda instruktionscykel. Det är dock användbart i ASIC-implementeringar (där tillägget vanligtvis är mycket billigare än multiplikation), erbjuder vissa nyare DSP-processorer nu specialutrustning och instruktioner för att utnyttja detta trick. 4.5.2 Hur förfalskar jag cirkulära buffertar i programvara När hårdvaruunderstöd för cirkulära buffertar inte finns, måste du förfalska dem. Eftersom ANSI C inte har någon konstruktion för att beskriva cirkulära buffertar, kan de flesta C-kompilatorer inte generera kod för att använda dem, även om målprocessorn har dem. Du kan alltid implementera en cirkulär buffert genom att duplicera logiken för en cirkulär buffert i mjukvaran (och många har), men överhead kan vara orimligt, den cirkulära-falska kan ta flera instruktioner att genomföra, jämfört med bara en enda instruktion för att multiplicera - accumulera operationen Därför måste du förfalska det. Här är flera grundläggande tekniker för falska cirkulära buffertar: Dela beräkningen: Du kan dela upp någon FIR-beräkning i dess pre-wrap och post-wrap delar. Genom att dela upp beräkningen i dessa två delar kan du i huvudsak göra den cirkulära logiken endast en gång, snarare än en gång per kran. (Se firdoublez i FirAlgs. c ovan.) Kopiera fördröjningslinjen: För en FIR med N-kranar, använd en fördröjningslinje med storlek 2N. Kopiera varje prov till rätt plats, samt på plats plus N. Därför kan FIR-beräkningarna MAC-loop utföras på en platt buffert med N-punkter, som börjar var som helst inom den första uppsättningen N-punkter. Den andra uppsättningen N-fördröjda prover ger omslaget jämförbart med en sann cirkulär buffert. (Se firdoublez i FirAlgs. c ovan.) Duplicera koefficienterna: Detta liknar ovanstående, förutom att dupliceringen sker med avseende på koefficienterna, inte fördröjningslinjen. Jämfört med föregående metod har detta en beräkningsfördel om att man inte behöver lagra varje inkommande prov två gånger och det har också en minnesfördel när samma koefficientinställning kommer att användas på flera fördröjningslinjer. (Se firdoubleh i FirAlgs. c ovan.) Använd blockbearbetning: I blockbearbetning använder du en fördröjningslinje som är en multipel av antalet kranar. Du behöver därför bara flytta data en gång per block för att implementera fördröjningslinjemekanismen. När blockstorleken blir stor blir överhuvudet av en som rör fördröjningslinjen en gång per block försumbar.
Comments
Post a Comment