Frage:
Verhinderung der Audiosignalsättigung
Sriram
2010-11-29 14:10:55 UTC
view on stackexchange narkive permalink

Ich versuche, einen Algorithmus für Audiosignale zu implementieren. Das Algo verarbeitet das Signal Frame für Frame. Eine der Zwischenstufen erfordert das Hinzufügen des Signals zu den vorherigen Rahmen. Der Ausgangsrahmen ist am Ende dieser Stufe gesättigt.

Erläuterung: Der Ausgaberahmen der Additionsoperation ist doppelt, obwohl der endgültige Ausgaberahmen kurz sein muss. Daher das Problem mit der Sättigung.

Ich habe Folgendes versucht, um die Sättigung zu verhindern:
1. Hard-Limiting: Begrenzen Sie jede Probe auf ein vordefiniertes max_val.
2. Normalisierung: Berechnen Sie die max. des Rahmens und skalieren Sie dann jede Probe im Rahmen entsprechend.

Keiner dieser Ansätze hat funktioniert, da ich Frame für Frame arbeiten muss.

Jede Hilfe zur Verhinderung der Sättigung von Signalen ist sehr willkommen.

Was ist physikalisch / praktisch gesättigt? Was ist das Maximum / Minimum des Eingangssignals? Ist das gesamte Signal gesättigt oder sind es nur die Spitzen?
Die Werte der Signalrahmen (Nachadditionsoperation) sind gesättigt. Die Ausgabe der obigen Operation ist doppelt, muss aber kurz gemacht werden. daher das Problem mit der Sättigung.
Ist das für Musik oder Stimme?
@Kellenjb: für beide.
Sechs antworten:
Kellenjb
2010-11-29 22:36:00 UTC
view on stackexchange narkive permalink

Ihre Versuche

Per Definition verursachen Sie eine Sättigung, wenn Sie Werte in Ihrem Code "hart begrenzen". Es ist vielleicht keine Sättigung im Sinne eines Überlaufens Ihres Short, aber Sie verzerren die Welle immer noch, wenn sie einen bestimmten Punkt überschreitet. Hier ist ein Beispiel:

Saturation

Mir ist klar, dass Sie im unteren Bereich wahrscheinlich nicht stark eingeschränkt sind, aber ich hatte es bereits gezeichnet, bevor ich das erkannte.

Mit anderen Worten, die Hard-Limiting-Methode funktioniert nicht.

Bei Ihrem zweiten Ansatz veranlassen Sie diese Methode, das zu tun, was einige Audio-Leute tatsächlich absichtlich tun. Sie verursachen, dass jedes Bild so laut wie möglich ist. Diese Methode kann in Ordnung sein, wenn Sie die richtige Skalierung erhalten und Ihre Musik die ganze Zeit laut klingt, aber für die meisten Menschen ist sie nicht besonders gut.

Eine Lösung

Wenn Sie den maximal möglichen effektiven Gewinn kennen, den Ihr System erzielen kann, können Sie Ihre Eingabe durch so viel teilen. Um herauszufinden, was dies sein würde, müssen Sie Ihren Code durchgehen und bestimmen, was die maximale Eingabe ist, ihm eine Verstärkung von x geben, herausfinden, was die maximale Ausgabe in Bezug auf x ist, und dann bestimmen, in welcher x sein soll um nie zu sättigen. Sie würden diese Verstärkung auf Ihr eingehendes Audiosignal anwenden, bevor Sie etwas anderes tun.

Diese Lösung ist in Ordnung, aber nicht für alle geeignet, da Ihr Dynamikbereich ein wenig beeinträchtigt werden kann, da Sie dies normalerweise nicht tun läuft die ganze Zeit mit maximaler Eingabe.

Die andere Lösung besteht darin, eine automatische Verstärkung durchzuführen. Diese Methode ähnelt der vorherigen Methode, aber Ihre Verstärkung ändert sich im Laufe der Zeit. Dazu können Sie Ihren Maximalwert für jeden Frame Ihrer Eingabe überprüfen. Sie werden diese Zahl speichern und einen einfachen Tiefpassfilter auf Ihre Maximalwerte setzen und entscheiden, welche Verstärkung mit diesem Wert angewendet werden soll.

Hier ist ein Beispiel dafür, wie Ihre Verstärkung gegenüber dem Eingangsvolumen aussehen würde:

auto-gain

Diese Art von System führt dazu, dass der Großteil Ihres Audios einen hohen Dynamikbereich aufweist. Wenn Sie sich jedoch der maximalen Lautstärke nähern, können Sie die Verstärkung langsam reduzieren.

Daten Analyse

Wenn Sie herausfinden möchten, welche Art von Werten Ihr System tatsächlich in Echtzeit erhält, benötigen Sie eine Art Debugging-Ausgabe. Diese Ausgabe ändert sich je nachdem, auf welcher Plattform Sie ausgeführt werden. Hier finden Sie jedoch einen allgemeinen Überblick darüber, was Sie tun würden. Wenn Sie sich in einer eingebetteten Umgebung befinden, benötigen Sie eine serielle Ausgabe. Was Sie tun werden, ist in bestimmten Phasen Ihrer Code-Ausgabe in eine Datei oder einen Bildschirm oder etwas, von dem Sie die Daten abrufen können. Nehmen Sie diese Daten und geben Sie sie in Excel von Matlab ein und zeichnen Sie sie alle gegen die Zeit auf. Sie werden wahrscheinlich sehr leicht erkennen können, wo etwas schief geht.

Sehr einfache Methode

Sättigen Sie Ihr Double? Es klingt nicht so, stattdessen klingt es so, als ob Sie gesättigt sind, wenn Sie zu einem Kurzschluss wechseln. Eine sehr einfache und "schmutzige" Methode besteht darin, das Maximum Ihres Double zu konvertieren (dieser Wert ist je nach Plattform unterschiedlich) und diesen zu skalieren, um den Maximalwert Ihres Short zu erreichen. Dies garantiert, dass Sie Ihren Short auch nicht überlaufen, vorausgesetzt, Sie überlaufen Ihr Double nicht. Dies führt höchstwahrscheinlich dazu, dass Ihre Ausgabe viel weicher ist als Ihre Eingabe. Sie müssen nur herumspielen und einige der oben beschriebenen Datenanalysen verwenden, damit das System perfekt für Sie funktioniert.

Fortgeschrittenere Methoden, die wahrscheinlich nicht auf Sie zutreffen stark>

In der digitalen Welt gibt es einen Kompromiss zwischen Auflösung und Dynamikbereich. Dies bedeutet, dass Sie eine feste Anzahl von Bits für Ihr Audio haben. Wenn Sie den Bereich verringern, in dem sich Ihr Audio befinden kann, erhöhen Sie die Bits pro Bereich, den Sie haben. Wenn Sie im Sinne von Volt darüber nachdenken und über einen 0-5-V-Eingang und einen 10-Bit-ADC verfügen, müssen Sie einem 5-V-Bereich 10 Bit geben. Dies erfolgt normalerweise linear. Also 0b0000000000 = 0 V, 0b1111111111 = 5 V und Sie weisen den Bits die Spannungen linear zu. In der Realität ist dies bei Audio nicht immer eine gute Verwendung Ihrer Bits.

Im Fall von Sprache sehen Ihre Spannungen im Vergleich zur Wahrscheinlichkeit dieser Spannungen ungefähr so ​​aus:

pdf

Dies bedeutet, dass Sie viel mehr von Ihrer Stimme in der niedrigeren Amplitude und nur eine kleine Menge in der hohen Menge haben. Anstatt Ihre Bits direkt zuzuweisen, können Sie Ihre Bits neu zuordnen, um mehr Schritte im unteren Amplitudenbereich und damit weniger im oberen Amplitudenbereich zu haben. Dies gibt Ihnen das Beste aus beiden Welten, eine Auflösung, bei der sich der größte Teil Ihres Audios befindet, aber begrenzen Sie Ihre Sättigung, indem Sie Ihren Dynamikbereich erhöhen.

Diese Neuzuordnung ändert nun die Funktionsweise Ihrer Filter und muss dies wahrscheinlich tun Überarbeiten Sie Ihre Filter, aber deshalb finden Sie dies im Abschnitt "Erweitert". Da Sie Ihre Arbeit mit einem Double erledigen und dann in einen Short umwandeln, muss Ihr Short wahrscheinlich sowieso linear sein. Ihr Double bietet Ihnen bereits viel mehr Präzision als Ihr Short, sodass diese Methode wahrscheinlich nicht erforderlich ist.

Er gab an, dass er das Signal nicht kennt, bevor er es empfängt, und sich in einer Echtzeitumgebung befindet. Er gab auch an, dass er für das gesamte Signal die gleiche harte Grenze einhält, woher die Sättigung kommt.
+1 Auto-Gain / Grundsignal-Division durch maximale Verstärkung ist das, was ich wahrscheinlich tun würde. Dafür muss das Eingangssignal nicht im Voraus bekannt sein.
@Mark, @kellenjb, jetzt, da ich sehe, dass er absolut keine Kontrolle über Ihre Eingabe hat und Sie keine Eingabe erhalten, würde ich Auto-Gain vorschlagen. Ich bin nicht sicher, ob dies eine andere Methode ist. Ich würde den Verstärkungspegel über einen langen Zeitraum langsam bestimmen lassen.
Martin
2010-11-29 19:05:50 UTC
view on stackexchange narkive permalink

Wenn dies überhaupt dem Überlauf von Werten in C ähnelt, wären Sie zum Zeitpunkt des Hinzufügens übergelaufen. Sie müssten also den aktuellen Frame und den vorherigen Frame-Wert, den Sie hinzufügen, halbieren, bevor Sie ihn hinzufügen, dann hinzufügen und optional normalisieren.

Aber in jedem Fall werden Sie es tun Es fällt Ihnen schwer, einen konstanten Pegel (Audiokomprimierung) beizubehalten, wenn Sie jeweils nur einen Frame bearbeiten müssen, da Sie einen langfristigen Durchschnitt benötigen, der nicht herumspringt.

Ja. das ist mein problem Ich habe keine Langzeitstatistik (sowieso nicht in einer Echtzeitumgebung). Gibt es in der Literatur eine Technik, die dies ermöglicht? Im Moment wähle ich einfach eine zufällige Zahl (sehr hoch) und multipliziere skalar mit dem Signal. Das behebt das Problem, ist aber miserabel, wenn ein Signal mit unterschiedlichen Statistiken verwendet wird. Bitte lesen Sie auch den vorherigen Kommentar (oben), um weitere Informationen zum Problem zu erhalten.
Kortuk
2010-11-29 20:24:36 UTC
view on stackexchange narkive permalink

Ich nehme an, Sie müssen das Ergebnis übertragen, weil Sie Echtzeit-DSP mit Audio machen.

Ich habe dieses Problem bereits gesehen, als Schüler einen Fehler bei der Übertragung des Ergebnisses der IDFT machten. Oft übertragen sie Dinge falsch und verursachen einen kontinuierlichen Aufbau. Aufgrund Ihres Kommentars zu Martin scheinen Sie dies vermieden zu haben.

Zweitens verfügt das Radio aus diesem Grund über einen Lautstärkeregler, den Sie verwenden müssen. Wenn Sie Radiosender von einem Sender in der Nähe zu einem weit entfernten Sender wechseln, müssen Sie die Lautstärke ändern, um sie bei gleicher Lautstärke zu hören. Ich würde vorschlagen, dass Sie einen vom Benutzer steuerbaren Verstärkungsregler hinzufügen. Wenn dieser gesättigt ist, können Sie ihn ändern. Ein Benutzer tut dies normalerweise automatisch, wenn es lauter wird, da er es nicht mag. Sie werden es auch bei Bedarf aufdrehen.

Dieser Regler ändert, um was Sie Ihre Werte skalieren. Ich hoffe, das hilft, mit mehr Informationen über Ihre Bewerbung könnte ich andere Hilfe geben. Sie können einen sehr langsamen Antwortdurchschnitt (Tief-Tiefpassfilter) erstellen, bei dem viele Frames erheblich geändert werden müssen, um die Verstärkung zu steuern. Dies bedeutet, dass eine plötzliche Spitze zu einer Sättigung führt. Wenn sich die Lautstärke jedoch langsam ändert, können Sie dies leicht kompensieren. Selbst wenn sich Ihr Audio schnell ändert, erspart dieser Filtertyp dem Benutzer das Herunterschalten, wenn jeder relative Lautstärkepegel über einen längeren Zeitraum beibehalten wird.

Ja, Echtzeit- oder zumindest simulierte Echtzeit-DSP mit Audio ist das, was ich versuche zu tun. Leider bin ich mir nicht sicher, ob ich weitere Details liefern kann :(. Ich bin daran interessiert, etwas mehr über den von Ihnen erwähnten Durchschnitt der langsamen Reaktion zu erfahren. Was ist mit der automatischen Verstärkungsregelung?
Martin Thompson
2010-11-29 21:13:45 UTC
view on stackexchange narkive permalink

Der einzige Weg, dies zu tun, besteht darin, sicherzustellen, dass Sie nicht sättigen können. Ihr Algorithmus hat vermutlich eine Art "maximale Verstärkung", was bedeutet, dass Sie am meisten wissen, dass das Signal pro Frame wachsen kann. Sie müssen sicherstellen, dass der erste Frame genügend Headroom hat, damit das Signal am Ende nicht gesättigt wird.

Ihr Beispiel enthält einen Zusatz, der (es sei denn, Sie wissen mehr als Sie bisher darüber gesagt haben). Erhöht Ihre Ausgabe um höchstens ein Bit gegenüber der Eingabe (mit mehr Wissen über das System können Sie möglicherweise sagen, dass der Durchschnitt über den gesamten Satz von Frames nicht mehr als z. B. 2,4 Bit beträgt). In diesem einfachen Fall müssen Sie bei 8 Frames 8 Bit Headroom über den Original-Samples lassen. Wenn Sie also mit 8 Bit abtasten und mit 16 Bit rechnen, sollten Sie in Ordnung sein.

Aber was ist, wenn meine Ausgabe wieder in 8 Bit sein muss? das ist mein problem Es ist nicht die Sättigung des für die Addition verwendeten Datentyps, der das Problem darstellt, sondern die Einschränkungen, die durch die Größe der Ausgabe auferlegt werden.
davidcary
2011-02-16 02:25:27 UTC
view on stackexchange narkive permalink

@Kellenjb, danke für die Bilder - ich denke, das hat mir geholfen, die Dinge sehr gut zu verstehen.

@Sriram, ich wünschte, Sie würden noch ein paar Worte zu was Sie sagen Wunsch würde passieren.

Ich vermute, dass das, was Sie wünschen passieren würde, so etwas wie "Ich möchte eine Ausgabe, die immer so laut ist wie." möglich - direkt am Rande des Clippings. Aber ich möchte nicht, dass sich die Lautstärke von einem Bild zum nächsten radikal ändert. Ich möchte, dass sich die Lautstärke mehr wie ein Mensch ändert, der den Lautstärkeregler während der leisen Teile langsam und etwas erhöht Verringern Sie die Lautstärke schneller, wenn der Clip beginnt. Ich möchte jedoch nicht, dass ein Mensch den Lautstärkeregler dreht. Ich möchte, dass die Software die Lautstärke automatisch für mich anpasst. "

I ' Ich gehe auch davon aus, dass Ihr System innerhalb von ein oder zwei Frames einen Datenrahmen ausspucken muss, um in Echtzeit in einen Datenrahmen zu gelangen. Daher darf ich nicht den gesamten Song analysieren und anschließend den perfekten auswählen Lautstärke und halten Sie es konstant t während des gesamten Songs.

Ich denke, Sie möchten eine Pipeline wie folgt einrichten:

(1) Eine Interrupt-Routine sammelt Daten in einem Puffer. Oft richten Leute 2 ein Speicherplatz für Frames: Diese Routine füllt langsam einen Frame aus, während die nächsten Schritte mit Daten im anderen Frame arbeiten. Wenn der eine Frame voll ist, ping-ping-Doppelpuffer-Schalter, um den anderen Frame zu füllen, während der nächste Stufen wechseln zur Arbeit mit dem einen Frame. Einige Leute, die Algorithmen wie endliche (FIR) Filter verwenden, puffern hier viele, viele Frames, die Speicherplatz wert sind.

(2) In der Hauptschleife "Hintergrund" die Software führt einen DSP-Algorithmus auf dem neuesten "vollständigen" Eingabepuffer aus und generiert einige Ausgabergebnisse im Ausgabepuffer. Oft wird ein Ausgabepufferspeicher im Wert von 2 Frames eingerichtet, sodass diese Routine schnell einen Ausgaberahmen ausfüllt, während die nächsten Stufen langsam ablaufen Daten aus dem anderen Frame mit einem Ping-Pong-Doppelpufferschema. Einige Leute, die Algorithmen wie Infinite (IIR) -Filter ausführen, puffern mit diesen Ausgabewerten viele, viele Frames im Wert von Speicher. In den meisten Fällen verwendet der DSP-Algorithmus die vorherigen Ausgaben dieser Stufe als Eingabe, nicht Die Ergebnisse der nächsten Stufen. In dieser Stufe stoßen die meisten Menschen auf Probleme mit Übersteuerung und Sättigung. Die meisten Antworten, die ich hier sehe, konzentrieren sich auf diesen Schritt. Aber aus Ihren Antworten geht hervor, dass Sie bereits herausgefunden haben, dass Sie es sind benötigen einen breiten Datentyp mit vielen "zusätzlichen" Genauigkeitsbits, um diese Zwischenwerte zu berechnen.

(3) In der Hauptschleife multipliziert die Software jeden Wert des Zwischenrahmens mit einem zu erzeugenden Skalierungsfaktor V. ein "skalierter Wert". (Dieser Wert wird in keinem Puffer gespeichert.)

(4) In der Hauptschleife reduziert die Software jeden "skalierten Wert" auf den endgültigen Ausgabetyp (8 Bit) ?) von Ihrem Ausgabegerät benötigt und speichern Sie das Ergebnis in einem weiteren Puffer. (Die Ausgabe dieser Stufe sollte mit ziemlicher Sicherheit nicht in Schritt 2 in den DSP-Algorithmus zurückgeführt werden. "The BTC Sound Encoder " von Roman Black ist einer der wenigen mir bekannten Algorithmen, bei denen eine solche Rückmeldung nützlich ist.

(5) Eine Interrupt-Routine entnimmt jeweils einen Sample vom Ausgang Puffer von (4) und spuckt es an das Ausgabegerät aus. (Dies kann auch eine doppelt gepufferte Ping-Pong-Anordnung verwenden.) Oft sind die Eingangsabtastrate und die Ausgangsabtastrate gleich (44100 Abtastwerte / s), und dieselbe Interruptroutine führt (5) und (1) aus.

Aus Ihrer Antwort an Martin habe ich den Eindruck, dass eine bestimmte feste Lautstärkeeinstellung V1 für V für einen Song und eine andere feste Lautstärkeeinstellung V2 für einen anderen Song angemessen sein kann. Stellen Sie sich vor, Sie könnte das ganze Lied anhören und eine perfekte Lautstärke für dieses Lied berechnen - wie würden Sie das tun? Ist es in Ordnung, wenn einige Samples des Songs abgeschnitten werden?

Vielleicht würde so etwas wie diese relativ einfache automatische Verstärkungsregelung (AGC oder VOGAD) Ihr Problem lösen:

  • Berechnen Sie jedes Mal, wenn Stufe 2 die Erstellung eines Frames beendet, einen neuen V-Wert, der wird verwendet, um die Samples in diesem Frame in Schritt 3 zu skalieren. Eine der einfachsten Möglichkeiten: Finden Sie den positivsten (Maximal-) und den negativsten Wert in diesem Frame und multiplizieren Sie beide Werte mit dem aktuellen V, das für den vorherigen verwendet wurde Rahmen. Überprüfen Sie, ob eines der Samples abgeschnitten wird (dh das Ergebnis liegt über +127 oder unter -127) oder kurz vor dem Abschneiden steht (dh über +63 oder unter -63), und stellen Sie die Volumenmultiplikator-VM entsprechend ein:

    • Wenn die Lautstärke zu niedrig ist (keiner der Samples schneidet ab, keiner der Samples befindet sich in der Nähe des Clippings), setzen Sie den Volume-Multiplikator auf eine Zahl, die etwas größer als 1 ist: VM = VM_UP, wobei VM_UP ist so etwas wie 1.01 oder 1 + 2 ^ (- 12).

    • Wenn die Lautstärke zu hoch ist (einige der Samples werden abgeschnitten oder zu viele Samples sind ebenfalls nah Clipping oder beides), setzen Sie den Volumenmultiplikator VM auf eine Zahl, die etwas kleiner als 1 ist: VM = VM_DOWN, wobei VM_DOWN etwa 0,98 oder 1 - 2 ^ (- 8) ist.

    • Wenn die Lautstärke in Ordnung aussieht (nicht zu hoch, nicht zu niedrig), behalten Sie VM = 1 bei.

  • In regelmäßigen Abständen (idealerweise einmal pro Probe) Wenn dies jedoch einmal pro Bild oder einmal pro Millisekunde oder einmal pro Zehntelsekunde zu viel Zeit in Anspruch nimmt, stellen Sie die Lautstärke mit einem sättigenden Mult neu ein iply:

    • V: = (V * VM).
    • Wenn V jetzt zu klein ist (weniger als V_min), setzen Sie V: = V_min.
    • Wenn V jetzt zu groß ist (mehr als V_max), setzen Sie V: = V_max.

Sie möchten die Kompilierungszeit optimieren Konstanten VM_UP und VM_DOWN, bis es subjektiv "richtig klingt". Stellen Sie VM_DOWN möglicherweise so ein, dass es bei sehr lauten Eingaben ein oder zwei Sekunden dauert, bis der Lautstärkeregler von der maximalen auf die minimale Lautstärke eingestellt ist. Stellen Sie VM_UP möglicherweise so ein, dass es bei absoluter Stille ungefähr zehn Sekunden dauert, bis der Lautstärkeregler sehr langsam von der minimalen auf die maximale Lautstärke eingestellt ist.

Sie können garantieren, dass Sie niemals sofort gesättigt werden Reduzieren der Lautstärke V, wenn ein Frame so aussieht, als ob es gesättigt wäre, so dass es (mit der reduzierten Lautstärke V) kaum die Spitzen von +127 oder -127 erreicht. Ich vermute jedoch, dass es besser klingt, die Lautstärke langsam zu reduzieren, und Lassen Sie einige Samples für ein paar Frames sättigen.

Es gibt eine Vielzahl komplizierterer Möglichkeiten zur (a) Erkennung von Hüllkurve / Peak / "Wahrnehmungslautstärke": Berechnen Sie eine Zahl, die angibt, ob ein Frame von Daten sind zu laut oder zu leise und um wie viel. Es gibt auch eine Vielzahl komplizierterer Möglichkeiten für eine AGC, (b) diese Nummer aus dem aktuellen Frame (und möglicherweise aus den letzten Frames) und der verwendeten Lautstärke zu verwenden während des letzten Frames, um das Volumen zu berechnen, das für das nächste Frame verwendet werden soll.

Weiterführende Literatur:

Chris H
2010-11-29 23:24:27 UTC
view on stackexchange narkive permalink

Sie können die lineare Vorhersagecodierung verwenden, um das Signal in ein "Residuum" und einen Filter zu komprimieren, um diesen Audiorahmen später neu zu erstellen. Es ist ziemlich kompliziert, aber hier ist ein gutes Papier. Wenn Sie den Rest genau behalten, ist dies ein verlustfreier Algorithmus. Sie können auch einfach weniger Bits verwenden, um den Rest zu codieren und eine gute Qualität beizubehalten.

J. Makhoul. Lineare Vorhersage: Ein Tutorial-Review. Proceedings of the IEEE, 63 (4): 561–580, April 1975.

In einem Kapitel in DAFX wurden MATLAB-Algorithmen für Sie geschrieben.

U. Zolzer, Herausgeber. DAFX - Digitale Audioeffekte. John Wiley & Sons, Ltd., Baffins Lane, Chichester, West Sussex, PO 19 1UD, England, 2002.

Grundsätzlich können Sie bei einem Eingangssignalrahmen eine spektrale Hüllkurve und einen Rest berechnen. Sehen Sie sich die Bilder unten an und notieren Sie die Amplitude des Residuums. alt text alt text

Verwenden Sie den Filter aus der zweiten Abbildung und geben Sie ihm den Rest, wenn Sie den Sound neu erstellen möchten. Beachten Sie, dass der Rest eine ziemlich stabile Amplitude hat, und notieren Sie die Einheiten. Sie müssen in der Lage sein, mindestens das zu codieren. Der Filter ist ein "LTI" -Filter und hat nette Eigenschaften, die Sie wahrscheinlich zum Kombinieren von Frames verwenden könnten.

Gibt es einen öffentlichen Link dazu?
Ich habe das gelesen und es tut mir leid zu sagen, dass ich das meiste verstanden habe. Ich verstehe nicht, wie es etwas behebt. Es scheint, dass Sie sagen, wenn Sie eine größere Verzögerung geben, können Sie die Lautstärke besser kompensieren.
Leider kein öffentlicher Link, aber ich weiß, dass das DAFX-Buch irgendwo online verfügbar ist. (google for a ebook) Ich füge keine Verzögerungen hinzu, mit Ausnahme der Verzögerungen bei der Implementierung des Filters in der zweiten Abbildung, mit der der Sound zu einem späteren Zeitpunkt neu erstellt wird. Dies betrifft nur die Codierung. Es wandelt ein Eingangssignal in einen Filter und einen Rest um. Der Rest hat eine winzige Amplitude und kann mit einer kleinen Anzahl von Bits codiert werden. Filter können hinzugefügt werden, indem sie in Reihe verwendet werden. Die Residuen können ohne Überlauf hinzugefügt werden, da sie kleine Werte haben, und als solcher als Zwischenschritt vor dem endgültigen Auslagern gespeichert werden
Ich bin nicht sicher, wie LPC das Problem lösen würde. Selbst wenn das Hinzufügen der Residuen nicht überläuft, würde das Falten mit dem Filter, um den ursprünglichen Frame zu erhalten, und das anschließende Umwandeln in einen Datentyp mit kürzerem Bereich zu einer Sättigung führen. Dieses Algo muss in Echtzeit (oder zumindest in simulierter Echtzeit) erfolgen, daher ist mein Zeitlimit für die Verarbeitung ebenfalls sehr niedrig.
Wenn Sie große Zahlen hinzufügen, können Sie diese natürlich nicht spielen. Du musst dich normalisieren. Ich sage, dass Sie diese Residuen als temporären Speicher verwenden können, um einen Überlauf zu vermeiden und den Dynamikbereich beizubehalten, bis Sie schließlich Ihr Ausgangssignal erreichen. Dies läuft in eingebetteten Systemen in Echtzeit. Es ist sogar billiger als eine FFT.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...