Jag trodde att DSP skulle göras genom att använda FFT av delar av en signal, modifiera samplen som är resultatet av FFT (eftersom de representerar spektrumet för vår signal + brus) och ta bort eventuella oönskade signaler och än gör en invers FFT för att få en tidsdomänrepresentation av den filtrerade signalen (brus har tagits bort nu) . Detta görs dock inte, istället gör vi allt arbete i tidsdomän med fönsterfunktioner. Varför?
Om vi multiplicerar fönsterfunktionen i tidsdomänen än vi konvolverar fönsterfunktionens frekvenssvar med spektrum för vår signal i frekvensdomän, hur fungerar det? Jag menar om vi bara gjorde alla arbetet i frekvensdomän genom att multiplicera vår signal med filterets frekvensrespons, det skulle vara som att filtrera rätt? Men här gör vi alla saker i tidsdomän istället för att använda fönster.
-> Låt oss se var min förvirring kommer ifrån. För analoga filter, t.ex. lågpassfilter, har vi denna pulsliknande frekvensrespons. När vi filtrerar en signal multiplicerar vi effektivt vår signalspektrum med filterets pulsliknande frekvensrespons. Detta kommer att minska alla frekvenser i vår signal ovanför en avstängning till 0. Så här fungerar ett lågpassfilter i huvudsak. Varför inte göra detsamma med digitala filter också?
Kommentarer
- Möjlig duplikat Varför är är det en dålig idé att filtrera genom att nollställa FFT-soptunnor?
Svar
Windowing minskar spektral läckage.
Säg att du börjar med $ $ sin (y) = \ cos (\ omega_0 t) $. Perioden är uppenbarligen $ 2 \ pi / \ omega_0 $.
Men om ingen sa till dig att perioden är $ 2 \ pi / \ omega $ och du väljer blindt intervallet $ [0, 1,8 \ pi / \ omega_0] $ och tar FFT av denna trunkerade vågform, du kommer att observera frekvenskomponenter i andra frekvenser som alla är falska eftersom hopp som skapas genom att kopiera och klistra in den trunkerade vågformen för periodicitet inte är riktigt närvarande i originalsignalen – det är en artefakt av en oturlig avkortning som inte fångar övergången mellan perioder smidigt . Helst finns det bara en spektral komponent vid $ \ omega = \ omega_0 $.
Syftet med fönster i tidsdomän är att minska alla dessa fiktiva spektralkomponenter.
Svar
Windowing används eftersom DFT-beräkningarna fungerar på den oändliga periodiska förlängningen av insignalen. Eftersom många faktiska signaler antingen inte är periodiska alls eller samplas över ett intervall som skiljer sig från deras faktiska period, kan detta ge falska frekvenskomponenter vid den konstgjorda ”kanten” mellan upprepade intervall, kallade läckage . Genom att först multiplicera tidsdomän-signalen med en fönsterfunktion som går till noll i båda ändar skapar du en smidig övergång mellan upprepade intervall i den oändliga periodiska förlängningen, vilket minskar skapandet av dessa konstgjorda frekvenskomponenter när vi sedan tar DFT.
Detta papper ger en mer ingående titt på detta fenomen, liksom en viss inblick i effekterna av olika fönsterfunktioner.
Svar
Jag tror att du förväxlar två olika operationer.
Windowing i tidsdomänen förklaras av @ sam, så jag kommer inte att upprepa det. Men fönster är inte gjort för att utföra filtrering. Filtrering genom att multiplicera FFT för en signal med filterfrekvenssvaret är helt rimligt i många situationer och är verkligen gjort. Alternativet för filtrering är tid -domänkonvolution (vilket skiljer sig från fönster). Detta har sina egna fördelar, som att arbeta på en signal i ”realtid e ”eftersom det mäts utan att vänta på att allt ska lagras och sedan förvandlas.
Så till din fråga” Varför inte göra detsamma med digitala filter också? ”, är svaret helt enkelt” vi gör , när det passar. ”
Kommentarer
- Jag har också intrycket att konvolution och fönsterhiss blandades i frågan. Bra du påpekade det!
Svar
Det har varit flera bra svar på denna fråga. Jag anser dock att en viktig punkt inte har klarlagts helt. En del av frågan var varför vi inte bara multiplicerar FFT för en signal med önskat filterrespons. Om vi t.ex. vill låga passera filtrera vår signal kan vi helt enkelt nollställa alla frekvenskomponenter högre än önskad avstängningsfrekvens Detta är i själva verket en enkel tillämpning av den välkända frekvenssamplingsmetoden för att designa FIR-filter. Problemet är att vi bara kan nollställa de diskreta frekvenskomponenterna som beräknas av FFT. Vi har ingen kontroll över vad som händer mellan dessa diskreta frekvenser .Det visar sig att en sådan enkel version av filtrering bara ger en dålig stoppbanddämpning (oavsett FFT-längd). Om du har tillgång till matlab eller oktav är det väldigt lärorikt att prova det själv:
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
Om du inte använder ett icke-rektangulärt fönster, kommer FFT-resultaten redan att vara inblandade i transformeringen av ett standard rektangulärt fönster (ett periodiskt Sink) innan du gör någon frekvensdomänfiltrering. t.ex. du kommer att få två filter tillämpade, varav ett du förmodligen inte vill ha.
Genom att fönstret i tidsdomänen, före FFT och frekvensdomänfiltrering, ersätter du eventuell filtrering (så kallad ”läckage”) ) görs genom rektangulär fönster, och därmed får du inte ytterligare en oönskad filterkonvolution.
Det andra sättet att göra detta är att använda överlappnings-lägg till eller överlappa spara metoder på på varandra följande fönster, där effekterna av en rektangulärt fönster avbryts av liknande effekter från intilliggande fönster.
Svar
Fönster i tidsdomänen eftersom
- vi kan garantera noll i fönstrets kanter
- fönsterfunktioner har ett trevligt analytiskt uttryck i rumslig domän
- många fönsterfunktioner har ett konstigt format spektrum som skulle vara svårt att approximera
- endast ett begränsat antal sampel behövs (fönster kan göras när signalen strömmar in)
t.ex. från wikipedia
Det hårda skär av att gå till noll av fönsterfunktioner betyder i spektraldomänen att de har sidlober som går mycket långsamt till noll. Om vi blir av med denna begränsning kan vi ha funktioner som är kompakta i både rumsliga och spektrala domäner, som det Gaussiska filtret. Det betyder att du kan filtrera via den spektrala domänen men det kräver att hela signalen är känd.
Om du har hela signalen skulle ett annat alternativ vara att använda wavelets
Svar
Jag hade samma fråga.
En konvolution är den integrerade / kumulativa summan av tidsdomänssignalen multiplicerad med fönstret. Detta bör inte förväxlas med den ”fönster” tidsdomän signalen.
Slutet på den här artikeln hjälpte mig mycket.
I grund och botten står det att riktiga signaler är ändliga och att plötsligt avbryta en riktig signal resulterar i massor av oönskade frekvenser / artefakter i frekvensdomänen.
För att undvika / minimera dessa artefakter Du kan använda en jämn (t.ex. klockformad) fönsterfunktion så att ditt prov börjar och slutar med noll snarare än att plötsligt slutar med något skalarvärde som inte är noll.
Det fönsterade provet ovan kommer att ha mindre artefakter i frekvensdomänen än råprovet nedan.
Svar
Det finns två breda kategorier associerade med en FFT och de är 1) ett effektivt sätt att implementera ett FIR-filter och 2) Spektralanalys.
För FIR-filtrering, man oroar sig inte för windows och använder dem inte, såvida inte fönstret motsvarar ett filter, men det är inte vanligt tunt g att göra. Läckage är inte ett problem.
Spektralanalys är där man använder windows. Det är här du tittar på en sensor som är ansluten till en stor industrimaskin och försöker ta reda på om det är djupt i tarmarna, ett lager inte fungerar. Kullager skriker när de misslyckas men bullret de kan ha är vanligtvis mycket lägre än de andra ljuden som maskinen gör. Det är här läckage och medelvärde kommer in. Med tanke på starka toner kommer läckage att svämma ut den svaga signalen vi letar efter några lager. Det förbättrar spektralanalysens känslighet för svaga signaler i närvaro av starka signaler. Det finns en liknande effekt när bakgrundsljudet lutar. Informationen vi söker finns i frekvensdomänen. Detta är samma problem i RADAR och SONAR och geofysik. Att se den svaga signalen är målet.
Svar
Windning i tidsdomänen krävs för att undvika en enda frekvens som inte exakt finns i ett frekvensfack för att spridas ut över hela spektrumet. Den här sidan hjälper kanske: http://www.sm5bsz.com/slfft/slfft.htm Linrad (mitt 20 år gamla projekt) använder ett fönster med fönster och använder sedan ett filter i frekvensdomänen (gör noll vad vi inte vill ha.) Använd ett fönster – gå inte plötsligt från vikt 1 till vikt 0 på frekvensfacken. Använd sedan en bakåt FFT – men nu på ett mycket mindre antal poäng. Det finns ingen anledning att inkludera alla frekvensfack som vi vet är noll !! Som resultat får vi en tidsfunktion med en mycket mindre storlek – det betyder med en mycket lägre samplingsfrekvens. Proceduren filtrerar och decimerar i ett enda steg.Detta är mycket effektivt om man vill filtrera bort flera kanaler samtidigt. Linrad-hemsidan är här: http://www.sm5bsz.com/linuxdsp/linrad.htm