FFT Prosessering i frekvensdomenet Digital signalprosessering Øyvind Brandtsegg
Representasjonsmåter Tidsdomene: Amplityde over tid Frekvensdomene: Amplityde over frekvens
Hvorfor? Prosessering i frekvensdomenet gir utvidete muligheter Behandle hvert frekvensbånd separat Filter Pitch shift, frekvens shift Tidskompresjon eller strekk Morfing, kryssing Skille ut delkomponenter, f.eks. demixing
Fourier Transform (FT) Utgangspunkt: Enhver periodisk bølgeform kan uttrykkes som summen av en eller flere sinusbølger Ideelt sett kan et signal beskrives like presist og fullstendig i begge domener FT: Konvertere fra tidsdomene til frekvensdomene Tilbake: Inverse Fourier Transform FT antar at signalet er stabilt periodisk, og med uendelig varighet
DFT, FFT Discrete Fourier Transform (DFT) er for digitale signaler det FT er for analoge signaler Diskret = ikke kontinuerlig Fast Fourier Transform (FFT) er en optimalisert metode for å gjennomføre DFT DFT og FFT produserer identiske resultater
Short Time Fourier Transform For å analysere spektrale endringer over tid må signalet deles opp i segmenter For å myke opp overgangen fra ett segment til det neste, bruker vi en envelope på hvert segment for å fade inn og ut En slik envelope kalles i denne sammenhengen et vindu Segmenter overlappes slik at summen av segmentene er lik originalsignalet En FFT utføres på hvert vindu Analysen av hvert vindu antar at signalet har uendelig varighet (og er stabilt periodisk) Når vi sier at vi utfører en FFT av et audiosignal, betyr det normalt at vi utfører en rekke STFT på separate segmenter av signalet
Bins Fourier analyse gir et sett med "kanaler", også kalt "bins (beholder), en for hvert frekvensområde Antallet kanaler bestemmes av vindustørrelsen (N, dvs. antall samples i et vindu) laveste frekvens er 0Hz (dc) høyeste frekvens er sr/2 dvs. Nyquist vi har (N/2)+1 antall kanaler, altså N/2 separate frekvensområder (og en bin for 0Hz) Senterfrekvens for hver bin er lineært fordelt mellom 0Hz og Nyquist F.eks. ved sr = 44.1kHz og vindustørrelse 1024 0Hz, 43Hz, 86Hz, 129Hz, 172Hz (her avrundet til heltall)
Presisjon i tid eller frekvens Bedre oppløsning i frekvens, dvs mer presis frekvensanalyse: Krever lengre vindu, lengre segmenter Lengre segmenter gir dårligere oppløsning på tidsaksen, mindre presis angivelse av når de forskjellige frekvenser opptrer i lyden
Avvik innenfor hvert frekvensbånd En FFT kan tenkes som et sett båndpassfilter Hvis en frekvens i signalet faller eksakt på senterfrekvensen til et filter vil analysen være presis. Avvik fra senterfrekvens vil gi lavere amplityde lekkasje til nabofrekvenser Slik unøyaktigheter vil normalt ikke høres, dersom vi ikke manipulerer signalet i frekvensdomenet Dette er fordi den inverse FFT kalkulerer inn avvikene, og bruker de til å korrigere faktisk frekvens Dersom vi filtrerer kraftig i frekvensdomenet vil avvikene høres tydelig For eksempel lytte på en enkelt bin
Phase Vocoder Beslektet med STFT, men egner seg også for å analysere frekvensavvik innenfor hvert bånd. Analyser består av et sett med spor ( tracks ), hvor hvert spor følger en delkomponent i signalet Fordel: mer presis frekvensgjengivelse, og takler glissandi/vibrato bedre Bakdel: hvert spor kan kun inneholde 1 deltone/komponent
Oppsummering I frekvensdomenet er et signal representert med frekvens/amplityde i separate bins Ettersom Fourier analyse forutsetter at signalet ikke endres over tid, deler vi opp signalet i kortere segmenter (vinduer) for å fange endringer over tid. Antall separate bins i analysen avhenger av lengden på hvert vindu Antall bins bestemmer oppløsning på frekvensaksen, flere bins gir mer presis analyse av frekvensinnhold
Pvs opcodes i Csound Streaming Phase Vocoder Sanntids analyse, manipulering og resyntese Ny signaltype: f-signaler I tillegg til i- k- og a- signaler f-signaler kan genereres av f.eks. pvsanal, og resyntetiseres av f.eks. pvsynth f-signaler laget med forskjellige analyseparameter kan ikke blandes men kan brukes parallelt i samme instrument
Eksempler pvsfreeze: "frys" amplityde eller frekvens (separat) pvsblur: filtrering av endringer i amplityder og frekvenser pvsmooth: filtrering av endringer i amplityder eller frekvenser (separat) pvshift: legge til en fast verdi til alle frekvenser, frekvens shift pvscale: multiplisere frekvensverdier med faktor, dvs pitch shift pvscross: amplityder fra signal 1 og signal 2 mikses, og appliseres på frekvenser fra signal 2 pvsvoc: amplityder fra signal 1 appliseres på frekvenser fra signal 2 pvsfilter: amplityder fra signal 1 multipliseres med amplityder fra signal 2, frekvenser fra signal 2 pvsmix: bland de sterkeste (høyest amplityde) frekvenser fra 2 signaler pvsmorph: interpolere mellom frekvenser (og amplityder) fra 2 signaler