De bouw van de Aqualizer - RJProjects Aqualizer.pdfdan dus discreet, bestaande uit 0 puntjes. Als je...
Transcript of De bouw van de Aqualizer - RJProjects Aqualizer.pdfdan dus discreet, bestaande uit 0 puntjes. Als je...
1
De bouw van de Aqualizer
Door Josse van Dobben de Bruyn & Jelle van Mourik
2
De bouw van de Aqualizer
Door Josse van Dobben de Bruyn & Jelle van Mourik
3
Inhoud Inhoud ..................................................................................................................................................... 3
Inleiding ................................................................................................................................................... 5
1 Een lineair filter ............................................................................................................................... 6
1.1 Een signaal ............................................................................................................................... 6
1.2 Convolutie ............................................................................................................................... 7
2 Het frequentiedomein ..................................................................................................................... 9
2.1 Samenstelling van frequenties ................................................................................................ 9
2.2 Van frequentiedomein naar tijddomein................................................................................ 11
2.3 Van het tijddomein naar het frequentiedomein ................................................................... 12
2.4 De frequentierespons ............................................................................................................ 14
3 Recursieve filters ........................................................................................................................... 15
3.1 Oneindige impulsrespons ...................................................................................................... 15
3.2 Impulsrespons vaststellen ..................................................................................................... 16
4 Complexe filters ............................................................................................................................. 16
De complexe Fouriertransformatie ................................................................................................... 16
4.1 Z‐transformatie ..................................................................................................................... 17
4.2 Z‐transformatie in impulsrespons ......................................................................................... 20
5 Polen en nulpunten ....................................................................................................................... 20
5.1 Het plotten van een frequentierespons ................................................................................ 20
5.2 Het berekenen van de impulsrespons (voorbeeld) ............................................................... 22
5.3 Het berekenen van de reële impulsrespons (voorbeeld) ...................................................... 22
6 Aqualizer ........................................................................................................................................ 24
6.1 Eigen filter: de Aqualizer ....................................................................................................... 24
6.1.1 Peaking filter .................................................................................................................. 24
6.1.2 Low‐pass/high‐pass filter .............................................................................................. 25
6.1.3 Parametrisch filter ......................................................................................................... 26
6.1.4 Equalizer ........................................................................................................................ 26
6.2 Vereisten filter ....................................................................................................................... 26
6.2.1 Het aantal verschillende banden ( ) ............................................................................. 27
6.2.2 Piekfrequentie ( ) ........................................................................................................ 27
6.2.3 De frequentierespons .................................................................................................... 28
6.2.4 Het volume ( ) .............................................................................................................. 28
6.2.5 Link band‐width ............................................................................................................. 29
4
6.2.6 Overige zaken bij het programmeren ........................................................................... 29
6.3 Design grafische interface ..................................................................................................... 29
6.4 Technische informatie Aqualizer ........................................................................................... 29
7 Conclusie ....................................................................................................................................... 30
Appendix A: Complexe getallen ............................................................................................................ 31
Bijlage 1: Programmeercode: frequentierespons plotten in Scilab: ..................................................... 32
Bijlage 2: Programmeercode: peaking filter .......................................................................................... 34
Bijlage 3: Instellingen piekfrequenties .................................................................................................. 35
Bibliografie ............................................................................................................................................ 36
5
Inleiding Koffie wordt doorgaans gefilterd, anders vindt men het niet lekker. Water wordt gefilterd, anders loop je de kans allerlei ziektes op te lopen. E‐mail wordt vaak gefilterd om vervelende teksten buiten de deur te houden. Lucht kun je filteren om bijvoorbeeld giftige uitlaatgassen weg te houden. Ook geluid kun je filteren, maar hoe doe je dat? Probeer je met een vangnet het geluid van een gitaar weg te vangen? Nee, daarvoor zul je het moeten opnemen, er wiskundige formules op loslaten en in zijn nieuwe vorm weer uitzenden. Geen makkelijke klus. Het filteren van geluid, dat wil zeggen, het vervormen ervan, kent een hele brede toepassing. Bij een concert waar versterkers worden gebruikt, moet het geluid op de ruimte aangepast worden. Hoge tonen kunnen worden geabsorbeerd door gordijnen of de bekleding van stoelen, lage tonen kunnen zichzelf versterken door middel van resonantie en daarom zou je ze kunnen willen versterken of verzwakken. Verder is het soms wenselijk de balans tussen verschillende instrumenten aan te passen en soms is het prettig om je speakers te sparen door de lage tonen wat zachter te zetten. Met de komst van de elektronische muziek, bijvoorbeeld techno en dance, is er nog een hele nieuwe toepassing van geluidsfilters gekomen. De lage tonen, de ‘beat,’ worden vaak hard gezet om de muziek te kunnen voelen en veel geluidseffecten zijn erop gebaseerd het geluid door speciale filters heen te halen. Ons onderzoek gaat over het programmeren van een digitaal geluidsfilter. En niet zomaar een filter, maar een soort all‐in‐one‐geluidsfilter. Over het algemeen is een filter namelijk of een high‐pass filter (zie hoofdstuk 6 voor uitleg), of een parametrisch filter, of een band‐pass filter of nog een ander soort, maar niet allemaal tegelijk. Wij probeerden echter een digitaal filter te maken dat zo instelbaar is dat hij alles kan. Daar komt de nodige hogere wiskunde aan te pas. Een grote uitdaging was om bij het ontwerpen van het filter gebruik te maken van de oplossing die complexe getallen bieden om sommige problemen makkelijker te maken. Hoofdstuk 1 tot en met 4 beschrijven de wiskunde die wij ons eigen moesten maken alvorens in staat te zijn een digitaal filter te maken. Achtereenvolgends worden lineaire filters, recursieve filters en complexe getallen hierbij behandeld. Het onderzoek hierbij was grotendeels literatuuronderzoek. Hoofdstuk 5 bevat de beschrijving van een hulpprogramma dat we hebben geschreven om meer grip te krijgen op het ontwerp van een adequaat filter. Vervolgens wordt met behulp van een uitgebreid voorbeeld voorgedaan, hoe de verdere formules toegepast kunnen worden in het ontwerp van de filter. In Hoofdstuk 6 staat de bouw van ons filter centraal. Nog een hulpprogramma wordt beschreven dat ons direct helpt bij het ontwerpen van de filter. Voor de rest komen alle formules ter sprake die van belang zijn bij het programmeren van het filter. Het uiteindelijke programma is een VST‐plugin, geprogrammeerd in de programmeercode C++. Het is te laden in diverse computerprogramma’s, zoals Sonar en MAGIX Music Maker. We hebben het programma Aqualizer genoemd, als variatie op de al bestaande equalizer.
6
0 2 4 6 8 10 12 14 16 18 20
-2.0
-1.0
0.0
1.0
2.0
x(t)
Am
plitu
de1 Een lineair filter
1.1 Een signaal Om te beginnen moeten we bedenken wat geluid eigenlijk is en hoe geluid wordt voorgesteld in de computer. Geluid wordt gevormd door continue trillingen in de lucht. Hoge frequenties worden gevormd door hele snelle trillingen in de lucht, lage frequenties door langzame. De trillingen kunnen worden gemeten en gedigitaliseerd. De sterkte van de trilling, de uitwijking ofwel amplitude, bepaalt de geluidssterkte. Het is belangrijk om je te beseffen dat als je een signaal digitaliseert, je maar een eindig aantal keer per seconde een fragmentje kan nemen. Het continue signaal van bijvoorbeeld een gitaar wordt dan dus discreet, bestaande uit puntjes. Als je alle gemeten waarden tegen de tijd uitzet, krijg je het tijddomein. In grafiek 1.1 staat een voorbeeld van hoe een signaal eruit zou kunnen zien.
Elk puntje in deze grafiek wordt ‘sample’ genoemd en is dus de input op een moment. Deze wordt meestal met aangeduid. De blokhaakjes geven aan dat we het hier over discrete tijd hebben. Als we ervan uitgaan dat ons signaal een tijdspanne van één seconde beslaat, was de frequentie waarop onze oscilloscoop werkte 20 Hz. Het is meteen duidelijk zichtbaar dat een dergelijk lage frequentie een relatief grote onnauwkeurigheid met zich meebrengt. Heel veel kleine golfjes in het oorspronkelijke signaal zijn namelijk niet te zien in dat wat door de computer waargenomen wordt. Stiekem zag het continue signaal er namelijk uit als in grafiek 1.2.
Je kunt zien dat de hoge frequenties –de kleine golfjes‐ van het oorspronkelijke signaal niet meer zichtbaar zijn. De grote lijn, die in de lage frequenties zit, is echter nog wel aardig zichtbaar in grafiek 1.1. Hier uit is dus te concluderen dat hoge frequenties niet meer goed waar te nemen zijn. Hieraan is zelfs een stelling verbonden, bedacht door de Zweedse elektronicus Harry Nyquist. Deze stelling zegt dat de hoogste frequentie die aanwezig is in het signaal niet hoger mag zijn dan de helft van de
samplefrequentie, ofwel . (Black, 1953)
Als je bijvoorbeeld een oscilloscoop hebt die honderd samples per seconde kan nemen, mag de maximale frequentie 50 Hz zijn. Is hij hoger, dan gaat er allerlei dingen mis in de herkenning van het signaal.
0 2 4 6 8 10 12 14 16 18 20
-2.0
-1.0
0.0
1.0
2.0
x[n]
Am
plitu
de
Grafiek 1.2 Het oorspronkelijke signaal en de punten die zijn geregistreerd. Een groot deel van de boventonen zijn weggevallen door de lage resolutie van de oscillator.
Grafiek 1.1 Een voorbeeld van een signaal in het tijddomein. Op de x‐as staat het samplenummer, op de y‐as de amplitude ervan.
7
Als er wel te hoge frequenties in het signaal zitten, kunnen die niet meer als zodanig herkend worden. Ze zijn er echter wel en moeten dus wel op een manier geregistreerd worden. Dat gebeurt dus ook wel. Een voorbeeld van deze situatie is te zien in grafiek 1.3. De samplefrequentie is in dit geval 10 Hz. Het signaal is echter ±9,5 Hz.
De computer krijgt op deze manier een compleet vertekend beeld van de input: hij denkt dat er een hele lage frequentie binnenkomt, terwijl het een veel hogere frequentie is. Dit verschijnsel wordt ‘aliasing’ genoemd. In de praktijk hebben de meeste geluidskaarten een samplefrequentie van 44.100 Hz en kunnen dus tonen die hoger zijn dan 22.050 Hz in één seconde niet als zodanig registreren. Je moet dus ook voordat het signaal de computer binnenkomt al zorgen dat die eruit zijn, anders loopt de hele signaalverwerking in de soep.
1.2 Convolutie Als je een signaal binnen hebt gekregen, wil je daar ook graag wat mee doen. Een van de eerste dingen die je moet kunnen, is het herkennen van een signaal. Dat is in allerlei toepassingen nodig. Een radarsignaal moet opgevangen en herkend worden, de spraakherkenning van een computer moet wel weten waarop die moet reageren, seismografen moeten bepaalde signalen kunnen herkennen en noem maar op. Er komt een signaal binnen, dat verwerkt moet worden en dan tot een bepaalde uitvoer moet leiden. De verwerking van het signaal ofwel impulsrespons wordt over het algemeen genoemd. In een schema ziet de verwerking eruit als in schema 1.1.
Een geluidsversterker zou je bijvoorbeeld kunnen weergeven met · 3. Dat betekent dat elke input wordt vermenigvuldigd met
3, dat wil zeggen: drie keer zo sterk wordt en dan weer uitgezonden wordt. Dan krijg je dus altijd 3 . Voor signaalherkenning is het essentieel meerdere inputs mee te nemen. De impulsrespons wordt dan wat langer en zou er bijvoorbeeld zo uit kunnen zien: … Een bepaalde output wordt dus veroorzaakt door de afgelopen impulsen. Je kunt deze impulsrespons ook tekenen in een grafiek, een zelfde soort als waar je ook een impuls in tekent. Grafiek 1.4 laat zo’n grafiek zien. Als we beginnen bij , vermenigvuldigen we die waarde met a0, sample nummer 0 in de grafiek. Dan kijken we naar de vorige waarde, 1 , en vermenigvuldigen we die met nummer 1. Hetzelfde doen we met de volgende waarden tot en met 5 . Al deze waarden opgeteld vormen . Dit kun je vervolgens ook doen om 1 , 2 en zo voort uit te rekenen. Dit proces wordt convolutie genoemd en is ook weer te geven in een wiskundige formule:
0 1 2 3 4 5 6 7 8 9 10
-1.0
0.0
1.0
Grafiek 1.3 Deze sinus is het signaal dat er in een seconde binnenkomt. De punten zijn de samples die de oscilloscoop met een frequentie van 10 Hz waarneemt: een lagere frequentie.
Schema 1.1 De verwerking van een signaal schematisch weergegeven.
Grafiek 1.4 Een voorbeeld van een impulsrespons h[n]. De hoogte van de puntjes zijn de waarde van an .
0 1 2 3 4 5 60.0
0.2
0.4
0.6
0.8
1.0
Am
plitu
de
8
·
Formule 1.1 Convolutie mathematisch beschreven. M is het aantal punten van de impulsrespons , k loopt van 0 tot M‐1. Dit wordt geschreven als
Dit is nogal een mond vol om telkens weer op te schrijven, daarom is er een tekentje bedacht speciaal voor convolutie: het *‐teken. Net als optellen, aftrekken en vermenigvuldigen allemaal een eigen teken hebben, wordt convolueren met een sterretje weergegeven. Merk op dat in grafiek 1.5 0 correspondeert met in de formule, 1 met a1 et cetera.
Grafiek 1.5 Convolutie schematisch weergegeven. De bovenste grafiek geeft het signaal x[n] weer. Als voorbeeld wordt geconvolueerd. Alle signalen worden vermenigvuldigd met een bepaalde waarde in h[n]. De som hiervan vormt de output . Zo gaat het convolueermachientje het hele signaal af en vormt zo heel . (Smith, 1997)
De uitwerking van het voorbeeld om uit te rekenen is:
· · · ··
. · . . · . . · . . ·. · . .
0 1 2 3 40.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
h[n]
Am
plitu
de
0. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
-3
-2
-1
0
1
2
3
x[n]Ampl
itude
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
-20
-15
-10
-5
0
5
10
15
20
y[n]Ampl
itude
9
2 Het frequentiedomein
2.1 Samenstelling van frequenties Elk instrument heeft zijn eigen klankkleur en produceert zijn eigen boventonen. Dat betekent dus dat zijn toon een samenstelling is van bepaalde frequenties; anders zou het immers een zuivere sinus zijn. Hoe moet je je nu voorstellen dat meerdere tonen tegelijk worden geproduceerd? De lucht kan immers niet tegelijk met 10 Hz en met 15 Hz trillen want dan zou hij op bepaalde momenten twee verschillende kanten tegelijkertijd op moeten trillen. Je moet je voorstellen dat alle signalen met verschillende frequenties die op hetzelfde moment aanwezig zijn, telkens worden opgeteld en dan één gezamenlijk sample vormen. In de volgende grafiek staat hoe dat in zijn werk gaat
In de praktijk produceren veel instrumenten al gauw meer dan tien boventonen en de optelling van losse sinussen zal dan ook aardig oplopen. Als je al deze frequenties met hun amplitude weet, kun je die natuurlijk ook weer in een grafiekje zetten. Bij ingewikkelde signalen werkt dat soms verhelderend. Grafiek 2.2 maakt duidelijk waarom een frequentiedomein nuttig kan zijn. Het frequentiedomein bevat de amplitudes van alle mogelijke frequenties. Het tijddomein laat in dit geval een ogenschijnlijk rommelig signaal zien, terwijl het frequentiedomein slechts zeven losse punten bevat. Beide grafieken bevatten echter exact dezelfde informatie, beide op een andere manier. De punten in het frequentiedomein zijn als volgt op te vatten: een coördinaat van (f;A) betekent hier dat een sinus een
periode heeft van met amplitude A. Het punt (3;0,7) staat dus voor de functie 0.7 ·sin 3 · 2 · met als continu signaal. Van alle losse punten zijn soortgelijke sinussen te maken en de som van al deze sinussen vormt het tijddomein. Zo is van een simpel frequentiedomein een relatief moeilijk uitziend tijddomein te maken en andersom.
0 2 4 6 8 10 12
-1.0
-0.5
0.0
0.5
1.0
0 2 4 6 8 10 12
-1.0
-0.5
0.0
0.5
1.0
0 2 4 6 8 10 12
-1.0
-0.5
0.0
0.5
1.0
0 2 4 6 8 10 12
-1.0
-0.5
0.0
0.5
1.0
. ·
. · . ·
Grafiek 2.1 Optelling van sinussen.
. · +
Am
plitu
deA
mpl
itude
Am
plitu
deA
mpl
itude
10
Grafiek 2.2 Een signaal in zijn tijddomein ziet er in dit geval behoorlijk rommelig uit. Het frequentiedomein is een stuk overzichtelijker daar het uit slechts een klein aantal puntjes bestaat. Beide bevatten echter precies dezelfde informatie over het signaal. Als alle zeven puntjes uit het frequentiedomein (de rechtergrafiek) worden geschreven als ·
· · en worden opgeteld (dus: · · · · · · · · · ) is het resultaat in het tijddomein .
In dit voorbeeld zijn voor het gemak alleen maar sinussen gebruikt. Je kunt er ook voor kiezen een cosinus te gebruiken, die een sinus is met een faseverschil. In de praktijk worden ze echter allebei tegelijk gebruikt en wordt een signaal dus voor de helft uit sinussen en voor de helft uit cosinussen opgebouwd. De reden hiervoor en het nut hiervan zullen later nog uitgebreid aan bod komen. In ieder geval is het dus meestal nodig twee frequentiedomeinen te tekenen: één voor de sinussen en één voor de cosinussen, die beide evenveel punten bevatten. Het totaal aantal punten in deze twee grafieken is weer . De puntjes omvatten alleen gehele getallen, zodat , dus 0,1,2,3, … . De
maximale waarde die ze kunnen hebben is aangezien daarna aliasing optreedt (zie §2.1). Als n
echter van 0 tot en met loopt, bevat elke grafiek 1 puntjes en dan zouden ze samen 2
1 2 punten bevatten. 2 is meer dan en dit hoort niet te kunnen. Het
frequentiedomein zou dan namelijk meer informatie bevatten dan het tijddomein, terwijl ze precies hetzelfde horen te zijn. De reden hiervoor is echter de volgende: de grafiek met de sinus bevat onder
andere de punten sin 0 · 2 · en sin 2 · sin · · . De sinus van 0 is 0, dus die valt
weg. De enige frequentie die dan nog te veel is, is sin · · . In grafiek 2.3 is echter te zien dat die door aliasing precies uitdooft. Dat komt omdat alle samples worden genomen op en alleen natuurlijke getallen omvat, dus ook . Bovendien hadden we al gesteld dat alleen maar een heel getal kon zijn. Het getal binnen de haakjes van de sinus is dus altijd een veelvoud van , en geeft dus nul.
Grafiek 2.3 Een tijddomein met N=6. De lijn stelt de functie · voor. Je kunt duidelijk aflezen dat telkens als er een sample wordt genomen, deze frequentie buiten de boot valt bij de registratie.
0 1 2 3 4 5 6 7 8
-1.0
-0.5
0.0
0.5
1.0
Am
plitu
de
0 10 20 30 40 50 600.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
Frequentie (Hz)
Am
plitu
de
0 1 2 3 4 5
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
Am
plitu
de
11
In paragraaf 1.1 is kort ter sprake gekomen dat hele hoge frequenties onmogelijk zijn waar te nemen in discrete tijd. Hoger dan de helft van de samplefrequentie worden ze immers niet meer herkend. De maximale frequentie van het frequentiedomein zal dus nooit hoger liggen dan de helft van het aantal signalen in het tijddomein. In grafieken wordt om die reden op de horizontale as van het frequentiedomein de relatieve frequentie gezet. Hiervoor geldt:
Waarbij geldt:
• die loopt van 0 tot en met .
• We kennen dus nu drie verschillende manieren om een signaal weer te geven:
• In het tijddomein als , met N samples waar de amplitude tegen de tijd wordt uitgezet;
• In het frequentiedomein genaamd (het frequentiedomein wordt met dakje op de letter aangeduid). Er zijn dan twee grafieken nodig: een voor de sinussen en een voor de cosinussen. Ze
bevatten allebei 1 punten, waarvan het eerste en het laatste punt bij de sinus sowieso zul zijn;
• In het relatieve frequentiedomein als . Deze is op alle punten hetzelfde als het normale frequentiedomein, met het verschil dat op de x‐as de relatieve frequentie staat, dus .
2.2 Van frequentiedomein naar tijddomein Uit een frequentiedomein is relatief gemakkelijk bijbehorend tijddomein samen te stellen. De wiskundige formule hiervoor luidt:
Formule 2.1 De wiskundige formule om van de punten in het frequentiedomein het tijddomein te maken. is de amplitude van een punt in het tijddomein. is een punt in het frequentiedomein die de amplitude van een bepaalde
frequentie aangeeft. Er is een cos en een sin omdat het frequentiedomein immers uit twee grafieken bestaat. k is een
waarde die van 0 tot en met loopt waarbij N het totaal aantal punten in het frequentiedomein is. (Smith, 1997)
Deze formule telt dus voor elk punt de waarde van alle sinussen en cosinussen op en vormt zo de amplitude. Zo kun je doorgaan tot en met puntje om een volledig signaal te krijgen. Maar je kunt ook doorgaan met 1 ; de formule verhindert dat niet. Je krijgt dan echter weer hetzelfde signaal opnieuw, zoals wordt aangetoond in de volgende berekening:
· ·
Grafiek 2.4 Het relatieve frequentiedomein van het signaal in grafiek 3.2.
0.0 0.1 0.2 0.3 0.4 0.50.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
Relatieve frequentie
Am
plitu
de
12
· ·
· ·
Als je het tijddomein construeert, zal het dus periodiek worden met periode .
2.3 Van het tijddomein naar het frequentiedomein Over het algemeen is het waarschijnlijker dat het nodig is een signaal in het tijddomein naar een frequentiedomein te verplaatsen. Als een signaal gemeten wordt, zal een computer immers alleen de amplitudes op verschillende tijdstippen kunnen waarnemen en niet meteen weten waaruit dat signaal is opgebouwd. Veel wiskundigen hebben er zich over gebogen hoe je signalen in een tijddomein in een frequentiedomein kunt weergeven en zijn tot de conclusie gekomen dat dit in de praktijk niet mogelijk is. Alhoewel, alleen niet voor een continu signaal. Bij bepaalde golven met hoeken (zoals bij blokgolven en zaagtandgolven) zou er een oneindige hoeveelheid sinussen voor nodig zijn om het signaal te benaderen en dat is voor een simpel computersysteem natuurlijk nooit haalbaar. Er is een troost: voor discrete signalen is het wel mogelijk een signaal precies weer te geven in een frequentiedomein. En dat is heel fijn, want het kan soms veel makkelijker zijn te werken in het frequentiedomein dan in het tijddomein. Als je bijvoorbeeld weet dat je speakers onder een bepaalde frequentie een lelijk geluid produceren, kun je ervoor kiezen die eruit te filteren. In gehoorapparaatjes moeten bepaalde frequenties in het menselijk gehoorspectrum juist versterkt worden. Ook hier heb je dus niets aan een tijddomein en des te meer aan een frequentiedomein. De redenering om bepaalde frequenties uit een signaal te distilleren gaat als volgt: als je naar een bepaald signaal zoekt, ga je er ook vanuit dat hij er min of meer meetbaar inzit. Stel, je wilt onderzoeken of je binnengekomen signaal bijvoorbeeld de frequentie ‘6 Hz’ bevat. Als hij er inderdaad significant inzit, verwacht je dat, als je die frequentie uitzet tegen de tijd en die over het signaal legt, beide tijddomeinen wel overeenkomsten vertonen. Op de plaats van de pieken bij de frequentie die je zoekt, zouden dus ook pieken moeten zitten in je signaal.
0 5 10 15 20 25 30
-1 0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
Am
plitu
de
0 5 10 15 20 25 30
-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
Am
plitu
de
0 5 10 15 20 25 30
-1.0
-0.8
-0.6
-0.4
-0.2
0.0
0.2
0.4
0.6
0.8
1.0
Am
plitu
de
Grafiek 2.5 Het groene signaal is het binnengekomen signaal dat het rode signaal maar ook storing bevat. Als je beide signalen over elkaar legt, is het rode signaal nog wel goed te herkennen.
13
Vervolgens vermenigvuldig je het signaal met de frequentie die je zoekt. Dat wil zeggen, elk punt van je signaal met het bijbehorende punt van de frequentie. Voor het gemak geef je de laatste amplitude 1. Als de pieken inderdaad tegelijk voorkomen, versterken die elkaar en geven een hoge uitkomst. Dat geldt voor de negatieve net zo goed als voor de positieve pieken, omdat een negatief getal vermenigvuldigd met zichzelf een positief getal geeft. Als je al die puntjes optelt, krijg je goede indicatie hoe de gezochte frequentie vertegenwoordigd is in het signaal. Bij een hoge waarde zijn blijkbaar veel (hoge) waardes opgeteld en daarom was de betreffende frequentie blijkbaar aanwezig. Bij een lage waarde hebben bepaalde punten elkaar blijkbaar uitgedoofd en was de frequentie er dus niet. De gemiddelde uitkomst per sample is de maat voor de waarde (dus amplitude) van een frequentie in het frequentiedomein. Als je deze bewerking voor alle frequenties uitvoert die binnen het tijddomein passen, stel je op die manier je frequentiedomein samen. De formule om twee reële frequentiegrafieken te krijgen uit een tijddomein wordt de ‘discrete reële Fouriertransformatie’ genoemd en ziet er als volgt uit:1
1· cos
2
1· sin
2
Formule 2.2 De reële discrete Fouriertransformatie als wiskundige vergelijking, die een signaal in het tijddomein omzet naar een frequentiedomein. cos is de amplitude van een frequntie k in het frequentiedomein voor de cosinus, waarbij
maximaal de helft van de samplefrequentie mag zijn. N is het aantal samples en n een waarde die van 0 tot en met
N‐1 loopt. Idem voor de sinus. Uit deze formule komt een absoluut frequentiedomein rollen. Voor een relatief frequentiedomein moet je op de x‐as alle ’s delen door N.
1 Voor de begrijpelijkheid is de reële discrete Fouriertransformatie opgesteld zoals hierboven. Voor de volledigheid kan echter niet nagelaten worden te zeggen dat deze formule niet helemaal correct is, al is hij voor de meeste berekeningen wel te hanteren. Om het tijddomein en het verkregen frequentiedomein werkelijk naadloos met elkaar overeen te laten komen, moet er nog een tussenstap worden genomen: het frequentiedomein moet met 2 vermenigvuldigd worden, zodat de formule komt te luiden:
2· cos
2
2· sin
2
Ook dit is nog niet het hele verhaal, aangezien verder voor 0 , geldt:
0 ∨ 21
· cos2
Al deze problemen worden veroorzaakt door het feit dat we met deze formule binnen het reële getallenstelsel blijven. Verderop, in hoofdstuk 5, zullen we ook imaginaire getallen erbij betrekken, waardoor het een stuk overzichtelijker wordt. (Smith S. W., 1997)
14
Grafiek 2.6 We vragen ons af of het signaal de frequentie bevat. Om daar achter te komen vermenigvuldigen
we deze met elkaar en tellen alle punten bij elkaar op dus ∑ · . Als we die vermenigvuldigen met (dus eigenlijk
gewoon het gemiddelde nemen) krijgen we de waarde van de frequentie c1 in het frequentiedomein. In dit geval is het gemiddelde die uit deze berekening komt rollen . . We accepteren dus ook de mogelijkheid van een ‘negatieve amplitude.’
De reële Fouriertransformatie is een tamelijk ingewikkelde bewerking, met een aantal onvolkomenheden. Wiskundig gezien is het dan ook niet de meest correcte, maar wel de meest begrijpelijke methode om mee te beginnen. Verderop zullen we wiskundig correcter met de stof omgaan.
2.4 De frequentierespons Het is fijn dat we nu een signaal in het frequentiedomein kunnen weergeven, want hiermee zullen we voortaan blijven werken. De voordelen van dit domein zijn al even aan bod gekomen. We gaan met deze kennis een filter proberen te maken. We zullen daarvoor een frequentierespons nodig hebben. Dat wil zeggen: een die voor elke frequentie bepaalt welke erdoor mag en welke niet. Het liefst hebben we een continue frequentierespons, aangezien hij dan op elk mogelijk binnenkomend signaal antwoord heeft. Als we een frequentierespons willen ontwerpen, moeten we bedenken wat de input en de output is of zou moeten
0 5 10 15 20 25 30 35 40
-1.0
-0.5
0.0
0.5
1.0
0 5 10 15 20 25 30 35 40
-1.0
-0.5
0.0
0.5
1.0
0 5 10 15 20 25 30 35 40
-1.0
-0.5
0.0
0.5
1.0
Grafiek 2.7 Het gemiddelde audiogram per leefijdsgroep voor mannen. (NVON‐commissie, 2004)
b. c1[ ]
c. x1[ ] · c1[ ]
a. x1[ ]
Am
plitu
deA
mpl
itude
Am
plitu
de
15
zijn. We nemen als voorbeeld een gehoorapparaatje voor ouderen. Grafiek 2.7 is een audiogram van het menselijke gehoorspectrum en zoals te zien horen ouderen niet alle frequenties even goed meer. Als we ons tot doel stellen dat een oudere zijn medemens moet kunnen verstaan, moet hij in ieder geval de frequenties van normale stemmen kunnen verstaan. Over het algemeen zijn stemmen niet lager dan 100 Hz en niet hoger dan 3 kHz. Alle frequenties die daarbuiten liggen, zijn niet interessant en kunnen alleen maar storen. Die willen we er dus uit filteren, opdat alleen de stemmen overblijven. Een nadeel hiervan is misschien dat enkele boventonen en dus klankkleur ook uit de stemmen verdwijnt, maar dat vinden we nu even minder belangrijk. De volgende stap is het uittekenen van de frequentierespons . Die geeft aan met welke waarde elke frequentie vermenigvuldigd moet worden. Waar in het tijddomein dus met geconvolueerd wordt, wordt in het frequentiedomein met vermenigvuldigd. Dat is een veel makkelijkere bewerking en ook veel sneller voor een computer. In het ideale geval zou er hier zo uitzien:
Helaas lukt het niet goed een continue frequentierespons te maken die er zo uitziet in een lineair filter. Die moet namelijk per definitie de vorm hebben van:
Dat betekent dat we onze moeten omrekenen naar de impulsrespons . Dat kan door middel van formule 2.1: die is namelijk even goed geldig voor een signaal in het frequentiedomein als voor een frequentierespons. Het probleem zit hem er echter in dat, in het geval van een minimale samplefrequentie van 6000 Hz, de impulsrespons tot minimaal 3000 punten moet gaan om een adequate respons te bereiken, aangezien de frequentierespons in ieder geval tot 3000 Hz moet gaan. Dat betekent dus op zijn minst een a0 tot en met a2999 waarmee vervolgens een signaal geconvolueerd moet worden. Dat gaat heel erg veel rekentijd in beslag nemen en dat is allerminst bevorderlijk voor de snelheid van het apparaatje.
3 Recursieve filters
3.1 Oneindige impulsrespons In het vorige hoofdstuk is aan bod gekomen hoe je frequenties uit een signaal kunt filteren. Dit kan met behulp van een lineair filter. Het is echter gebleken dat daar een hele ingewikkelde impulsrespons voor nodig is en dat is natuurlijk niet fijn. Dit kost heel veel geheugen en rekentijd en vermijden we dus liever. Maar waarom zou je eigenlijk zover kijken als je ook maar één stapje terug kunt kijken. Je kunt immers ook kijken naar de vorige output:
1 Hierin zit immers ook een deel van de vorige input:
1 2 Waarin overigens ook de input van twee samples geleden zit:
1 2 3
Grafiek 2.8 De ideale frequentierespons voor een gehoorapparaatje zou er zo
uitzien. Het menselijke vocale spectrum wordt versterkt, terwijl alle andere frequenties worden uitgedoofd.
10 100 30001000 5000 100000.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
Frequentie (Hz)
h[k]
16
0 5 10 15 20 25 30
-10
-5
0
5
10
Sample
Am
plitu
de
Dit kun je natuurlijk zo ver uitschrijven als je maar wilt. Daarom wordt dit ‘oneindige impulsrespons’ genoemd. Daar tegenover staat de ‘eindige impulsrespons,’ die hoort bij het lineair filter. Filters die behalve de input ook de output gebruiken heten ‘recursieve filters.’ Het grote voordeel van recursieve filters is dus dat ze de input van heel ver terug nog in hun achterhoofd kunnen houden. Ze hebben echter ook een nadeel: ze kunnen instabiel worden. Dat betekent dat ze ongewenst ineens kunnen doorschieten en een heel hoog signaal als output kunnen geven terwijl dat helemaal niet de bedoeling is. Dat risico loop je als je | | 1 kiest. Grafiek 3.1a t/m e laten zien wat er kan gebeuren met verschillende b’s. Steeds komt er op 5 een impuls van 1 binnen.
Over het algemeen kies je bij een recursief filter voor de b’tjes dus waarden tussen de 1 en 1. Het is wel mogelijk om waarden daarbuiten te kiezen, maar dan moet je goed oppassen en eventuele instabiliteit compenseren met bepaalde waarden van de a’tjes of andere b’tjes.
3.2 Impulsrespons vaststellen De enige moeilijkheid is nu het samenstellen van , oftewel van de a’tjes en de b’tjes. Een impulsrespons zoals bij een lineair filter is in ieder geval met geen mogelijkheid te maken, omdat die oneindig lang is. Bovendien hangt de respons nu ook van de invoer af. Het is natuurlijk een mogelijkheid om heel veel frequenties af te gaan en kijken hoe het filter daarop reageert. Dat kan heel goed tot een oplossing leiden, maar het is niet erg efficiënt en allerminst exact. Om een adequate impulsrespons te creëren die niet teveel rekentijd in beslag neemt, zullen we ons aan wat meer en vooral complexere wiskunde moeten wagen.
4 Complexe filters
De complexe Fouriertransformatie1 Tot nu toe zijn de oplossingen bij alle problemen binnen het normale getallenstelsel gebleven. De uitkomsten van de formules zijn begrijpelijke getallen geweest die in ons normale denkraam passen. Soms moeten sommige dingen echter iets moeilijker gemaakt worden om tot een makkelijkere oplossing te komen. Zo wordt het in de wiskunde over het algemeen als ‘makkelijk’ beschouwd als je iets in één formule kunt vertellen in plaats van twee. De omrekening van het tijddomein naar het frequentiedomein (§2.3) zou dus liever gevangen worden in één formule, met als uitkomst één
1 Vanaf hier wordt gebruik gemaakt van complexe getallen en wordt de informatie uit appendix A over complexe getallen gebruikt.
0 5 10 15 20 25 30
-10
-5
0
5
10
Sample
Am
plitu
de
0 5 10 15 20 25 30
-10
-5
0
5
10
Sample
Am
plitu
de
0 5 10 15 20 25 30
-10
-5
0
5
10
Sample
Am
plitu
de
0 5 10 15 20 25 30
-10
-5
0
5
10
Sample
Am
plitu
de
b. 1.1 c. 1 a. 1.1
e. 0.9d. 0.9 Grafiek 3.1 Impulsresponsen met verschillende waarden voor . Allen krijgen ze op een impuls van , maar ze reageren allemaal
verschillend.
17
grafiek. De formule wordt daardoor wel aardig complex. In Appendix A staat kort de complexe materie uitgelegd waarvan gebruik gemaakt wordt. We kiezen ervoor de helft van het signaal in het frequentiedomein, namelijk alle sinussen, te vermenigvuldigen met de wortel van 1, ‘ .’ De sinussen uit het frequentiedomein worden dan als volgt berekend:
· ·
Het ’tje heeft hier niet echt een betekenis. Op de y‐as staat nu , 2 , 3 … in plaats van 1, 2, 3… We kunnen nu echter wel en zonder problemen bij elkaar optellen in één formule, zonder dat ze elkaar in de weg gaan staan. Of eigenlijk, al is dat meer een definitiekwestie, trekken we ze van elkaar af omdat dat in de praktijk soms handiger blijkt uit te pakken. De som van een reëel getal en een complex is immers niet te vereenvoudigen. Je krijgt dan ook
· Dit lijkt een beetje gekunstelde formule, tot we hem gaan omschrijven.
·
· ·
Volgens de formule van Euler, cos sin , is dit ook te schrijven als:
·
Formule 4.1 De complexe Fouriertransformatie. Van het tijddomein kan zo een punt in het frequentiedomein berekend worden, die de amplitude van de sinus én de cosinus bevat. mag maximaal de helft van het aantal punten in het tijddomein zijn. is een index die loopt van 0 tot en met .
Deze formule wordt de ‘complexe Fouriertransformatie’ genoemd en is natuurlijk de grote broer van de reële discrete Fouriertransformatie. Het enige nare is dat het complexe deel in werkelijkheid natuurlijk niet complex is en dit deel dus eerst door gedeeld moet worden, wil er iets staan met reële betekenis. De omrekening van een signaal in het frequentiedomein is nu ook opeens een stuk makkelijker te schrijven dan in §2.2.
·
Formule 4.2 De inverse complexe Fouriertransformatie, die wordt gebruikt om een signaal in het frequentiedomein om te schrijven naar eensignaal in het tijddomein.
Het grote verschil met de eerdere formule is dat de index hier loopt van 0 tot en met 1. De rest is gewoon het resultaat van een handigere manier van het omschrijven van de sinussen en cosinussen. Als het enige doel van beide formules het korter schrijven zou zijn, zouden we niet zo veel moeite hebben gedaan. Deze formule is echter de basis van veel berekeningen om daadwerkelijk impulsresponsen vast te stellen, ook voor recursieve filters.
4.1 Ztransformatie De complexe Fouriertransformatie is een handig opstapje naar het bepalen van de coëfficiënten van de recursieve filter. Hiervoor moeten we deze transformatie echter een beetje aanpassen.
18
Bij het berekenen van één , dus één puntje in het frequentiedomein, is een aantal dingen vast
te stellen. De is hier een constante waarmee vermenigvuldigd wordt. Daarbij symboliseert ·
zelf een complex getal op de eenheidscirkel. Het is immers van de vorm · waarbij 1. Gegeven een tijddomein liggen 2 , , , en gewoon vast, zodat als enige variabele overblijft. Op het moment dat van 0 tot en met 1 gaat lopen, geeft het eigenlijk steeds de hoek aan die per stapje bewandeld wordt over een cirkel. Voor het schrijfgemak definiëren we de ‘z‐transformatie’ daarom als volgt:
Als je aanneemt dat dit een andere manier is van het opschrijven van de Fouriertransformatie, moet
hierbij gelden: · Formule 4.3 De z‐transformatie is eigenlijk een andere manier van opschrijven van de complexe Fouriertransformatie en levert dus ook een representatie in het frequentiedomein op.Om het verschil aan te geven, wordt dit echter niet meer
genoemd, maar .
Het werkelijke verschil zit hem erin de 1N weg te laten. Dit was een constante die we voor de rest van de berekeningen liever kwijt dan rijk zijn en het blijkt uit de praktijk dat het niet nodig is hem verder nog te laten staan. (Smith S. W., 1997) De grafische voorstelling van een dergelijke transformatie is moeilijk, aangezien je er vier dimensies voor nodig hebt: twee voor en twee voor de eveneens complexe uitkomst. Om het toch zichtbaar te maken volgt hier een voorbeeld. De is hier eigenlijk heel goed op te vatten als de relatieve frequentie, die niet lineair van 0 tot 0,5 loopt, maar over de complexe eenheidscirkel van ( 1) tot . We mogen kiezen op de eenheidscirkel, aangezien 1. De maximumfrequentie ligt vervolgens altijd op ; de onderste helft van de eenheidscirkel gebruiken we hierbij verder niet actief.
Grafiek 4.1 In deze grafieken wordt een voorstelling gegeven van de betekenis van de z‐domein. Links staat de eenheidscirkel in het complexe vlak met daarop twee waarden gekozen voor . Tegelijkertijd dragen deze beide complexe getallenen een waarde (eigenlijk zelfs twee) bij zich voor de amplitude, die staan weergegeven in het relatieve frequentiedomein. Je kunt gerust zeggen dat als over de eenheidscirkel wandelt van tot , hij tegelijkertijd óók door het relatieve frequentiedomein wandelt van tot , . De onderste helft van de eenheidscirkel wordt hier niet gebruikt.
Stel we kiezen onder een hoek van zoals aangegeven grafiek 4.1. Deze symboliseert dus de
sterkte van een bepaalde frequentie, namelijk een vierde van de maximumfrequentie, wat die ook wezen moge. Vervolgens heeft dit punt een bepaalde waarde: de amplitude van de betreffende frequentie. Of eigenlijk natuurlijk twee: die van de cosinus én de sinus van die frequentie. Voor het gemak nemen we die echter samen, aangezien we de frequenties zelf een stuk interessanter vinden. Later komt nog aan bod hoe we dat precies doen.
-1.0 0.0 1.0
-i
0
i
z1z2
0.0 0.1 0.2 0.3 0.4 0.50.0
0.2
0.4
0.6
0.8
1.0
Relatieve frequentie
Am
plitu
de14
19
Op dezelfde manier als de input naar het z‐domein getransformeerd kan worden, kan de output dat ook. Het enige wat je daarvoor hoeft te doen is de in een te veranderen.
Dat biedt interessante mogelijkheden om de impulsrespons vast te stellen voor een recursieve filter. Deze zag er als volgt uit:
1 1 2 Dit mogen we in zijn geheel door de z‐transformatie heen halen, zodat we krijgen:
· · ·
Volgens de rekenregels die er voor de z‐transformatie gelden (Smith J. O., 2007) geldt:
· ·
Daaruit volgt dus ook:
· 1 · · ·
Voor de eerder genoemde formule geldt vervolgens:
· · · ·
Oftewel:
Diverse termen buiten haakjes halen geeft:
Met meerdere coëfficiënten, bijvoorbeeld 3 a´s en 2 b’s, werkt het evengoed en zou het er zo uit komen te zien:
Deze verhouding tussen invoer en uitvoer is van een geweldig belang. Het is namelijk het signaal in het frequentiedomein van de uitvoer gedeeld door dat in het frequentiedomein van de invoer. Het verschil tussen de sinussen en cosinussen is er nog steeds, maar vinden we vanaf hier eigenlijk minder interessant. Het gaat ons namelijk vooral om de frequentie en dan maakt het kleine (fase)verschil tussen een sinus en cosinus niet zo veel meer uit. We moeten toch een manier hebben om die bij elkaar te nemen. Uit de praktijk blijkt dat het niet handig werkt om zomaar het
20
gemiddelde van de sinus en cosinus te nemen; in plaats daarvan moeten we een nieuwe grootheid invoeren: de magnitude. Die is als volgt gedefinieerd:
| | Formule 4.4 De definitie van de magnitude. Binnen het reële frequentiedomein is de magnitude te berekenen met de genoemde formule. In het complexe vlak is dit gewoon de modulus (absolute waarde) van een punt in het complexe vlak.
Per frequentie krijgen we dus een verhouding tussen de invoer en de uitvoer. Als die bijvoorbeeld 1 is, zijn beide gelijk. Als hij 2 is, is die bepaalde frequentie dus twee keer zo sterk vertegenwoordigd in de uitvoer als in de invoer. Met de z‐transformatie hebben we dus eigenlijk een hele frequentierespons samengesteld! Het grote voordeel zit hem hierin: het enige dat je hoeft te doen om de frequentierespons te berekenen is delen. Vergelijk dat met de relatief erg ingewikkelde bewerking van convolutie die nodig was in het tijddomein, dan zie je dat deze manier een stuk eenvoudiger is en dus minder rekentijd kost voor de computer. Zoals het blokschema voor de impulsrespons gold (zie §2.2), zo kunnen we die ook voor het frequentiedomein opstellen:
Hierbij geldt .
4.2 Ztransformatie in impulsrespons Het enige wat er nu gedaan moet worden is de a`tjes en b`tjes vaststellen. Dat ziet er misschien nog steeds als een heel moeilijke klus uit, maar is heel goed begrijpelijk te maken. De frequentierespons bestaat eigenlijk uit twee polynomen: die boven de deelstreep en die eronder. De respons is daarom ook te schrijven te schrijven als:
…… waarbij ,
Formule 4.5 De formule voor de frequentierespons. De ’en en ’s zijn (complexe) getallen die je zelf mag kiezen.
Als het gedeelte boven de deelstreep 0 wordt voor een bepaalde , is er voor die de uitkomst van de gehele breuk 0. De uitvoer dus ook, en daarmee de frequentierespons bij een bepaalde frequentie. Dat gebeurt dus door een zo te kiezen dat hij op de eenheidscirkel ligt, zodat des te dichter (die alle relatieve frequenties symboliseert) bij komt, des te kleiner het getal en dus de invoer‐uitvoerverhouding wordt. Voor de geldt hetzelfde, behalve dat de frequentie dicht bij een juist heel erg hoog wordt. Enkele voorbeelden staan in grafiek 2. De ’en worden over het algemeen ‘nulpunten’ genoemd en in tekeningen aangegeven met rondjes. De ’s worden polen genoemd en worden weergegeven met een kruisje. Vaak worden ze gekozen als complexe getallen.
5 Polen en nulpunten
5.1 Het plotten van een frequentierespons Het is natuurlijk belangrijk dat je kunt zien wat er met een signaal gebeurt als je polen en nulpunten op bepaalde plaatsen gaat neerzetten. Ons eerste deel eigen onderzoek bestond uit het zichtbaar maken van het invullen van verschillende polen en nulpunten. We hebben een programma geschreven dat bij het invoeren van polen en nulpunten de frequentierespons uitrekent en ook daadwerkelijk tekent in een grafiek. Dat verduidelijkt het effect van het plaatsen van polen en nulpunten, zodat de rest van het onderzoek makkelijker uitviel. Het programma is uit te voeren in Scilab en staat in Bijlage 1.
21
Grafiek 5.1 Diverse voorbeelden van het het plaatsen van polen en nulpunten rond de eenheidcirkel. De rechtergrafiek is de frequentierespons die hoort bij de eenheidscirkel in de linkergrafiek en is gemaakt met behulp van ons programma.
-1.0 0 1.0
-i
0
i
Magnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
0.0
0.2
0.4
0.6
0.8
1.0
1.2
-1.0 0 1.0
-i
0
i
Magnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
0.0
0.5
1.0
1.5
2.0
2.5
3.0
-1.0 0 1.0
-i
0
i
Magnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
1
2
3
4
5
6
7
-1.0 0 1.0
-i
0
i
Magnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
0
2
4
6
8
10
12
14
5.2 aI
5.2 dI
5.2 cI
5.2 bI
5.2 aII
5.2 bII
5.2 cII
5.2 dII
Relatieve frequentie
Relatieve frequentie
Relatieve frequentie
Relatieve frequentie
Mag
nitu
dere
spon
sM
agni
tude
resp
ons
Mag
nitu
dere
spon
sM
agni
tude
resp
ons
22
5.2 Het berekenen van de impulsrespons (voorbeeld) Door het rond de eenheidscirkel plaatsen van de polen en nulpunten is ongeveer te bekijken hoe de frequentierespons eruit zal zien. Aangezien een computer hier echter niet snel mee kan werken, moeten we dit uitdrukken in de vorm van a’s en b’s. Dat doe je door de getallen van de polen in je formule 5.4 in te vullen. We nemen het voorbeeld van grafiek 5.2d. Deze kent:
12 2√
3 1
134
25√
225 √
2 Die vullen we in de formule in:
12 2√3 1
1 34
25√2
25 √2
12 2√3 ·
12 2√3
34 · 2
5√2 ·25√2
310√2
25 √2 ·
25 √2
310√2
12 2√3
12 2√3
1 25√2
34
25 √2
110√2
710√2
Dit is precies van de vorm:
Waarbij geldt: 1 12 2√
3 12 2√
3
125√
234
25 √
2 110√
2710√
2
5.3 Het berekenen van de reële impulsrespons (voorbeeld) Het enige probleem bij de zojuist berekende impulsrespons is dat we nu een complexe impulsrespons hebben. Onze invoer worden hier en daar opeens met complexe getallen vermenigvuldigd en dat kan niet goed gaan. Een speaker kan immers niets met een imaginair getal als uitvoer. We moeten dus iets verzinnen om het uiteindelijke resultaat reëel te houden, zonder dat de frequentierespons daaronder lijdt. Daarvoor hebben we de onderste helft van de eenheidscirkel. Die wordt nu niet gebruikt, maar niets verhindert ons er toch nulpunten en polen te plaatsen. We moeten dus getallen vinden die precies het complexe gedeelte van de a´tjes en b´tjes opheft, maar niets aan de frequentierespons verandert. Het enige getal dat hiertoe in staat is, is de complex geconjugeerde van elke pool of nulpunt. Voor elk getal is zijn geconjugeerde. Voor elke , zetten we in de eenheidscirkel ook een . Idem voor de . Het resultaat staat in grafiek 5.3.
23
√3 12 2√
3 1
Let op: er is geen nodig, aangezien al reëel is.
134
134
25√
225 √
2 25√
225 √
2
Vervolgens stoppen we al deze ’s en ’en in de formule en kijken wat eruit rolt:
12 2√3
12 2√3 1
1 34 1 3
425√2
25 √2
25√2
25 √2
1 1
2 2516
45√2 ·
1625
1
2 45√2 ·
881400
85√2 ·
54√2 ·
3225 1
1
2 45√2 · 8
5√2881400
54√2
3225 1
Dit is een iets grotere polynoom, van de vorm:
Met daarin: 1 0 0 1
245√
2 1.71716 85√
2881400
0.06024 54√
23225
0.48777 1
De impulsrespons die de frequentierespons geeft als in grafiek 5.2dII is dus: 3 1.71716 · 1 0.06024 · 2 0.48777 · 3 4
-1.0 0.0 1.0
-i
0
i
Grafiek 5.2 Dezelfde grafiek als in 5.1dI, maar nu ook met de complex geconjugeerde van elk getal. Deze opstelling heeft dus wel dezelfde frequentierespons van 5.1II.
24
-1 0 1
-i
0
i
6 Aqualizer
6.1 Eigen filter: de Aqualizer Ons doel was het maken van een combinatie tussen een parametrisch filter, een low/high‐pass filter en een equalizer, allemaal gebaseerd op het principe van een peaking filter. Dat is een groot aantal termen, die we dan ook allemaal afzonderlijk zullen uitleggen.
6.1.1 Peaking filter Ons hele filter is gebaseerd op het principe van een peaking filter. Dat is een eenvoudig soort filter dat relatief weinig rekentijd voor de computer vergt maar over het algemeen wel een adequate respons geeft. Bij dit filter moeten op zijn minst drie dingen ingesteld kunnen worden: de bandbreedte, de piek en de (relatieve) frequentie. De bandbreedte is het gebied van frequenties dat de frequentiespons beslaat, de piek de sterkte waarmee hij deze frequenties vervormt. Zie grafiek 6.1.
De hoogte van een piek of dal op een bepaald frequentiegebied is equivalent aan de mate waarmee dat frequentiegebied versterkt of verzwakt wordt. De piek en de bandbreedte worden bepaald door de polen en nulpunten. Bij het makkelijkste soort peaking filter wordt die bepaald door het plaatsen van één pool en één nulpunt rond de eenheidscirkel. De plaats van de pool ten opzichte van de eenheidscirkel is vooral bepalend voor de bandbreedte. Die afstand wordt dan ook genoemd. De afstand tussen de pool en het nulpunt is de bepalende factor voor de hoogte van de piek. Dat is goed duidelijk te maken met ons programmaatje uit Bijlage 1. Deze piek wordt dus uitgedrukt in . Beide
variabelen zijn niet een exacte maat voor de piek en de bandbreedte maar geven een zeer goede indicatie. Proefondervindelijk zijn we er zelf achter gekomen dat dit een heel goede manier is om het uit te drukken als volgt:
We kiezen als pool:
Met als geconjugeerde:
En als nulpunten:
Waarbij de hoogte van de piek is en de bandbreedte in het relatieve frequentiedomein. Wordt nu de verhouding van de afstand pool‐oorsprong/nulpunt‐oorsprong groter, dan wordt de piek hoger. Wordt de afstand van de pool tot de eenheidscirkel kleiner, dan wordt de band smaller. Om het effect van het instellen van
Magnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
Relatieve frequentie
Mag
nitu
dere
spon
s
Grafiek 6.1 De frequentierespons van een peaking filter. De bandbreedte is het gebied van frequenties dat de frequentiespons beslaat, de piek de sterkte waarmee hij deze frequenties vervormt.
25
verschillende bandbreedtes en pieken zichtbaar te maken, hebben we nog een programmaatje geschreven. Hierin zijn , en instelbaar en plot het programma vervolgens de frequentierespons. Het programma is geschreven voor Scilab en staat in Bijlage 2. Een peaking filter heeft vaak meerdere banden die allemaal bepaalde frequentiegebiedjes beslaan, zodat de respons voor meerdere frequenties afzonderlijk in te stellen is. In grafiek 6.2 staat een voorbeeld van de frequentierespons van een peaking filter. Dat zijn er dus meerdere: voor elk gebiedje één. Al heeft elke band zijn eigen frequentiegebied waarin het een piek of een dal kan vertonen, het is onvermijdelijk dat ze elkaar voor een deel overlappen. Bovendien geldt natuurlijk dat hoe meer banden je hebt, hoe hoger de precisie is van het gebiedje van frequenties dat je aanspreekt. Bij een peaking filter moeten alle banden met elkaar in serie geschakeld worden. Dat wil zeggen dat iedere frequentieband zijn eigen respons uitvoert op het signaal en dat vervolgens doorgeeft aan zijn buurman, die daarop de volgende respons uitvoert. Als het signaal alle banden heeft doolopen is dat de uitvoer die naar de speakers gaat. De uitvoer die elke band op zich echter gebruikt, de , is die van zichzelf, niet de totale. Elke band is dus eigenlijk een filtertje op zich, die deel uitmaakt van een groter filtercomplex. In schema 6.1 staat dit schematisch weergegeven.
Het aantal banden kan in theorie alles zijn. Wat wij echter proberen is iets bijzonders: we maken het aantal banden instelbaar. Je kunt dus twee banden gebruiken, maar ook vijf, tien of twintig. In de praktijk is het niet handig om al te veel schuifjes te hebben, dus wij nemen een maximum van 32 verschillende banden.
6.1.2 Lowpass/highpass filter Een low‐pass filter is een soort filter, dat alleen lage frequenties doorlaat. Een high‐pass filter doet hetzelfde voor de hoge frequenties. De frequentie van waaraf je wilt dat er niets meer doorgelaten wordt, wordt de cutoff‐frequentie genoemd en is vaak instelbaar.
De manier om met ons peaking filter het effect van een low‐pass filter te bereiken, is een laag aantal banden kiezen met een brede bandbreedte. Als je bijvoorbeeld twee banden hebt, een voor de hoge frequenties en een voor de lage, heb je eigenlijk al een instelbaar high‐pass filter en low‐pass filter in één. Om het mogelijk te maken de cutoff‐frequentie te bepalen, zorgen we dat de bandbreedte
MagnitudeMagnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
0
2
4
6
8
10
12
14
16
18
Magnitude0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50
0
2
4
6
8
10
12
14
16
18
Grafiek 6.3 Een low‐pass filter en een high‐pass filter laten respectievelijk de lage en de hoge frequenties door. Het punt waar de frequentiewaarderespons snel kleiner begint te worden, heet de ‘cutoff‐frequentie.’ Bij veel filters is deze instelbaar.
‐
0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.500.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
1.6
1.8
2.0
Grafiek 6.2 Grafiek 6.2 De frequentierespons van een peaking filter met zes verschillende banden. Over het algemeen is de respons van elke band los instelbaar.
] Filter 1 Filter 2 Filter ] …
Schema 6.1 Schematische weergave van een peaking filter. Elk filter werkt op zichzelf, maar maakt deel uit van een groter filter, dat de uiteindelijke bepaalt.
Mag
nitu
dere
spon
s
Relatieve frequentie
Mag
nitu
dere
spon
s
Mag
nitu
dere
spon
s
Relatieve frequentie Relatieve frequentie
26
instelbaar is. Als je de bandbreedte van de lage frequenties kleiner maakt, komt dat immers op hetzelfde neer als het veranderen van de cutoff‐frequentie. Om een hogere precisie samen te stellen kun je ook kiezen voor drie of vier banden, waarvan je van elk ook weer de bandbreedte en piek kunt aanpassen. Zo kun je dus zelf een low‐pass of high‐pass filter samenstellen met de nauwkeurigheid die je zelf wilt.
6.1.3 Parametrisch filter Een parametrisch filter is een filter waarbij je zelf nauwkeurig de frequentiebanden kunt samenstellen met bijbehorende bandbreedte en piek. Meestal kun je dus precies het aantal Hertz instellen waarop je de frequentiebanden wilt afstemmen. In ons filter zijn deze frequentiebanden instelbaar, dus is dit ook mogelijk.
6.1.4 Equalizer Een equalizer is een filter, dat een hoop verschillende vaste frequentiebanden heeft die hij kan manipuleren. De meest gebruikte vormen zijn 10 bands, 15 bands en 31 bands equalizers. Over het algemeen staan de banden op logische toonafstanden, zoals kwinten of tertsen. Ons filter is gemakkelijk zo in te stellen dat hij als equalizer fungeert. Hij kan zelf uitrekenen welke frequentie bij welke band moet als je een aantal banden instelt. Het voordeel is dat je dus ook zou kunnen zeggen dat je 20 banden wilt, als je dat op het moment goed uitkomt. Je kunt dus helemaal zelf vrijelijk de gewenste resolutie bepalen.
6.2 Vereisten filter Er zijn veel variabelen en constantes die nodig zijn bij de berekeningen die ons filter uitvoert. Sommige staan altijd vast, sommige zijn aan het begin van het programma in te stellen en sommige zijn real‐time te wijzigen. Hier staan ze allemaal op een rijtje met de wiskundige naam die we in vergelijkingen kunnen gebruiken:
• Het aantal verschillende banden ; • De hoogte van de piek of het dal van een specifieke frequentieband, ; • De bandbreedte ; • De piekfrequentie per band . Met een aantal banden is er ook een aantal
piekfrequenties nodig; • Het volume van het geluid . • De laagste piekfrequentie die gebruikt wordt, . Deze is instelbaar, maar een logische
keus ervoor is de laagst hoorbare frequentie: 20 Hz; • De hoogste piekfrequentie die gebruikt wordt, . Ook deze is instelbaar, maar het
maximum is 20000 (dus de helft van de samplefrequentie min een beetje);
Figuur 6.1 Het ontwerp van onze equalizer, Aqualizer genaamd omdat hij blauw is. De blauwe schuiven zijn de actieve schuiven, de zwarte de inactieve. Hier is dus 31. De draaiknopjes onder de schuiven zijn om de bandbreedte in te stellen. De schuif helemaal rechts is de gain‐knop (volumeknop).
27
• De samplerate (aantal geregistreerde samples per seconde) : 44100; De dingen die het filter zelf vervolgens moet kunnen uitrekenen zijn:
• De piekfrequentie van elke band (die wordt in een venster zichtbaar zodra , en zijn vastgesteld). Met een aantal banden is er ook een aantal piekfrequenties nodig;
• De coëfficiënten van de elke band van het filter, in ons geval 5 in getal: , , , en . Merk op dat er twee keer instaat. Dat komt omdat deze in de eerste instantie uitgerekend wordt als je het programma als equalizer wilt gebruiken, maar ook instelbaar moet zijn in het geval dat je een parametrisch filter wilt hebben.
6.2.1 Het aantal verschillende banden ( ) We willen de mogelijkheid hebben het aantal frequentiebanden in te stellen. Dat kunnen er twee zijn, of twintig, of in theorie zelfs tweehonderd. In de praktijk is het maximum aantal banden meestal echter 31. Ook 10 en 15 banden zijn veelgebruikte standaards. Voor de bijbehorende frequenties die de banden beslaan, bestaan standaardinstellingen. Het voordeel van een instelbaar aantal banden is dat je zelf kunt bepalen hoe belangrijk je de precisie vindt. Als je graag een hoge resolutie hebt, kun je een hoog aantal nemen, maar dit kost meer geheugen in je computer. Voor veel onervaren gebruikers is een klein aantal banden echter al voldoende. De mogelijkheid het aantal banden in te stellen, brengt ook de mogelijkheid met zich mee het filter te stemmen. De minimumfrequentie is 20 Hz, de maximumfrequentie 22050 Hz. Je kunt echter kiezen of je daartussen in bijvoorbeeld tertsen (hoge resolutie), kwinten (middelmatige resolutie) of octaven (lage resolutie) omhoog wilt. Wij kiezen het maximum aantal banden op 32, omdat je dat het aantal is dat je nodig hebt om in tertsen van 20 Hz naar 22050 Hz te komen. Dus:
6.2.2 Piekfrequentie ( ) Bij elke band hoort een centrale frequentie. Een standaardinstelling voor een eenendertigbands equalizer in Hertz is bijvoorbeeld:
20, 25, 31.5, 40, 50, 63, 80, 100, 125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000, 12500, 16000, 20000.
Aangezien wij echter variabel aantal banden hebben, hebben we ook een variabel aantal piekfrequenties met variabele waarden. Die moeten dus telkens berekend worden. De moeilijkheid van het uitrekenen van de verschillende banden zit hem in het feit dat een toonschaal logaritmisch is. Het laagste octaaf beslaat bijvoorbeeld slechts 20 Hz (van 20 Hz tot 40 Hz) terwijl het hoogste octaaf 10000 Hz beslaat (van 10000 naar 20000). Het verband tussen het aantal banden en de piekfrequentie rekent de computer als volgt uit:
· ,
Waarin het nummer van de band is en dus even groot of kleiner is als het aantal banden . Bij het opstarten van het programma wordt in principe gebruik gemaakt van 20 Hz en
20000 Hz. Als je echter een kleiner bereik wilt hebben, kun je deze instellingen wijzigen. Nadat het aantal banden ( ) is ingesteld, rekent het programma zelf alle piekfrequenties uit en vult ze in het vakje onder de schuifjes in. Als je de standaardinstelling wilt wijzigen, vul je de gewenste minimum‐ en maximumfrequentie in en drukt op de ‘Go’‐knop. Alle piekfrequenties worden dan automatisch uitgerekend. Als je dan nog veranderingen wilt aanbrengen omdat je – om wat voor reden dan ook – een andere verdeling van je banden wilt, dan kun je elke
Figuur 6.2 De Go‐knop
28
afzonderlijke piekfrequentie nog eens aanpassen. Bovendien hebben we, voor de technici, nog een aantal standaardinstellingen gemaakt. Er zijn drie standaardmodellen voor equalizers, die we ook willen aanbieden. Verder leek het ons handig om banden te maken die muziektheoretisch gezien logisch overkomen. We hebben bijvoorbeeld banden gemaakt, die steeds precies elk octaaf, elke kwint of elke kwart hun piekfrequenties hebben. In Bijlage 3 staat een lijst met alle mogelijke vooringestelde piekfrequenties. Recht evenredig met de piekfrequentie, is de hoek die je over de eenheidscirkel moet lopen voor een bepaalde frequentie. De computer moet deze hoek weten om de impulsrespons voor elke frequentie uit te rekenen. Het verband tussen de hoek en de piekfrequentie ziet er als volgt uit:
·
,
De hoek wordt dus bepaald door de piekfrequentie en ligt bij elke band afzonderlijk vast.
6.2.3 De frequentierespons Door de in te vullen kan vervolgens de impulsrespons berekend worden. Die is onmisbaar, aangezien we niet tijdens het filteren willen hoeven knutselen met eenheidscirkeltjes en polen. Invullen gaat op dezelfde manier als in het voorbeeld van §5.3 en §5.4. We gebruiken hier de waarden die ter sprake zijn gekomen bij de uitleg van de peaking filter in §6.1.1.
· ·
· ·
·
·· ·· ·
Dit is van de vorm:
Waarbij geldt:
Dit zijn dus de coëfficiënten die altijd gelden als we de polen en nulpunten kiezen op de manier van §6.1.1. Het nut hiervan is dat we dus nu schuifknopjes kunnen ontwerpen die direct in verband staan met de ’s en ’s. Dat werkt een stuk gemakkelijker en sneller voor de computer. De sterkte van een bepaalde band kunnen we linken aan de en de bandbreedte aan de . De schaalverdelingen van beide parameters moeten we proefondervindelijk vaststellen.
6.2.4 Het volume ( ) De volumeknop is de makkelijkste van alle knoppen. Het duidt een waarde aan waarmee het uitvoersignaal vermenigvuldigd wordt, nadat het alle frequentiebanden heeft doorlopen. Bij een
29
waarde van 2 wordt het geleverde vermogen twee keer zo groot. Dat betekent niet dat het aantal decibel ook twee keer zoveel wordt! De schaalverdeling van het aantal decibel is logaritmisch. In de praktijk komt het erop neer dat bij elke verdubbeling van het geleverde vermogen het aantal decibel met 3 toeneemt. Het volume wordt in de geluidsindustrie ook wel ‘gain’ genoemd.
6.2.5 Link bandwidth Ons filter bevat nog een extra knop. Deze staat in relatie met de bandbreedtes van elke frequentie. Soms is het nuttig om één bepaalde bandbreedte te verstellen,
bijvoorbeeld als je weet dat één bepaalde frequentie rondzingen veroorzaakt (de harde piep van een microfoon). De bandbreedte van die frequentie kies je dan waarschijnlijk heel smal. De rest van je banden wil je echter wel graag op een fatsoenlijke breedte hebben staan. Daarom is het fijn als je de breedte van elke frequentieband los zou kunnen instellen. Soms wil je echter dat al je banden gewoon even breed zijn; dat wil zeggen: een even groot bereik hebben over bijvoorbeeld een terts of octaaf. Dan is het handig om ze niet allemaal collectief hoger te zetten, maar dat in één keer te kunnen doen. Daarvoor is de knop ‘link band‐width.’ Die zegt dat alle banden een relatief even groot bereik blijven hebben. Dat vergroot het gebruikersgemak.
6.2.6 Overige zaken bij het programmeren Alle voorgenoemde zaken zijn het werkende deel van het geluidsfilter. Bij het programmeren zijn er echter nog veel meer dingen die een rol spelen. De schuifjes en knopjes op de equalizer moeten bediend (en dus bewogen) kunnen worden, het host‐programma moet de plugin (dus het programma) kunnen herkennen, snappen dat hij het geluid dan wel moet afspelen enzovoorts. Al deze stappen zijn echter helemaal niet interessant voor de eigenlijke werking van het filter en gaan we dus ook niet stuk voor stuk bespreken.
6.3 Design grafische interface Behalve de relevante formules hebben we ook het grafisch design van de equalizer zelf gemaakt. De afbeeldingen zijn gemaakt met behulp van Adobe Flash. Voor het wijzigen van de amplitude hebben we schuifjes gekozen. De schuifjes die aan staan zijn blauw, de schuifjes die uit staan zwart. Om de bandbreedte te besturen hebben we draaiknopjes gekozen, waarvoor dezelfde kleurencombinatie geldt. Alle knopjes staan naast elkaar opgesteld, omdat het programmeertechnisch gezien niet makkelijk was om er meer of minder knopjes te tekenen, al naar gelang het aantal geselecteerde banden. Daarom hebben we gekozen voor de mogelijk ze uit te zetten en zwart te kleuren als je ze niet gebruikt.
6.4 Technische informatie Aqualizer Ons filter heeft de vorm gekregen van een equalizer. We hebben hem Aqualizer gedoopt en hem de toepasselijke kleur blauw gegeven. Het programma is een VST‐plugin (Virtual Studio Technology‐plugin). Dat is een formaat dat door veel software voor muziekproductie wordt ondersteund. Om het programma te runnen, is het dus wel nodig eerst een host‐programma te hebben dat VST‐plugins ondersteunt. Voorbeelden hiervan zijn MAGIX Music Maker, Sonar en Cubase. Zo’n programma moet dus eerst geïnstalleerd worden alvorens onze Aqualizer uitgevoerd kan worden.
Figuur 6.4 De draai‐ en schuifknopjes. Blauw betekent ‘aan,’ zwart betekent ‘uit.’
Figuur 6.3 De knop ‘link band‐with.’ Als hij blauw is, staat hij aan, als hij zwart is staat hij uit.
30
7 Conclusie Een equalizer was natuurlijk niet een heel nieuw fenomeen. Het is nu al een veel gebruikt apparaat in de geluidsindustrie. Wij hebben het echter wel klaargespeeld met relatief eenvoudig programma een zeer adequate equalizer te bouwen. De manier om dat te bereiken door gebruik te maken van complexe getallen was al voor een deel bekend, maar de formule om hiermee ook een goed werkende impulsrespons van te maken (§6.2.3), hebben wij zelf bedacht. Met behulp van de twee hulpprogramma’s die we hebben geschreven, is ook precies te zien hoe ons filter werkt, waarom het werkt en wat voor respons je er precies mee bereikt. Dit biedt veel inzicht in de werking van filters in het algemeen. Wat ook nieuw is, is de multi‐inzetbaarheid van onze Aqualizer. Hij is te gebruiken in disco’s om bepaalde geluidseffecten te bereiken. Een paar wijzigingen en enkele drukken op de knop verder en de gebruiker kan er een zaal mee soundchecken. De amateurmusicus die ervan houdt op zijn studiootje op zolder ‘maar wat te pingelen’ heeft veel aan de Aqualizer, aangezien het een simpel apparaat is, dat op elk niveau gebruikt kan worden. Een hoge resolutie en precieze instellingen voor de ervaren gebruiker en standaardinstellingen voor de amateur, beide mogelijkheden zijn even gemakkelijk in te stellen. Dat in grote tegenstelling tot het grote apparaat dat je nu moet kopen om alleen maar één 15‐bandsequalizer te kopen. De Aqualizer heeft dus zijn gebruikersgemak mee. Het enige nadeel is dat het een VST‐plugin is, en dus een hostprogramma nodig heeft om te kunnen functioneren. De Aqualizer leeft dus bij de gratie van die host en wordt dus wel beperkt in zijn kunnen indien de host ook zijn beperkingen heeft. De Aqualizer functioneert naar behoren. We stellen hem dan ook vrij beschikbaar aan iedereen die hem graag wil gebruiken en staan open voor kritiek. Misschien is er wel een plaatsje voor hem weggelegd in de geluidsindustrie.
Nummer piekfrequentie
Minimale en maximale piekfrequentie
GoknopMeer/minder banden instellen
Gain (volume)instellen
Bandbreedte instellen
Link bandwidth
Piekfrequentie Aantal banden
Piek in frequentieband instellen
31
Appendix A: Complexe getallen Een groot wiskundig probleem is het oplossen geweest van de wortel van een negatief getal. Er is geen enkel reëel getal dat vermenigvuldigd met zichzelf een negatief getal geeft. Er is dus ook geen enkele reële wortel van een negatief getal. Daarom hebben wiskundigen de complexe getallen in het leven geroepen. De wortel van 1 is gedefinieerd als i. Aan de hand van die definitie kunnen alle wortels van negatieve getallen worden berekend. Dat gaat als volgt:
√ √ 1 · √ · √ 1 √ Als een dergelijk getal wordt opgeteld bij een reëel getal, ontstaat er een getal van de vorm . Een getal van die vorm wordt ook wel complex getal genoemd. Omdat in termen is van √ 1 en niet, kan dit getal niet verder worden vereenvoudigd. Voor complexe getallen gelden geen aparte rekenregels. Optellen gaat zo:
Op dezelfde manier gaat aftrekken. Vermenigvuldigen ziet er iets lastiger uit, omdat 1.
·
Delen lijkt op het eerste oog niet gemakkelijk te gaan, maar lukt wel als de teller en de noemer worden vermenigvuldigd met een variatie op de noemer, de zogenaamde complexe geconjugeerde. Elk complexe getal heeft een complexe geconjugeerde. Als een complex getal is, is zijn complexe geconjugeerde . Twee complexe getallen delen gaat als volgt:
Dit is voor gegeven , , , exact te berekenen, omdat reëel is. Complexe getallen blijken onmisbaar als we de formule van Euler willen gebruiken. Deze formule zegt dat:
cos sin Omdat cos sin 1 kun je de eenheidscirkel beschrijven met de formule van Euler, waarbij je het reële gedeelte op de x‐as zet en het complexe gedeelte op de y‐as. De eenheidscirkel is namelijk de cirkel waarvoor geldt: 1, en voor cos en sin geldt dat. is dus een beschrijving van de eenheidscirkel in het complexe vlak (het vlak waarbij de x‐as het reële gedeelte en de y‐as het complexe is). In de complexe Fouriertransformatie worden complexe getallen gebruikt om de sinussen en cosinussen te weergeven. Het reële gedeelte van het frequentiedomein geeft aan wat de amplitudes van de cosinussen moeten zijn; het complexe gedeelte dat van de sinussen. Met de formule van Euler kan de Fouriertransformatie in een simpelere vorm worden weergeven, namelijk met complexe machten van . (Getal & Ruimte, 2001)
32
Bijlage 1: Programmeercode: frequentierespons plotten in Scilab: function h=H(z, zs, ps)
h=1 for i=1:length(zs)
h = h * (z-zs(i)) end for i=1:length(ps)
h = h / (z-ps(i)) end
endfunction function [Mag, Ph]=plotHz(z, p)
h=[] for i=0:1000 h(i+1)=H(%e^(%pi*%i*i/1000), z, p)
end Mag=abs(h) Ph=atan(imag(h), real(h)) x=0:.0005:.5 plot2d(x,Mag,style=2,leg="Magnitude")
endfunction function [db, Ph]=plotDB(z, p)
h=[] db=[] for i=0:1000
h(i+1)=H(%e^(%pi*%i*i/1000), z, p) if abs(h(i+1))>1D-10
db(i+1)=20*log(abs(h(i+1)))/log(10) else
db(i+1)=-10000 end
end Ph=atan(imag(h),real(h)) x=0:.0005:.5
plot2d(x,db,style=2,leg="Magnitude(db)",frameflag=1,rect=[0,-200,.5,150])
endfunction //------------------------------------------------------------------------- // And now with gain: //------------------------------------------------------------------------- function [Mag, Ph]=plotHzGain(gain, z, p)
h=[] for i=0:1000
h(i+1)=H(%e^(%pi*%i*i/1000), z, p)*gain end Mag=abs(h) Ph=atan(imag(h), real(h)) x=0:.0005:.5 plot2d(x,Mag,style=2,leg="Magnitude")
endfunction function [db, Ph]=plotDBGain(gain, z, p)
h=[] db=[] for i=0:1000
h(i+1)=H(%e^(%pi*%i*i/1000), z, p)*gain if abs(h(i+1))>1D-10
33
db(i+1)=20*log(abs(h(i+1)))/log(10) else
db(i+1)=-10000 end
end Ph=atan(imag(h),real(h)) x=0:.0005:.5 plot2d(x,db,style=2,leg="Magnitude(db)",frameflag=1,rect=[0,-200,.5,150])
endfunction refunction z=uc(p)
z=%e^(p*%i*%pi) endfunction Deze functie wordt aangeroepen door plotHz([n],[p]). Hierbij is n een of meerdere nulpunten in het complexe vlak en p een of meerdere polen in het complexe vlak. Meerdere nulpunten of polen worden gescheiden door een spatie. De grafiek 5.1dII is bijvoorbeeld gemaakt door in te voeren in Scilab:
plotHz([cos(1/3*%pi)+%i*sin(1/3*%pi) -1], [1.25*cos(1/4*%pi)+1.25*%i*sin(1/4*%pi) .9*cos(3/4*%pi)+%i*sin(3/4*%pi)])
34
Bijlage 2: Programmeercode: peaking filter Het volgende programma werkt alleen als ook het programma uit bijlage 1 in Scilab geladen wordt! function [gain,z,p]=peaking(f, bw, peak) b=bw absz=1-b*peak absp=1-b z=[absz absz].*uc(2*cat(2,f,-f)) p=[absp absp].*uc(2*cat(2,f,-f)) if peak>1 gain=1/min(abs([H(1, z, p) H(-1, z, p)])) else gain=1/max(abs([H(1, z, p) H(-1, z, p)])) end endfunction function [gain,z,p]=plotpeaking(f, bw, peak) zdef=[] pdef=[] gain=1 for i=1:length(f) [g,z,p]=peaking(f(i), bw(i), peak(i)) zdef=[zdef,z] pdef=[pdef,p] gain=gain*g end z=zdef p=pdef Hz=plotHzGain(gain, z, p) endfunction function [gain,z,p]=DBpeaking(f, bw, peak) zdef=[] pdef=[] gain=1 for i=1:length(f) [g,z,p]=peaking(f(i), bw(i), peak(i)) zdef=[zdef,z] pdef=[pdef,p] gain=gain*g end z=zdef p=pdef plotDBGain(gain, z, p) endfunction
Deze functie wordt aangeroepen door plotpeaking(f, bw, peak). f is hierbij de relatieve frequentie, bw de bandbreedte en peak de piek. Het programma plot vervolgens zelf de frequentierespons. Meerdere nulpunten of polen worden gescheiden door een spatie. Een voorbeeld van een functie is: plotpeaking([.2 .4], [.01 .03], [1.2 .6]). De andere functie die in hetzelfde programma staat is DBpeaking(f, bw, peak). Die werkt hetzelfde, met dat verschil dat deze de niet de frequentie uitzet tegen de amplitude, maar tegen de geluidssterkte (in deciBel). Let op: de functie is hoofdlettergevoelig.
35
Bijlage 3: Instellingen piekfrequenties Dit zijn alle standaardinstellingen, die als lijsten in de Aqualizer zijn opgeslagen. De standaardinstellingen zijn direct overgenomen van de instellingen die veel worden gebruikt in de geluidsindustrie. De ‘uitgerekende instellingen’ zijn berekend met behulp van de formule uit §6.2.2. De octaven, kwinten en kwarten zijn berekend met behulp van het pythagoreïsche toonstelsel, waarbij respectievelijk de verhoudingen 1: 2, 4: 3 en 5: 4 zijn aangehouden. Standaardinstellingen: Fpstandaard10=[31.25,62.5,125,250,500,1000,2000,4000,8000,16000] (Dunlop, 2007) Fpstandaard15=[25,40,63,100,160,250,400,630,1000,1600,2500,4000,6300,10000,16000] (dbx, 2007) Fpstandaard31=[20,25,31.5,40,50,63,80,100,125,160,200,250,315,400,500,630,800,1000,1250,1600,2000,2500,3150,4000,5000,6300,8000,10000,12500,16000,20000] (dbx, 2007) Octaven vanaf de centrale C (256 Hertz) Fpoctaaf=[32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384] Kwinten vanaf centrale C (256 Hertz) Fpkwint=[22.474,33.711,50.567,75.851,113.777,170.666,256,384,576,864,1296,1944,2916,4374,6561,9841.5,14762.25] Kwarten vanaf centrale C (256 Hertz) Fpkwart=[25.628,34.171,45.562,60.75,81,108,144,192,256,341.333,455.11,606.814,809.086,1078.781,1438.375,1917.834,2557.112,3409.483,4545.978,6061.304,8081.738,10775.652,14367.535,19156.714]
36
Bibliografie Black, H. S. (1953). Modulation Theory. Van Nostrand.
dbx® (2007). dbx® iEQ‐15 Dual 15‐Band Graphic EQ/Limiter with Type V™ NR and AFS&trade. Opgeroepen op 29 februari, 2008, van dbx® Professional Products: http://www.dbxpro.com/iEQ15/iEQ15.php
dbx® (2007). dbx® iEQ‐31 Dual 31‐Band Graphic EQ/Limiter with Type V™ NR and AFS&trade. Opgeroepen op 29 februari, 2008, van dbx® Proffecional Products: http://www.dbxpro.com/iEQ31/iEQ31.php
Dunlop. (2007). Dunlop. Opgeroepen op 29 februari, 2008, van http://www.jimdunlop.com/index.php?page=products/pip&id=248&pmh=products/p_and_e_detail
Getal & Ruimte. (2001). Zebraboekje Complexe getallen (1 ed.). Houten: EPN.
NVON‐commissie. (2004). BINAS havo/vwo (5e ed.). Groningen: Wolters‐Noordhoff.
Smith, J. O. (2007). "Shift Theorem". Opgeroepen op 8 februari, 2008, van Introduction to Digital Filters with Audio Applications, online boek: http://ccrma.stanford.edu/~jos/filters/Shift_Theorem.html
Smith, S. W. (1997). The Scientist and Engineer's Guide to Digital Signal Processing. California Technical Publishing.
Met dank aan: Dr.Ir. Richard Heusdens Drs. Jacob van Eeghen Remy van Dobben de Bruyn Tim van Mourik Wouter Berkelmans