MUST3053: Gehørbasert digital signalprosessering
# Online ressurs
[http://gdsp.hf.ntnu.no](http://gdsp.hf.ntnu.no)
# Sampling
Høyeste frekvens som kan representeres med samplerate $x$ er $x/2$. Denne frekvensen kalles _nyquistfrekvensen_.
## Nedsampling
Naiv nedsampling ("sample and hold") gir artifacts i lyden (kan høres "metallisk" ut). Noen ganger kan dette være ønskelig som lydeffekt ([eksempel](https://youtu.be/q1n4F_oT6as?t=15s)), mens andre ganger vil man ikke at det skal høres. I sistnevnte tilfelle bør man bruke en mer [ordentlig metode](http://dspguru.com/dsp/faqs/multirate/resampling) som er basert på zero padding og lavpassfilter.
Noen samplingsrater:
|| Lydopptak i studio || 48 kHz, 96 kHz, 192 kHz ||
|| CD-kvalitet || 44.1 kHz ||
|| Gamle dataspill || 8 kHz, 11 kHz, 22 kHz ||
## Bitreduksjon
Vanligvis bruker man enten 16 eller 24 bits til å representere et sample i en lydfil. Dette gir god kvalitet og dynamikk. Hvis man reduserer bitdybden naivt vil man introdusere kvantiseringsstøy og det dynamiske spennet blir redusert, altså svake lyder vil få lavere kvalitet eller forsvinne helt. Man kan bitredusere ned til 12 bits og de fleste vil ikke legge merke til det. Reduserer man til 8 bit blir det hørbar støy. Reduserer man til 2-4 bits blir det en mer ekstrem effekt og svake lyder blir borte. Kan brukes til å lage [knusefet gitarlyd](https://open.spotify.com/track/2VtvQ8ktC250QeAU0aQ7MA), for eksempel.
# Panorering
## Lineær panorering
|| 100 % venstre || $1 * venstre, 0 * høyre$ ||
|| 50 % || $0.5 * venstre, 0.5 * høyre$ ||
Lydstyrken oppleves som svakere midt på. Derfor bruker man typisk ikke lineær panorering.
## Kvadratrotbasert panorering
|| 100 % venstre || $\sqrt{1} * venstre, \sqrt{0} * høyre$ ||
|| 50 % || $\sqrt{0.5} * venstre, \sqrt{0.5} * høyre$ ||
Jevnere volum. Altså ca. like høyt midt på som helt til venstre. Denne typen panorering brukes også til kryssfading mellom forskjellige lyder.
## Delaybasert panorering
Det er mulig å forsinke signalet i én av stereokanalene for å få det til å høres ut som lyden kommer fra den andre siden. Bruker man en delaytid på 1 ms, tilsvarer det ca. tiden det tar en lyd å forplante seg 23 cm, altså avstanden fra det ene øret til det andre.
# Filter
## Filtertyper
|| Lavpassfilter || Lave frekvenser går gjennom ||
|| Høypassfilter || Høye frekvenser går gjennom ||
|| Båndpassfilter || Lar lyd rundt en bestemt senterfrekvens gå gjennom, mens lavere og høyere frekvenser blir filtrert ||
|| Båndstoppfilter || Filtrerer lyd rundt en bestemt senterfrekvens, mens andre frekvenser går gjennom ||
## Enkle filtere
|| Lavpassfilter || $f(x) = 0.5 * x_n + 0.5 * x_{n-1}$ 0 hz går gjennom, mens nyquistfrekvensen filtreres helt vekk ||
|| Høypassfilter || $f(x) = 0.5 * x_n - 0.5 * x_{n-1}$ 0 hz filtreres helt vekk, mens nyquistfrekvensen går gjennom ||
|| Båndpassfilter || $f(x) = 0.5 * x_n - 0.5 * x_{n-2}$ nyquistfrekvens/2 går gjennom, mens 0 hz og nyquestfrekvensen filtreres helt vekk ||
|| Båndstoppfilter || $f(x) = 0.5 * x_n + 0.5 * x_{n-2}$ nyquistfrekvens/2 filtreres helt vekk, mens 0 hz og nyquestfrekvensen går gjennom ||
## FIR
Et filter basert på et sett med koeffisienter. Er alltid stabilt. Impulsresponsen er definert av koeffisientene.
$$y(n) = a_0 * x_n + a_1 * x_{n-1} + ... + a_N * x_{n-N}$$
Filterets _orden_ bestemmes av høyeste delay, $N$.
## IIR
Et filter med feedback. Må designes for å være stabilt. Kan gi krapp frekvensrespons. Impulsresponsen er i teorien uendelig lang.
## Båndbredde
|| Båndbredde || Avstanden mellom øvre og nedre frekvens i filteret. Brukes typisk om båndpassfilter. ||
|| Oktaver || Båndbredde kan måles i oktaver. Mange oktaver betyr høy båndbredde. ||
|| Q || Bandwidth kan måles i Q. Liten Q betyr høy båndbredde, stor Q betyr liten båndbredde (smalt filter) ||
Konvertering mellom oktaver og Q er forklart her: [http://www.rane.com/note170.html](http://www.rane.com/note170.html)
# Modulert delay
## Chorus
Kan brukes til å gjøre lyden rikere. Det den gjør er å legge til et (eller flere) forsinket signal. Forsinkelsestiden varieres ved hjelp av f.eks. en sinus-basert LFO. Typisk delaytid er innenfor 20 - 50 ms.
## Flanger
Samme teknikk som i chorus, men kortere delaytid (typisk 0.5 - 15 ms), pluss at den kan ha feedback. Kan kjennes igjen ved at den gjør transienter litt mer diffuse. Rasping.
## Phaser
Phaser-effekten kan forveksles med flanger, men er laget på en annen måte. Den er basert på allpassfilter. En phaser kan i teorien sette notches hvor som helst. I en flanger er notchene alltid harmoniske. Phaser gir også gjerne en smudere lyd enn flanger.
## Waveguide
Modellering av et instrument basert på eksitering (f.eks. plekter på gitar) og resonans i en resonator (f.eks. gitarkasse). Har gjerne et element av lavpassfilter.
# Modulasjonsteknikker
## Amplitudemodulasjon
Signalets amplitude moduleres med en modulasjonsbølge som går mellom 0 og 1. Gir to sidebånd.
## Ringmodulasjon
Signalets amplitude moduleres med en modulasjonsbølge som går mellom -1 og 1. Signalfrekvensen blir borte, to sidebånd oppstår.
## Single Sideband-Modulasjon
Gir kun ett sidebånd, ikke to.
## Frekvensmodulasjon
Frekvensen til en bærebølge moduleres med en modulatorbølge. Dette gir flere sidebånd.
## Fasemodulasjon
En implementasjon av frekvensmodulasjon som unngår problemet at modulatorfrekvensen blir 0 Hz.
## Adaptiv FM
F.eks. kan pitchtracking brukes for å måle grunnfrekvensen i signalet, og så brukes denne grunnfrekvensen til å bestemme en fornuftig modulatorfrekvens.
## Asymmetrisk FM
Kun øvre eller nedre sidebånd. Gir et enklere spekter enn vanlig FM.
# Forvrengning
## Klipping
Amplituden blir begrenset/klippet dersom den går over et visst nivå.
## Likeretter
Verdier under en terskel (f.eks. 0) blir speilet opp
## Waveshaping
f(x) er basert på en eller annen tabell eller mattefunksjon. Waveshaping kan brukes f.eks. til å gjøre odde overtoner svakere.
## Slope-basert delay
Forsinkelse basert på lydbølgens kurvatur. Siden denne forvrengningseffekten er basert på delay, vil den ikke ødelegge/redusere dynamikken.
## Compression
En compressor er en fin måte å gjøre volumet i en innspilling jevnere. Men pass på, for den kan også heve volumet på bakgrunnstøy der det ikke er så mye signal.
# Reverb
## Refleksjoner
Kan deles opp i to typer: 1) Tidlige refleksjoner og 2) Sene refleksjoner (diffuse). Det er krever mye datakraft å modellere refleksjoner, og derfor bruker man gjerne tilnærminger som ikke er så dyre.
## Kamfilter
Et kamfilter legger til en forsinket versjon av signalet. Dette gir resonanser ved frekvens 1/delaytid og korresponderende overtoner. Et kamfilter kan brukes som reverberator. Den farger dog lyden, så man bør passe på at man velger gode parametere for å unngå at lyden blir for farget.
## Allpassfilter
Slipper gjennom alle frekvenser, men snur fasen på noen bestemte frekvenser. Ideelt sett er frekvensresponsen flat, og det er en ønskelig egenskap i reverb-effekter. Kan brukes som reverberator.
## Gardner reverb
En kombinasjon av kamfilter og allpassfilter i en nøstet konfigurasjon. Et kjennetegn på denne reverben er at den typisk bruker omvendt invertert fase på hver stereokanal for å oppnå en slags stereoeffekt.
## Freeverb
Laget ved hjelp av mange kamfilter i parallell og så mange allpassfilter i serie. Ble en suksess på grunn av finjusterte, velvalgte parametere. Bruker delaytider som ikke er delelige på hverandre.
## Feedback Delay Network
Reverb som er basert på et nettverk av delaymoduler med både lokal og global feedback. Denne reverben bruker også pitchmodulasjon (med tilfeldige avvik, altså filtrert støy) for å unngå "stående bølger" (frekvenser som forsterker seg selv pga feedbackloopen). Hvis pitchmodulasjonen blir for voldsom, vil man fort legge merke til det.
## Convolution reverb
Basert på opptak av impulsrespons i et rom. Reverben høres da ut som det rommet.
# Prosessering i frekvensdomenet
## Fourier Transform
Konverterer lyd til frekvensdomenet. Man ser på frekvensspekteret i et sliding window. Siden FT krever at signalet er periodisk, bruker man en [window function](https://en.wikipedia.org/wiki/Window_function) for å gjøre det periodisk innenfor vinduet. Man kan ha presisjon i tid eller frekvens. Omvendt proporsjonal trade-off der altså.
* Liten vindusstørrelse (f.eks. 128): God oppløsning i tid, dårlig oppløsning i frekvens
* Stor vindusstørrelse (f.eks. 16k): God oppløsning i frekvens, dårlig oppløsning i tid
## Anvendelser
* Subtrahere en støyprofil fra et lydopptak
* Pitche opp og ned lyder
* Vocoder
* Timestretching. Se f.eks. [paulstretch](http://hypermammut.sourceforge.net/paulstretch/)
* Justere formantmønstere til en lyd
* Lage et slags lavpassfilter ved å redusere frekvenskomponenter over en viss terskel
* "Kryptere" lyd
* Eliminere feedback
* Smøre frekvensspekteret utover i tid. Kan minne om reverb.
# Granulær lydsyntese
## Grunnleggende parametere
|| Kornrate || Bestemmer hvor ofte korn skal spilles av ||
|| Transpose || "Pitchen" i hvert korn. Bestemmer opplevd pitch ved lav kornrate og formantmønster ved høy kornrate. ||
|| Envelope || Envelopen til hvert korn. For krappe endringer i denne envelopen vil kunne føre til at man får frekvenser over nyquistfrekvensen, og da får man en skarp lyd med ekstra støy. ||
|| Waveform || Lyden som spilles av i hvert korn ||
|| Kornlengde || Hvor langt er hvert korn ||
## Overgang mellom pitch og rytme
Frekvenser under 20 Hz vil høres som rytmer mens frekvenser over 50 Hz vil høres som toner. [Eksempel](https://youtu.be/zhl-Cs1-sG4?t=8m48s)
# Konvolusjon
"Spille av en lyd gjennom en annen". Brukes typisk til reverb og filtrering (FIR).
## Optimalisering
Siden direkte konvolusjon krever mange multiplikasjonsoperasjoner (ofte for mye til at man kan gjøre det i sanntid), bruker man gjerne "fast convolution" i stedet. Det man gjør er at man konverterer lyden til frekvensdomenet og gjør en kompleks multiplikasjon der, for så å konvertere tilbake til tidsdomenet. Dette introduserer endel forsinkelse (lik lengden på impulsresponsen), og for å redusere denne forsinkelsen gjør man operasjonen i mindre partisjoner om gangen.