Jeg trodde at DSP ville bli gjort ved å bruke FFT av deler av et signal, modifiser prøvene som kommer fra FFT (siden de representerer spekteret av signalet vårt + støy) og fjern eventuelle uønskede signaler og enn gjør en invers FFT for å få en tidsdomene representasjon av det filtrerte signalet (støy er fjernet nå) . Dette er imidlertid ikke gjort, i stedet gjør vi alt arbeidet i tidsdomene ved hjelp av vindusfunksjoner. Hvorfor?
Hvis vi multipliserer vindusfunksjon i tidsdomene enn vi konvolverer vinduefunksjonens frekvensrespons med spektrum av signalet vårt i frekvensdomene, hvordan ordner det seg? Jeg mener hvis vi bare gjorde alt arbeidet i frekvensdomene ved å multiplisere signalet vårt med frekvensresponsen til filteret, det ville være som å filtrere, men her gjør vi alle tingene i tidsdomene i stedet for å bruke vindu.
-> La oss se hvor min forvirring kommer fra. For analoge filtre, for eksempel lavpassfilter, har vi denne puls som frekvensresponsen. Når vi filtrerer et signal, multipliserer vi effektivt signalets spektrum med filterets pulslignende frekvensrespons. Dette vil redusere alle frekvenser i signalet vårt over en cut-off til 0. Slik fungerer et lavpasfilter i hovedsak. Hvorfor ikke gjøre det samme med digitale filtre også?
Kommentarer
- Mulig duplikat Hvorfor er er det en dårlig idé å filtrere ved å nullstille FFT-søppel?
Svar
Windowing reduserer spektral lekkasje.
Si at du begynner med $ \ sin (y) = \ cos (\ omega_0 t) $. Perioden er åpenbart $ 2 \ pi / \ omega_0 $.
Men hvis ingen fortalte deg at perioden er $ 2 \ pi / \ omega $ og du blindt velger området $ [0, 1,8 \ pi / \ omega_0] $ og tar FFT av denne avkortede bølgeformen, du vil observere frekvenskomponenter i andre frekvenser som alle er falske fordi hoppene som er opprettet ved å kopiere og lime inn den avkortede bølgeformen for periodisitet, ikke er til stede i det originale signalet – det er en gjenstand for en uheldig avkorting som ikke fanger overgangen mellom periodene . Ideelt sett er det bare en spektral komponent på $ \ omega = \ omega_0 $.
Hensikten med vindusvindu i tidsdomene er å redusere alle disse fiktive spektrale komponentene.
Svar
Windowing brukes fordi DFT-beregningene opererer på den uendelige periodiske utvidelsen av inngangssignalet. Siden mange faktiske signaler enten ikke er periodiske i det hele tatt, eller samples over et intervall som er forskjellig fra deres faktiske periode, kan dette produsere falske frekvenskomponenter ved den kunstige «kanten» mellom gjentatte intervaller, kalt lekkasje . Ved å først multiplisere tidsdomenesignalet med en vindusfunksjon som går til null i begge ender, skaper du en jevn overgang mellom gjentatte intervaller i den uendelige periodiske forlengelsen, og reduserer dermed opprettelsen av disse kunstige frekvenskomponentene når vi deretter tar DFT.
Dette papiret gir en mer grundig titt på dette fenomenet, samt litt innsikt i effekten av forskjellige vindusfunksjoner.
Svar
Jeg tror du forveksler to forskjellige operasjoner.
Windowing i tidsdomenet forklares med @ sam, så jeg vil ikke gjenta det. Men windowsing er ikke gjort for å utføre filtrering. Filtrering ved å multiplisere FFT av et signal med filterfrekvensresponsen er helt rimelig i mange situasjoner, og er faktisk gjort. Alternativet for filtrering er tid -domene-konvolusjon (som er forskjellig fra vindusvindu). Dette har sine egne fordeler, for eksempel å operere på et signal i «sanntid e «som det måles uten å vente på at hele saken skal lagres og deretter transformeres.
Så på spørsmålet ditt» Hvorfor ikke gjøre det samme med digitale filtre også? «, er svaret ganske enkelt» vi gjør , når det passer. «
Kommentarer
- Jeg har også inntrykk av at konvolusjon og vindu ble blandet opp i spørsmålet. Bra du påpekte det!
Svar
Det har vært flere gode svar på dette spørsmålet. Imidlertid føler jeg at ett viktig poeng ikke er gjort helt klart. En del av spørsmålet var hvorfor vi ikke bare multipliserer FFT av et signal med ønsket filterrespons. F.eks. Hvis vi vil lowpass-filtrere signalet vårt, kan vi ganske enkelt nullstille alle frekvenskomponenter høyere enn ønsket avskjæringsfrekvens Dette er faktisk en enkel anvendelse av den velkjente frekvenssamplingsmetoden for å designe FIR-filtre. Problemet er at vi bare kan nullstille de diskrete frekvenskomponentene beregnet av FFT. Vi har ingen kontroll over hva som skjer mellom disse diskrete frekvensene .Det viser seg at en så enkel versjon av filtrering bare vil gi en dårlig stoppbånddemping (uavhengig av FFT-lengde). Hvis du har tilgang til matlab eller oktav, er det veldig lærerikt å prøve det selv:
x=2*rand(1024,1)-1; X=fft(x); Y=X.*[ones(200,1);zeros(625,1);ones(199,1)]; % lowpass filter y=real(ifft(Y)); % real() just to remove numerical errors Y=fft(y,4096); plot(20*log10(abs(Y(1:2048)))),axis([0,2048,-30,50])
Svar
Hvis du ikke bruker et ikke-rektangulært vindu, vil FFT-resultatene allerede være involvert i transformasjonen av et standard rektangulært vindu (et periodisk sink) før du utfører frekvensdomene-filtrering. f.eks. du vil få brukt to filtre, det ene du sannsynligvis ikke vil ha.
Ved å åpne i tidsdomenet, før FFT og frekvensdomene-filtrering, erstatter du eventuell filtrering (såkalt «lekkasje» ) utført ved rektangulær vindusvindu, og dermed ikke får en ekstra uønsket filterkonvolusjon.
Den andre måten å gjøre dette på er å bruke overlappings- eller overlappingsmetoder på påfølgende vinduer, hvor effekten av en rektangulært vindu blir kansellert av lignende effekter fra de tilstøtende vinduene.
Svar
Vindu i tidsdomenet fordi
- vi kan garantere null i kantene av vinduet
- vindusfunksjonene har et fint analytisk uttrykk i romlig domene
- mange vindusfunksjoner har et merkelig formet spektrum som ville være vanskelig å tilnærme
- bare et begrenset antall prøver er nødvendig (vindusvindu kan gjøres når signalet strømmer inn)
f.eks. fra wikipedia
Det harde kutte av å gå til null av vindusfunksjoner betyr at i spektraldomenet har de sidelober som går til null veldig sakte. Hvis vi blir kvitt denne begrensningen, kan vi ha funksjoner som er kompakte i både romlige og spektrale domener, som det gaussiske filteret. Dette betyr at du kan filtrere via det spektrale domenet, men det krever at hele signalet er kjent.
Hvis du har hele signalet, vil et annet alternativ være å bruke wavelets
Svar
Jeg hadde det samme spørsmålet.
En konvolusjon er den integrerte / kumulative summen av tidsdomenesignalet ganget med vinduet. Dette bør ikke forveksles med det «vinduete» tidsdomenesignalet.
Slutten på denne artikkelen hjalp meg mye.
I utgangspunktet står det at ekte signaler er endelige, og brått å kutte av et ekte signal resulterer i mange uønskede frekvenser / artefakter i frekvensdomenet.
For å unngå / minimere disse gjenstandene du kan bruke en jevn (f.eks. bjelleformet) vinduefunksjon slik at prøven starter og slutter med null, snarere enn å brått slutter med en skalarverdi som ikke er null.
Eksemplet ovenfor med vinduer vil ha mindre gjenstander i frekvensdomenet enn råprøven nedenfor.
Svar
Det er to brede kategorier knyttet til en FFT, og de er 1) en effektiv måte å implementere et FIR-filter på, og 2) spektralanalyse.
For FIR-filtrering, man trenger ikke bekymre seg for vinduer og ikke bruke dem, med mindre vinduet tilsvarer et filter, men det er ikke vanlig g å gjøre. Lekkasje er ikke en bekymring.
Spektralanalyse er der man bruker vinduer. Det er her du ser på en sensor som er festet til en stor industriell maskin og prøver å finne ut om det er dypt i tarmene, et lager svikter. Lagrene skriker når de svikter, men støyen de kan ha er vanligvis mye lavere enn de andre lydene maskinen lager. Det er her lekkasje og gjennomsnittsberegning kommer inn. Gitt sterke toner, vil lekkasje oversvømme det svake signalet vi leter etter noen få søppel. Det forbedrer følsomheten til spektralanalyse for svake signaler i nærvær av sterke signaler. Det er en lignende effekt når bakgrunnsstøyen skråner. Informasjonen vi søker er i frekvensdomenet. Dette er det samme problemet i RADAR, og SONAR, og geofysikk. Å se det svake signalet er mål.
Svar
Windowing i tidsdomenet er nødvendig for å unngå en enkelt frekvens som ikke er akkurat på en frekvensbakke for å spre seg over hele spekteret. Kanskje hjelper denne siden: http://www.sm5bsz.com/slfft/slfft.htm Linrad (mitt 20 år gamle prosjekt) bruker et FFT med vinduer, og bruker deretter et filter i frekvensdomenet (lag null det vi ikke vil ha.) Bruk et vindu – ikke gå brått fra vekt 1 til vekt 0 på frekvensplassene. Påfør deretter en bakover FFT – men nå på et mye mindre antall poeng. Det er ikke nødvendig å ta med alle frekvensbøylene vi vet er null !! Som en resultat får vi en tidsfunksjon med mye mindre størrelse – det vil si med en mye lavere samplingsfrekvens. Fremgangsmåten gjør filtrering og desimering i et enkelt trinn.Dette er veldig effektivt i tilfelle man ønsker å filtrere ut flere kanaler samtidig. Linrad-hjemmesiden er her: http://www.sm5bsz.com/linuxdsp/linrad.htm