530 likes | 869 Views
DSP Programmierung. Praktikumsarbeit von S.Gary und C.Brungräber am 21161N EZ-Kit Lite von Analog Devices. Entwicklungsplattform. 21161N EZ-Kit LITE mit einem SHARC DSP ADSP-21161NKCA-100 von Analog Devices 100 Mhz DSP Analog Devices Visual DSP++ CrossCore Developement Tools. Specs DSP.
E N D
DSP Programmierung Praktikumsarbeit von S.Gary und C.Brungräber am 21161N EZ-Kit Lite von Analog Devices
Entwicklungsplattform • 21161N EZ-Kit LITE mit einem SHARC DSP ADSP-21161NKCA-100 von Analog Devices • 100 Mhz DSP • Analog Devices Visual DSP++ CrossCore Developement Tools
Specs DSP • ADSP 21161 SHARC • RISC Prozessor • Harvard Architektur • 80kb Programm Memory • 128kb Data Memory • 100Mhz • 600 MFLOPS • 2 ALUs • 96 universal register • Alle Artihmetikbefehle sind Singlecycle
Specs DSP • SIMD support • MAC beschleunigt • Unterstützt bis zu 32 Ringpuffer in Hardware • Unterstützt das 32bit floating point Format in Hardware • Multiprozessorsupport -> bis zu 32 EZ-Kits sind zu einem DSP-Cluster koppelbar
Specs EZ KIT • USB Debugging Interface • Stellt Verbindung zum EntwicklungsPC her • AD1836 AudioCodec mit 96khz • 6 DA-Wandler • 4 AD-Wandler • 2 Stereo-Chincheingänge und 3,5 mm Mic/Lineeingang • 4 Stereo-Chinchausgänge und 3,5 mm Lineausgang • Zusätzlich SPDIF-Ausgang
Specs EZ KIT • 6 MB SDRAM onboard (1M x 48 bit) • LinkPorts 0 und 1 mit bis zu 400MB/s • 14-pin JTAGinterface • External-Port über den die Verbindung mit dem EmbeddedPC hergestellt wurde • 7 Miniaturtaster • 4 FlagTaster • 3 Interrupttaster • 6 LEDs • Breadboard Area für eigene Erweiterungen
Effekt Algorithmen • Grundlagen • Filter • Grundsätzlicher Ansatz • Faltung • IIR - Filter • FIR – Filter • Anwendungsgebiete
Effekt Algorithmen • Reverb • Reverbalgorithmen • Impulsfaltung • Schröder-Algorithmus • Implementierung • Flanger • Flanger-Algorithmus • Besonderheiten der Implementierung
Effekt Algorithmen • Dynamikeffekte • Compressor • Anwendungsgebiet • Algorithmus • Besonderheiten der Implementierung • MultibandCompressor • Expander (Noise-Gate)
Filter • Grundsätzlicher Ansatz • Der gleitende Mittelwert • Symetrisch-akausales Filter y = (x(-1) + x(0) +x(+1))/3 • Asymetrisch-kausales Filter y = (x(0) + x(-1) + (x-2))/3
Filter • Sendet man einen Diracimpuls durch den Filter erhält man seine Impulsantwort. Impulsantwort des Filters : [0.3333(0)],[0.3333(-1)],[0.3333(-2)] Koeffizientenvektor für
Filter • Faltung • Eine Multiplikation im Frequenzbereich entspricht einer Faltung im Zeitbereich. • FIR – Filter • Finite Impulse Response
Filter • Ermittlung des Koeffizientenvektors über eine inverse FFT des Referenzspektrums iFFT Spektrum Impulsantwort
Filter • FIR – Filter Implementierung • float FIR_filter(float pm *signal, float pm *koeffs, int lenght){ • int i=0; float tmp=0; • #pragma SIMD_for for(i=0;i<lenght;i++){ • tmp = tmp+(signal[i]*koeffs[i]); } return tmp; • }
Filter • Faltung • IIR – Filter • Infinite Impulse Response (rekursiv) • 2 Arten von Koeffizienten • Nominator & Denominator
IIR Filter PRO: Steile Flanken mit wenigen (meist unter 10) Koeffizienten CONTRA: Extrem aufwendige Ermittlung der Koeffizienten über bilineare Transformation eines analogen Filters Mögliche Instabilität FIR Filter PRO: Einfache Ermittlung des Koeffizientenvektors durch eine inverse DFT oder FFT Stets Stabil CONTRA: N-fache Anzahl von Koeffizienten nötig um dem Referenzspektrum zu entsprechen. Hoher Rechenaufand. Filter
Filter • Anwendungsgebiete • Verarbeitung von Signalen jeglicher Art • Börsenwerte • Audiosignale • Vorverarbeitung bei Mustererkennung
Reverb • Reverbalgorithmen • Impulsfaltung • Ein lineares System (in diesem Fall der Hallraum) ist durch seine Impulsantwort charakterisiert • Ein Signal, welches mit der Impulsantwort eines Systems gefaltet wird, besitzt nach der Faltung dieselben Merkmale, wie ein Signal welches das lineare System durchlaufen hat.
Reverb • Der Schröder-Algorithmus • Simulation eines vereinfachten Hallraumes mittels • 4 Combfilter • Diverse Allpassfilter
Reverb • Combfilter a.k.a DelayLine • Erzeugt ein „Echo“ im Signal • Es gibt 2 Arten eines Combfilters • Feedforward • Feedback
Reverb • Feedforward Combfilter Center for Computer Research in Music and Acoustics (CCRMA)
Reverb • Feedforwardcombfilter Impulsantwort
Reverb • Feedback Combfilter Center for Computer Research in Music and Acoustics (CCRMA)
Reverb • Feedbackcombfilter Impulsantwort
Reverb • Allpassfilter • Ein Feedforward- und Feedbackcombfilter gekoppelt ergeben einen Allpassfilter, wenn der Koeffizient des Feedforwardcombfilters gleich den negierten Koeffizienten des Feedbackcombfilters ist.
Reverb • Allpassfilter erster Ordnung - Systemgraph Center for Computer Research in Music and Acoustics (CCRMA)
Reverb • Allpassfilter zweiter Ordnung - Systemgraph Center for Computer Research in Music and Acoustics (CCRMA)
Reverb • Allpassfilter – Eigenschaften • Beeinflusst das Frequenzspektrums des Signals nicht. Es entsteht jedoch ein hörbarer Unterschied zum ursprünglichen Signal. • Führt zu einer Phasenverschiebung (Timeshifting) einzelner Frequenzanteile des Signals.
Reverb • Allpassfilter Impulsantwort
Reverb • Allpassfilter erster Ordnung Implementierung float allpass_1st_order::AP_filter(float sample){ // a= delayoutput*acoeff +input float a = (sample+(a0_1*delayline[index])); delayline[index]= a; index++; if(index>=delay)index=0; float b = ((b0_1*a)+ delayline[index]); return b; }
Reverb • Der Schröder-Algorithmus • Simulation eines Hallraumes durch vier getrennte Feedbackcombfilter deren Summe durch mehrere Allpassfilter geleitet wird.
Reverb • Der Schröder-Algorithmus • Systemgraph
Reverb • Der Schröder-Algorithmus • Vorteile : • Einfache Implementierung (Teile und Herrsche) • Der Rechenaufwand zur Laufzeit hält sich in Grenzen • Nachteile: • Klingt bei geringer simulierter Raumgrösse „metallisch“.
Reverb • Abgewandelter Schröder-Algorithmus • Schleift in jedem Combfilter einen Allpassfilter erster oder zweiter Ordnung ein.
Reverb • Impulsantwort
Flanger • Grundlegende Idee • Delayeffekt der seit den 60er Jahren bekannt ist • Begriff „flange“ stammt aus den ersten Implementierungen mittels zweier gekoppelter (flanged == angeflanscht ) Bandmaschinen • Wird die Kopplung aufgehoben und eine der Maschinen leicht abgebremst setzt der Flangingeffekt ein. • Wird das „Flanging“ stark genug durchgeführt, setzt ein hörbarer Dopplereffekt ein.
Flanger • Grundlegende Idee x = Inputsignal y(n) = Output zur Zeit n g = „Depth“ Stärke des Effekts M(n) = Länge der Delayline zum Zeitpunkt n
Flanger • Systemgraph www.harmony-central.com Die Grösse des Delays liegt im Bereich weniger ms, da sonst ein hörbares Echo entstehen würde.
Flanger • „Aufgebohrter“ Flanger www.harmony-central.com
Flanger • Implementierung des „aufgebohrten“ Flangers float TFlanger::sendThrough(float src) { static float sample; if(inverted) { pdelayline[index1] = src * .5 + pdelayline[index2] * feedback; delayline_length = fabs(((sin(lfo_index) + 1.1) * mod_amount)); sample = pdelayline[index1] + pdelayline[index2] * mix; } else { pdelayline[index1] = src * .5 + pdelayline[index2] * feedback;
Flanger • Implementierung des „aufgebohrten“ Flangers delayline_length = fabs(((sin(lfo_index) + 1.1) * mod_amount)); sample = pdelayline[index1] - pdelayline[index2] * mix; } index2 = (index1 + delayline_length) % delayline_maxlength; index1 = (index1 + 1) % delayline_maxlength; lfo_index = fmod(float(lfo_index + lfo_inc), float(2 * PI)); return sample; }
Dynamikeffekte • Compressor • Anwendungsgebiet • Audiosignale jeglicher Art deren „gefühlte“ Lautstärke erhöht werden soll • Funktionsprinzip • „Laute“ Stellen eines Signals werden um einen gewissen Betrag „leiser“ gemacht. Danach kann der Gesamtpegel des Signals wieder bis zur maximalen Aussteuerung angehoben werden.
Dynamikeffekte • Compressor • Der Integralwert des Signals vergössert sich. • Der Schalldruck des Signals wird erhöht.
Dynamikeffekte • Compressor Systemgraph www.harmony-central.com
Dynamikeffekte • Compressor – Leveldetector • Bildet über die Attackzeit das Integral der absoluten Beträge der einzelnen Samples. • Wird ein voreingestellter Wert, Treshold genannt, vom Integral überschritten meldet der Leveldetector dies an den • Compressor - Gaincontroller • Dieser regelt das Signal um einen Faktor (Gain) über die Releasezeit ab.
Dynamikeffekte www.harmony-central.com
Dynamikeffekte • Compressor Implementierung float compressor::sendtrough(float source){ static float tmp; tmp = attackline[counter]; attackline[counter] = (source*source); sum = attackline[counter] + sum - tmp; counter++; if(counter >= attacktime)counter = 0; if((sum/attacktime) >= (treshold*treshold)){ tmp = source * gain * sinf(acount); acount += (1.570796/attacktime); if(acount > 3.1415927){ acount = 3.1415927; }
Dynamikeffekte • Compressor Implementierung rcount = 0; } if((sum/attacktime) < (treshold*treshold)){ acount = 1.570797; tmp = source * (gain + ((1-gain)*sinf(rcount))); rcount += (1.570797/releasetime); if(rcount > 1.570797){ rcount = 1.570797; } } return tmp; }
Dynamikeffekte • Multibandcompressor • Drei oder mehr Compressoren die jeweils getrennte Frequenzbänder (Höhen, Mitten, Bässe) des Signals bearbeiten. • Das „Pumpen“ eines normalen Compressors kann damit unterdrückt werden.