Can Kosar

Kategorie: Audiotechnik (page 2 of 6)

Digitaler Tuner (Stimmgerät)

Ein Effektgerät besteht hauptsächlich aus den Komponenten

Im Falle von einem verteilten System wird die Frequenzerkennung auf dem DSP durchgeführt. Die erkannte Frequenz wird dem Controller mitgeteilt, der dann Korrektur-/Stimmhilfe gibt. Dazu gehört

  • die Erkennung/Vermutung der Soll-Note
  • Die Abweichung von der vermuteten Soll-Note.

Die Erkennung der Frequenz bzw. die Darstellung der Abweichung ist in obigen Kapiteln ausführlich beschrieben.

DSP Architektur

Ein DSP-FX benötigt jitter-freie Verarbeitung der Audiodaten in Echtzeit.  Echtzeit ist ein theoretischer und dehnbarer Begriff, der die erforderliche Systemlatenz beschreibt. Beim Audio beruht diese Feststellung auf die Latenzwahrnehmung des Menschen. Wir nehmen die Latenzen unter 10ms als Echtzeit wahr. Die Latenz der gesamten Kette (Roundtriplatenz) ist die Zeit zwischen dem Eintreten des Signals in die Codec-Eingänge bis zur Bereitstehung des verarbeiteten Signals an Codec-Ausgängen. Diese Zeit darf 10ms nicht überschreiten. Am besten soll diese Zeit sogar noch unter 10ms liegen, da auch der Schall zwischen den Lautsprechern und dem Ohr zusätzlich große Latenz erzeugt und Echtzeiterlebnis schnell beeinflusst werden kann.

Systemarchitektur

Die Übersicht der Systemarchitektur des DSPs vom Flex 500 ist im folgenden Diagramm gezeigt:

Codec

Ein Audio- Codec (Coder, decoder) ist die Komponente, die die analogen Audio-Signale ins Digitale wandelt und die digitalen Audio-Signale ins Analoge wandelt. (Sampling) Er besteht aus einem oder mehreren Analog-Digital-Wandlern (ADC) und ein Digital-Analog-Wandlern (DAC). Nach diesem Schritt liegen die Audio-Signale in einem digitalen Audio-Format vor, im vorliegenden Fall als I2S-Format (Intersound).

Die Codecs müssen konfiguriert und initialisiert werden. Das erfolgt über eine andere serielle Schnittstelle, üblicherweise SPI oder I2C. Das heißt, der Codec hat auch eine Steuerschnittstelle zum DSP. Beim Flex 500 stehen beide Schnittstellen zur Verfügung.

SAI

SAI (Serial Audio Interface) ist eine Schnittstelle, über die digitale Audio-Daten ausgetauscht werden können. Der Codec kommuniziert mit der SAI-Schnittstelle vom DSP-Chip, in dem Fall STM32H743. Diese Schnittstelle serialisiert und deserialisiert die Audiodaten, D.h. er schreibt/liest die in den bzw. von dem Arbeitsspeicher.

 

DMA

Das Schreiben bzw. Lesen muss über eine DMA (DIrect memory access)-Hardware-Komponente erfolgen. DMA ist eine einfache Hardware, die die Aufgabe hat, ein Register in das andere zu kopieren. Die Startaddresse, FIFO, IRQs und die Länge müssen dabei konfiguriert werden. Dadurch dass DMA die Datenübertragungsaufgabe übernimmt, kann sich DSP auf die Datenverarbeitung konzentrieren.

DMA muss so konfiguriert werden, dass er ein Interrupt auslöst, wenn die Puffer

  • halb voll und
  • ganz voll

sind. Dadurch können die Flags der Zustandsmaschine (State machine) gesetzt werden.

Puffer

Das vom Audio-Codec ins digitale I2S-Format gewandelte Audio-Signal muss in einem Eingangspuffer zwischengespeichert werden. Dann wird dieses Puffer vom DSP verarbeitet und das Ergebnis in ein Ausgangspuffer geschrieben. Die Größe der Puffer ergibt sich aus dem Kompromiss aus zwei Anforderungen:

  1. Die Puffer muss so klein wie möglich sein, um eine nicht-wahrnehmbare Latenz zu erreichen.
  2. Die Puffer müssen so groß wie möglich sein, um eine effiziente blockweise Datenverarbeitung zu ermöglichen (Overhead muss reduziert werden)

Bei den Anforderungen

  • Roundtrip-Latenz = 10ms
  • Abtastrate f_S= 48kHz
  • Bittiefe = 32bit

ergibt sich eine Puffergröße von 240 für jeweils Eingangs- und Ausgangspuffer mit 32bit Registern, da Eingangslatenz und Ausgangslatenz 5ms betragen müssen.

Für die Verarbeitung mit DMA-Interrupts wird ein Doppelpuffer der Größe 480 verwendet. Für genaue Erkläreung, siehe unten.

Zustandsmaschine

Die Zustandsmaschine ist die Hauptsteuerungskomponente  in der Software. Durch die Interrupts von DMA wird der Software mitgeteilt, dass das Puffer halb oder ganz voll ist. Nun kann die Zustandsmaschine, die in Endlosschleife läuft, entscheiden, ob der Prozess getriggert werden soll.

 

Die auf STM32 eingesetzter DMA unterstützt Double-buffering. Das heißt, er kann auf der Hälfte und am Ende der Übertragung ein Interrupt auslösen. Deshalb müssen wir das Doppelpuffer nicht selbst managen.

Der Ablauf sieht folgendermaßen aus:

  1. Erste Hälfte vom RX fertig ( Ab nun beschreibt DMA die zweite Hälfte)
  2. Erste Hälfte vom TX fertig ( Ab nun beschreibt DMA die zweite Hälfte)
  3. Zustandsmaschine löst die Verarbeitung der ersten Hälfte aus. Jetzt liest DSP von der ersten Hälfte von RX und beschreibt die erste Hälfte von TX.
  4. Zweite Hälfte vom RX fertig ( Ab nun beschreibt DMA die erste Hälfte)
  5. Zweite Hälfte vom TX fertig ( Ab nun beschreibt DMA die erste Hälfte)
  6. Zustandsmaschine löst die Verarbeitung der zweiten Hälfte aus. Jetzt liest DSP von der zweiten Hälfte von RX und beschreibt die zweite Hälfte von TX.
  7. Zurück zu 1.

Man erkennt, dass zwischen den RX und TX interrupts ein kleiner Versatz ist. Zwar synchronisiert der Codec die ADCs und DACs aber trotzdem entstehen ein kleines Offset von ein paar Samples. Um den Jitter zu verhindern, müssen beide Interrupts ausgewertet werden, um sicherzugehen, dass in der zu verarbeitenden Hälfte wirklich nichts mehr beschrieben bzw. gelesen wird.

Implementierung

Zuerst müssen die Stati initialisiert werden.

 

Die Hauptroutine, die Endlosschleife der Verarbeitung wird folgendermaßen implementiert:

Die Flags tx_status und rx_status wurden in Interrupt Routinen gesetzt und hier (nach der Verarbeitung) wieder geresettet.

Wichtig: Die Interruptroutine muss so schnell wie möglich ablaufen, da diese höchste Priorität hat und alles pausiert. Hier nichts verarbeiten, sondern nur Flags setzen, die dann in der Hauptschleife verarbeitet werden.

 

 

WM8731 CODEC-Schnittstelle für Nucleo H743

Die WM8731 ist ein Budget-Klasse-Stereo Audio-CODEC von Cirrus Logic für mobile Applikationen. Es unterstützt 24bit Bittiefe, bis zu 96kHzAbtastrate und besitzt einen dynamischen Bereich vom 90db für ADC und 100dB für DAC .

Für Flex 500 wurde ein Breakout-Board für WM8731 entwickelt, das man direkt auf ein Nucleo Board stecken kann.

Board-Design

Folgendes auf Referenzdesign basiertes Design wurde für das Breakout board entwickelt.

Analoge Ein- und Ausgänge

Da WM8731 für mobile Anwendungen mit knappem Platz entwickelt ist, kommt es ohne zusätzlichen Eingangs- und Ausgangsstufen klar. Dafür unterstützt es nur unsymmetrische Ein- und Ausgänge.

Dafür hat es einen integrierten Kopfhörerverstärker. Auf dem Board befinden sich Line-In/Out und Kopfhörer-Anschlüsse.

Oszillator

Ein 24,576 MHz Oszillator ist eingebaut und gibt den Takt an den Master-Clock.

Ressourcen

Die KiCad Schaltung- und PCB-Designdaten herunterladen

Kompletter Programmcode für H743-Target

CS4272 CODEC-Schnittstelle für Nucleo H743

Die CS4272 ist ein hochwertiges Stereo Audio-CODEC von Cirrus Logic für anspruchsvolle Implementierungen. Es unterstützt 24bit Bittiefe, bis zu 192kHz Abtastrate und besitzt einen dynamischen Bereich vom 114dB.

Für Flex 500 wurde ein Breakout-Board für CS4272 entwickelt, das man direkt auf ein Nucleo Board stecken kann.

PCB Design

CS4272 CODEC- Breakout board im Betrieb

Board-Design

CS4272 unterstützt 2x symmetrische Eingänge und hat 2x symmetrische Ausgänge.

Symmetrische Eingänge

Die Nutzsignale vom analogen Preamp-Board sind Wechselspannungen, da Preamp-Board symmetrische Spannungsversorgung von +-15V hat. Für die symmetrischen Eingänge muss das Signal vom Preamp-Board in einen Pegel von V_{pp}<5V gebracht werden. Danach muss eine Gleichspannung V_{alias}=2,5V addiert werden, damit das Eingangssignal in den erlaubten Bereich vom CS4272 0V\leq V_{i} \leq5V gebracht werden. Das wird in der untenstehenden Schaltung realisiert:

Bei diesem Design handelt es sich um das Referenzdesign von CS4272. Hierbei wird die Alias-Spannung V_{com}=2,5V auf die durch die Kondensatoren C_INAx entkoppelte Eingangsspannung addiert und ein Eingangspuffer hinzugefügt.

Symmetrische Ausgänge

Die analogen Ausgänge vom CS4272 symmetrisch und für weitere Verarbeitung desymmetriert werden. Das wurde mit folgender Schaltung realisiert.

Hierbei werden die symmetrischen Signale V_{OUT,A+} und V_{OUT,A-} in einer Stufe voneinander abgezogen. Danach wird mit dem Ausgangskondesator C_OUTA6 der Gleichstrom herausgefiltert. Schließlich arbeitet die ganze Schaltung auf einen Lastwiderstand von R_L=47k\Omega. Hierbei handelt es sich um das Referenz Design von CS4272.

Digitale Schnittstellen

Das Breakout-Board unterstützt SPI und I2C Schnittstellen zum Controller.

Initialisierungssequenz

Die Initialisierungssequenz von CS4272 ist im folgenden Code gezeigt.

Nach der Initialisierung kann das CODEC aktiviert und deaktiviert werden.

Der SAI von H743 muss folgendermaßen konfiguriert sein:

Oszillator

Ein 24,576 MHz Oszillator ist eingebaut und gibt den Takt an den Master-Clock.

Ressourcen

SPICE-Simulationsdateien zu analogen Schnittstellen für CS4272 herunterladen

Die KiCad Schaltung- und PCB-Designdaten herunterladen

Kompletter Programmcode für H743-Target

Flex 500 – Analoge Schnittstellen

Flex 500 besitzt u. a. folgende Schnittstellen:

  • Kopfhörerausgang
  • Symmetrischen Eingang (Balanced in)
  • Symmetrischen Ausgang (Balanced out)

Kopfhörerausgang

Kopfhörer können sehr niedrige Impedanzen von bis zu 16\Omega haben. D.h. für den Kopfhörerausgang ist ein Verstärker erforderlich, der Lasten bis 16\Omega bei Ausgangspegeln von V_{PP}=4V bedienen kann. Das bedeutet eine Effektivspannung von V_{eff}=\frac{4}{\sqrt{2}}=2,828, was wiederum bei einer R_L=16\Omega Last einer Effektivleistung von

(1)   \begin{equation*} P_{eff}=\frac{V_{eff}}{R_L}=\frac{2,828^2}{16}=0,5W \end{equation*}

Das entspricht einer Leistung, für die die Kleinsignalverstärker bzw. Opamps nicht ausgelegt sind. Man kann dafür

  • einen diskreten Verstärker mit Transistoren bauen
  • einen Kopfhörer-IC verwenden
  • einen Strompuffer verwenden

Bei Flex 500 wurde ein Strompuffer von TI, der BUF634 verwendet. Die Schaltung mit dem Baxandall-Lautstärkenregler ist unten dargestellt.

Der Strompuffer wird in die Rückkopplungsschleife gesetzt. Die Anwendung des Strompuffers ist hier beschrieben.

Zudem besitzt Flex 500 eine Erkennung des eingesteckten Kopfhörersteckers. Wenn der Stecker eingesteckt ist, wird die Masse vom Optokopplereingang getrennt und der Transistor wird hochohmig. Mit Hilfe dieses Ausgangs kann an einem Mikrocontroller erkannt werden, ob Kopfhörer eingesteckt ist und automatisch den Leistungsverstärker ausschalten.

Symmetrischen Eingang

Für die Beschallung externe Audioquellen wurde bei Flex 500 einen symmetrischen Eingang eingebaut. Dieser basiert auf einen IC von Texas Instruments, dem INA134.

Die Umsetzung ist unten dargestellt.

 

Symmetrischer Ausgang

Für eine geräuscharme Aufnahme ist die symmetrische Übertragung der Audio-Signale unerlässlich.  Deshalb wurde bei Flex 500 ein symmetrische Ausgang eingebaut. Dieser basiert auf einen IC von Texas Instruments, dem DRV135.

Die Umsetzung ist unten dargestellt.

Davor befindet sich ein Schalter, womit man die Signalquelle wählen kann, je nachdem ,ob man vor oder nach der Signalverarbeitung aufnehmen möchte.

Ground lift

Die symmetrischen Leitungen zeichnen sich aus zwei wichtigsten Gründen aus

  1. Die Störungen wirken auf beide Kabelader V_O und V_{O,inv) einigermaßen gleichmäßig, nach dem Differenzieren am Zielgerät eliminieren sie sich.
  2. Das Signal am Zielgerät muss nicht mehr von der Masse aus gemessen werden, sondern kann zwischen den beiden Signalleitungen V_O und V_{O,inv) gemessen werden.

Der zweite Punkt hat einen großen weiteren Vorteil, dass man dadurch nicht die Massen der beiden Geräte miteinander verbinden muss. Das Verbinden der Geräte kann nämlich zu Masseschleifen führen. Mit dem Ground-Lift kappt man die Masseleitung zwischen den Geräten, wenn man es nicht erwünscht.

Bei Flex 500 wurde sowohl der symmetrische Eingang als auch der symmetrische Ausgang mit einem Ground-Lift-Schalter vorgesehen.

SPICE-Simulationsdateien zu den analogen Schnittstellen herunterladen

KiCAD-Schaltung und PCB-Design herunterladen

Analoge Lautstärkenregelung

Wir nehmen die Lautstärke logarithmisch wahr. Daher müssen wir die Lautstärkenregelung an den Geräten auch logarithmisch gestalten. Die digitale Umsetzung einer Lautstärkenregelung ist hier beschrieben. Bei der analogen Umsetzung einer Lautstärkenregelung gibt es u. a. folgende Möglichkeiten:

  • Logarithmischer Potentiometer (passive Regelung)
  • Aktive Lautstärkenregelung

Eine sehr verbreitete Schaltung zur aktiven Lautstärkenregelung ist das Baxandall-Regelung.  Eine sehr gute Erklärung und Herleitung von dieser Regelung ist in dieser Publikation von TI beschrieben.

Umsetzung bei Flex 500

Beim Flex 500 wurde die Lautstärkenregelung von Baxandall folgendermaßen umgesetzt.

Die Übertragungsfunktion lässt sich als

(1)   \begin{equation*} \frac{V_O}{V_I}=-\frac{R_x}{R_{1-x}+\frac{1}{G}} \end{equation*}

beschreiben, wobei R_x und R_{1-x} durch die Position des Potentiometer VR_VC1 resultierende Widerstände und G die Verstärkung durch die zweite Stufe ist, in dem Fall G=5.

Die SPICE-Dateien zur Lautstärkenregelung herunterladen

KiCAD-Schaltung und PCB-Design herunterladen

Flex 500 – Analog und DSP FX mischen

Das Mischen der Audio-Signale kann mit Summiererschaltungen von Opamps realisiert werden.

 

Die Summe V_O von Eingangsspannungen V_{1} und V_2 berechnet sich als

(1)   \begin{equation*} V_O=\frac{V_1 R_2+V_2 R_1}{R_1+R_2} [1+\frac{R_{f1}}{R_{f2}}] \end{equation*}

Beim Flex 500 wird das Ausgangssignal vom internen DSP mit dem Analogsignal nach der Kompressionsstufe mit einem R_P=10k Potentiometer gemischt, sodass

(2)   \begin{equation*} R_2=10k\Omega-R1 \end{equation*}

ist.

LTSPice Mixersimulation herunterladen

KiCAD-Schaltung und PCB-Design herunterladen

Analoger Dynamikkompressor

Die Dynamikkompression (engl. Dynamic range compression) ist ein Prozess, der die Dynamik komprimiert bzw. reduziert. Das wird gemacht, indem die lauten Bereiche, die einen Schwellwert überschreiten, leiser gemacht werden, während die leiseren Bereiche unreduziert passieren. Die Charakteristik der Kompression lässt sich am Besten in einer Dynamikkurve darstellen, die die Beziehung zwischen der Einganglautstärke und Ausgangslautstärke beschreibt.

Die Steigung \frac{b}{a} beschreibt die Kompressionsrate, mit der das Signal abgeschwächt wird. Dies greift ab dem Überschreiten eines Threshold-Werts.

Technische Beschreibung

Das Herzstück eines Kompressors ist ein  spannungskontrollierter Verstärker (VCA). Im analogen Design, wird das mit komplexen Schaltungen realisiert. In der Digitaltechnik ist dies ein simpler Verstärkungsfaktor, mit dem das Signal multipliziert wird. In analoger Welt kann der VCA u. a. mit

  • Optokopplern (optische Kompressor)
  • diskreten Transistorschaltungen
  • integrierten Schaltkreisen

realisiert werden.

Der Verstärkungsfaktor wird in einem parallelen Pfad berechnet. Der parallele Pfad besteht aus einem Lautstärkendetektor (in der Regel realisiert mit Effektivleistung, RMS) und einer Logik, die die Reduktion aus der Lautstärke berechnet (Gain computer).

 

Loudness detector

Einer der wichtigsten Bestandteile einer Kompression ist die Berechnung der Lautstärke, Hier wird kontinuierlich ermittelt, wie hoch die empfundene Lautstärke ist. Gängigste Methode dafür ist der Effektivwert als quadratischer Mittelwert des relevanten Sampleabschnitts.

(1)   \begin{equation*} RMS=\sqrt{\frac{1}{n}\sum_{i=1}^{n}x_i^2} \end{equation*}

Der RMS-Wert dient als Eingang für den Gain-Computer. Der Gain-Computer berechnet daraus die Verstärkung, die dem Signal appliziert werden soll. Es appliziert die Dynamikkurve, s. oben.

Parameter

Folgende Kontrollparameter sind für einen Kompressor Effekt üblich:

Input gain

Die Eingangsverstärkung wird auf das Eingangssignal appliziert, um das Signalniveau in einen gewünschten Platz in der Dynamikkurve zu platzieren.  Alternativ kann man auch Threshold verschieben.

Threshold

Der Threshold (dt. für Schranke/Grenze) ist der Grenzwert, ab dessen Überschreitung eine Gain-Reduktion erfolgt, s. Diagramm.

Kompressionsrate

Sie beschreibt die Stärke der Gain-Reduktion nach Threshold, in der Dynamikkurve ist dies als Tangenzwert \frac{b}{a} gezeigt.

Ab einem Wert von 60:1 wird von einem Limiter gesprochen.

Make-Up Gain

Der Gain-Computer appliziert eine Gain-Reduktion.  Das bedeutet, die gesamte Lautstärke des Signals sinkt. Um das ältere Lautstärkenniveau zu erreichen, wird ein Make-Up Gain am Ausgang appliziert.

Soft-Knee / Hard-Knee

Ab dem Threshold ändert sich die Verstärkung, die man appliziert. Dieser Übergang, der in der Dynamikkurve oben scharf gezeichnet wurde, kann auch mild erfolgen. So dass die Gain-Reduktion langsam eintritt.

Attack

Der Attack-Wert bestimmt, wann die Gain-Reduktion nach einer Überschreitung eintreten soll. Sie liegt im Bereich von 5 bis 250 ms.

Release

Der Release-Wert bestimmt, wann nach einer Unterschreitung des Tresholds die Gain-Reduktion wieder  aussetzen soll. Sie liegt üblicherweise im Bereich von 5 bis 100ms.

Analoge Implementierung

Bei Flex 500 wurde ein Kompressor auf Basis des integrierten Schaltkreises THAT4301 von THAT Corporation eingesetzt. Dieser beinhaltet

  • 1x VCA
  • 1x Loudness (RMS) detector
  • 3x Opamps

und somit alles, was man für eine grundlegende Kompressorimplementierung braucht. Die Applikation und die Dimensionierung der externen Komponenten können dem Datenblatt entnommen werden.

Die Applikation für den Flex 500 sieht folgendermaßen aus:

 

Zudem existiert ein SPICE-Modell für den IC THAT4301, sodass man die Schaltung auch simulieren kann.

Kompressor Simulationsmodell für LTSpice herunterladen

Die gesamte KiCAD-Schaltung und das PCB Design ist verfügbar

KiCAD-Schaltung und PCB-Design herunterladen

Flex 500 – Analoger Equaliser / Tone stack

Der analoge EQ-Abschnitt besteht aus

Die Schaltungskomponenten ist im folgenden gezeigt.

High-Low-Shelvingfilter Stack

Die Dimensionierung der Schaltung ist hier beschrieben.

Parametrischer Equalizer

Die Dimensionierung der Schaltungen ist hier beschrieben.

 

KiCAD-Schaltung und PCB-Design herunterladen

Analoger Low/High-Shelving Tonestack

Es gibt viele Tonestack-Schaltungen, die teilweise auf analysierte Designs basieren und teilweise empirisch ermittelte Dimensionierungsparameter besitzen. Diese sind oft vereinfachte zusammengeführte Frequenzfilter für die Klangregelung verschiedener Zwecke.

Eine Übersicht der Tone-Stacks mit einem eigenen Schaltungssimulator ist auf Duncan amps verfügbar:

http://www.duncanamps.com/tsc/

Mit diesem Tool kann man die Frequenzantwort seiner Schaltung angucken und empirisch eine Schaltung designen.

Beim Flex 500 wurde zusätzlich zum 3-stufigen parametrischen EQ auch ein beliebter Klangregler für Höhen und Tiefenregelung eingesetzt.

Die Komponenten dieser Schaltung können empirisch mit Hilfe der Schaltungssimulation dimensioniert werden.

Tonestack_LTSpice

KiCAD-Schaltung und PCB-Design herunterladen

ältestenposts neuestenposts

Rechte © 2024 Can Kosar

Mit Unterstützung von Wordpress, QuickLaTeX und Design von Anders NorenSeitenanfang ↑