Frage

Das ist mein "Wochenende" Hobby Problem.

Ich habe einige sehr beliebte Single-Cycle-Wellenformen aus den ROMs eines klassischen Synthesizer.

Dies sind 8-Bit-Samples (256 mögliche Werte).

Weil sie nur 8 Bit sind, ist das Grundrauschen ziemlich hoch. Dies ist aufgrund Quantisierungsfehler. Quantisierungsfehler ist ziemlich seltsam. Es vermasselt alle ein wenig Frequenzen.

Ich mag diese Zyklen nehmen und „saubere“ 16-Bit-Versionen von ihnen zu machen. (Ja, ich kenne Leute, die schmutzigen Versionen lieben, also werde ich der Benutzer interpolieren zwischen schmutzig und sauber lassen, was auch immer Grad sie mögen.)

Es klingt unmöglich, nicht wahr, weil ich die niedrigen 8 Bits verloren haben immer, nicht wahr? Aber das hat eine Weile im Hinterkopf, und ich bin mir ziemlich sicher, dass ich es tun kann.

Beachten Sie, dass diese Single-Cycle-Wellenformen sind, die nur immer und immer wieder für die Wiedergabe wiederholt bekommen, so ist dies ein besonderer Fall. (Natürlich ist der Synthesizer tut alle möglichen Dinge der Sound interessant zu machen, einschließlich der Hüllkurven, Modulationen, filtert Cross-Fading, usw.)

Für jedes einzelne Byte Probe, was ich wirklich wissen, ist, dass es einer von 256 Werten in der 16-Bit-Version. (Man stelle dir den umgekehrten Prozess, in dem der 16-Bit-Wert abgeschnitten wird, oder auf 8 Bit gerundet.)

Meine Bewertungsfunktion versucht, das minimale Grundrauschen zu erhalten. Ich soll das beurteilen kann, mit einem oder mehreren FFTs.

Ein erschöpfende Prüfung würde wahrscheinlich für immer, so konnte ich eine niedrigere Auflösung nimmt zuerst passieren. Oder schiebe ich nur zufällig zufällig ausgewählte Werte um (in den bekannten Werten, die die gleiche 8-Bit-Version halten würden) und die Bewertung tun und die sauberere Version halten? Oder gibt es etwas schneller kann ich tun? Bin ich in Gefahr, in lokale Minima fallen, wenn es möglicherweise einige besseren Minima an anderer Stelle im Suchraum sein? Ich habe, dass in anderen ähnlichen Situationen passieren.

Gibt es anfängliche Vermutungen ich machen kann, vielleicht durch auf benachbarte Werten suchen?


Edit: Mehrere Leute haben darauf hingewiesen, dass das Problem leichter ist, wenn ich die Anforderung entfernen, die die neue Wellenform des ursprünglichen Probe würde. Das ist richtig. In der Tat, wenn ich suche nur für sauberere Sounds, die Lösung ist trivial.

War es hilfreich?

Lösung

mit dem Ansatz in Frage, würde ich Hill-Climbing Algorithmen suchen in schlagen und dergleichen.

http://en.wikipedia.org/wiki/Hill_climbing Weitere Informationen hat diese an und die Sidebox hat Links zu anderen Algorithmen, die besser geeignet sein kann.

AI wie Alchemie -. Wir nie das Endziel erreicht, aber viele gute Sachen kamen auf dem Weg heraus

Andere Tipps

Sie können Ihre bestehende 8-Bit-Probe in das höherwertige Byte der neuen 16-Bit-Probe gestellt, und verwenden Sie dann das niederwertige Byte auf lineare Interpolations einige neuen 16-Bit-Datenpunkte zwischen jeder ursprünglichen 8-Bit-Probe.

Dies würde im Wesentlichen einen 16-Bit-Gerade zwischen jedem Ihrer ursprünglichen 8-Bit-Samples, mit mehreren neuen Proben verbinden. Es wäre klingt viel leiser als das, was Sie jetzt haben, das ist ein plötzlicher, 8-Bit-Sprung zwischen den beiden ursprünglichen Proben.

Sie könnten auch versuchen, einige Tiefpassfilterung .

Nun, würde ich einig FIR-Filterung erwarten (IIR, wenn Sie wirklich Verarbeitungszyklen benötigen, aber FIR bessere Ergebnisse ohne Instabilität geben kann), um den Lärm zu bereinigen. Sie müßten mit ihm spielen um den gewünschten Effekt zu erhalten, aber das Grundproblem ist die scharfen Kanten in dem durch Abtasten es bei 8-Bit-Auflösung erstellt Audio glättet. Ich würde eine große Geburt auf die Mittenfrequenz des Audio geben und einen Tiefpassfilter tun, und dann hören, damit ich es nicht klingen „flach“ mit dem Filter ich gepflückt.

Es ist zwar hart, es ist nur so viel Sie tun können, werden die unteren 8 Bit verloren geht, ist das Beste, was Sie tun können, es nähern.

Es ist fast unmöglich, Lärm, um loszuwerden, die wie Ihr Signal aussieht. Wenn Sie tweeking Material in Ihrem Frequenzband beginnt er das Signal von Interesse nehmen.

Für Upsampling, sind da Sie bereits eine FFT verwenden, können Sie Nullen an das Ende des Frequenzbereichssignal addieren und tun eine inverse FFT. Diese vollständig bewahrt die frequecy und Phaseninformationen des ursprünglichen Signals, obwohl sie die gleiche Energie über mehr Proben verteilt. Wenn Sie es verschieben 8bits zuerst ein 16-Bit-Proben zu sein, wird dies kein allzu großes Problem sein. Aber ich es in der Regel mit einem ganzen Zahl Verstärkungsfaktor aufwirbeln, bevor Sie die Transformation.

Pete

Edit: Die Kommentare sind immer ein wenig lang, so werde ich einige auf die Antwort bewegen.

Die Peaks in der FFT-Ausgabe sind harmonische Spitzen durch die quantitization verursacht. Ich neige dazu, von ihnen anders als das Grundrauschen zu denken. Sie können Dithering als jemand erwähnt und die Amplitude der harmonischen Spitzen beseitigen und das Grundrauschen abflachen, aber Sie verlieren über alle Signal-Rausch auf dem flachen Teil Ihres Grundrauschen. Soweit die FFT betroffen ist. Wenn Sie mit dieser Methode interpoliert werden, behält es die gleiche Energie und erstreckt sich über mehr Proben, dies die Amplitude reduziert. Also, bevor die inverse tun, geben Sie Ihrem Signal mehr Energie mit einem Verstärkungsfaktor von multipling.

Sind die Signale einfach / komplex Sinusoide, oder haben sie harte Kanten haben? das heißt Dreieck, Quadrat Wellen, etc. Ich gehe davon aus sie Kontinuität von Zyklus zu Zyklus haben, ist, dass gültig? Wenn ja, können Sie auch Ihre FFT-Auflösung erhöhen, um mehr genau lokalisieren Frequenzen, die durch die Anzahl der Wellenformzyklen zu erhöhen, um Ihre FFT zugeführt. Wenn Sie genau die Frequenzen nutzen identifizieren können, vorausgesetzt, sie etwas diskreter sind, können Sie in der Lage sein, vollständig das beabsichtigte Signal neu zu erstellen.

Der 16-Bit auf 8-Bit über Verkürzungs Anforderung werden die Ergebnisse erzeugen, die die Originalquelle nicht übereinstimmen. (Was somit schwieriger, eine optimale Antwort zu finden.) In der Regel würden erzeugen Sie eine feste Punkt-Wellenform, indem er versucht, „das nächste Spiel zu bekommen“, die auf die nächste Zahl bedeutet Rundung (Trunking ist eine Bodenbetrieb). Das ist sehr wahrscheinlich, wie sie ursprünglich erzeugt. Zugabe von 0,5 (in diesem Fall 0,5 128) und dann die Ausgabe Trunking Sie erlauben würde, um genauere Ergebnisse zu generieren. Wenn das nicht eine Sorge ist dann in Ordnung, aber es wird auf jeden Fall eine negative Auswirkung auf die Genauigkeit haben.

AKTUALISIERT: Warum? Da das Ziel ein Signal des Abtastens ist das Signal so nahe einer möglichen reproduce der Lage sein. Wenn die Konvertierung Schwelle schlecht auf die Probenahme festgelegt ist alle sind Sie Fehler auf einer Seite des Signals ist und nicht gut verteilt und zentriert um Null. Auf solchen Systemen versuchen Sie in der Regel die Verwendung der availiable Dynamikbereich zu maximieren, insbesondere wenn Sie mit niedriger Auflösung wie ein 8-Bit-ADC haben.

Band begrenzte Versionen? Wenn sie bei verschiedenen Frequenzen gefiltert werden, würde ich vermuten, dass es Ihnen zu ermöglichen, den gleichen Ton mit mir Verzerrungen zu spielen, wenn Sie zu weit gingen von der anderen Variante. Ein bisschen wie in Grafiken Mipmapping. Ich vermute, dass die beide das gleiche Signal mit unterschiedlichen Aliasing-Filter angewandt werden, das bei der Wiedergabe der ursprünglichen nützlich sein kann. Sie sollen das gleiche Basissignal mit unterschiedlichen Faltungen angewandt werden.

Es könnte ein einfacher Ansatz seinen advantange der Periodizität der Wellenformen. Wie wäre es, wenn Sie:

  1. Erstellen Sie eine 16-Bit-Wellenform, wo die hohen Bytes sind die Wellenform und die niedrigen Bytes Null -. Nennen es x [n]

  2. Berechnen der diskreten Fourier-Transformation von x [n] = X [w].

  3. Machen Sie ein Signal Y [w] = (dBMag (X [w])> Threshold)? X [w]: 0, wobei dBMag (k) = 10 · log 10 (real (k) ^ 2 + imag (k) ^ 2) und Threshold ist vielleicht 40 dB, bezogen auf 8 Bit ungefähr 48 dB Dynamikbereich zu sein, und ermöglicht ~ 1,5 Bits Lärm.

  4. Inverse-Transformation Y [w] erhalten y [n], Ihre neue 16-Bit-Wellenform.

  5. Wenn y [n] nicht schön klingen, Dithering es mit einigem sehr niedrigen Niveau Lärm.

Weitere Informationen:

A. Diese Technik ist nur in den ursprünglichen Wellenformen arbeitet exakt periodisch!

B. Schritt 5 könnte mit Einstellung die Werte „0“, um zufällige Rauschen in Y [w] in Schritt 3 ersetzt werden, würden Sie ein wenig experimentieren, um zu sehen, was besser funktioniert.

Das scheint einfacher (zumindest für mich) als einen Optimierungsansatz. Aber abgeschnittene y [n] wird wahrscheinlich nicht zu Ihrem ursprünglichen Wellenformen gleich sein. Ich bin nicht sicher, wie wichtig diese Einschränkung ist. Ich fühle mich wie dieser Ansatz Wellenformen erzeugen, die gut klingen.

scroll top