2010-08-19 6 views
6

Ich suche nach einem einfachen (Pseudo-) Code, der Spektrum-inverse ein abgetastetes Audiosignal. Idealerweise C++Wie zu Spektrum-inverse ein abgetastetes Audiosignal

Der Code sollte verschiedene Abtastraten unterstützen (16/32/48KHz).

+1

Was ist "spektrum-invers"? Lustige Sache ist, Google hat deine Frage hier als erster Schlag geoffenbart. Sie möchten den Kehrwert von Phase und Amplitude für jede Frequenz? Oder willst du einfach nur eine IFFT? Oder etwas ganz anderes? – zerm

+0

Entschuldigung für mein unprofessionelles Vokabular: Ich möchte, dass die tiefen Frequenzen die hohen werden und umgekehrt (DC-Offset wird ein Sinus mit der halben Abtastfrequenz). –

+1

Jetzt bin ich sehr neugierig zu hören, wie das klingen würde ... – PeterAllenWebb

Antwort

6

Durch Mischen des Signals mit Fs/2 werden hohe Frequenzen und niedrige Frequenzen vertauscht - denken Sie daran, das Spektrum um den Einheitskreis um eine halbe Umdrehung zu drehen. Sie können diese Drehung erreichen, indem Sie jeden zweiten Abtastwert mit -1 multiplizieren.

Mischen durch Fs/2 entspricht dem Mischen durch exp(j*pi*n). Wenn x ist der Eingang und der Ausgang y,

y[n] = x[n] * exp(j*pi*n) = x[n] * [cos(pi*n) + j*sin(pi*n)] 

dies leicht vereinfacht, weil sin(pi*n) 0 ist, und wird alternierend cos(pi*n) 1, -1.

+0

So einfach ... Unglaublich –

+2

Dieser Trick kommt viel in DSP. Wenn Sie beispielsweise einen Hochpassfilter entwerfen möchten, ist es normalerweise einfacher, einen Tiefpassfilter mit dem gewünschten Cutoff-Anteil zu entwerfen und ihn dann um den Einheitskreis herum zu drehen, um einen Hochpassfilter zu erhalten. – mtrw

1

Um etwas zu erhalten, die die gleiche Art von zeitlicher Struktur wie das Original hat, müssen Sie

  • ein Spektrogramm erstellen (mit einiger Fenstergröße)
  • einige oberen und untere Frequenzgrenzen auswählen, das Sie werden Flip
  • der
  • resynthetisieren ein Tonsignal im Einklang mit diesen Frequenzen innerhalb dieser Grenzen Intensitäten des Spektrogramm Flip

Da es sich um ein Audiosignal handelt, spielt es keine Rolle, dass die Phasen durcheinander sind. Sie können sie sowieso nicht hören. Mit Ausnahme des Flipping-Teils führt ARSS die Spektrogramm-Erstellung und Sound-Resynthese durch.

Andernfalls können Sie einfach eine FFT nehmen, die Amplituden der Komponenten invertieren und die inverse FFT nehmen. Aber das wird im Wesentlichen unsinnig sein, da es die zeitliche Struktur des Klanges sowie die Frequenzstruktur vollständig durcheinander bringen wird.

+0

Danke, ARSS benutzt Frequenzfilterbank, also kann ich nur die Frequenzbins umkehren.Ich frage mich, ob es eine mathematische Manipulation gibt, die die Frequenzen "glatt" umkehrt (ohne sie in Bins zu teilen). –

+0

Sie können Wavelets verwenden, die nicht explizit als Binned-Objekte klassifiziert sind, aber in Ihrem Fall spielt das kaum eine Rolle. Niederfrequente Töne ändern sich viel langsamer als hochfrequente Töne, so dass der Flipp die Glätte ohnehin verändert. –

0

es macht nicht viel Sinn, einen Kosinus zu verwenden. Für ein digitales Signal ist es nicht notwendig, hier ein echtes ringmod zu betreiben, bei nyquist ist ein consine sowieso ein Quadrat.

so würden Sie einfach jedes andere Beispiel mit * -1 multiplizieren und fertig.

keine Latenz, kein Aliasing, nichts.

+0

Dies ist, was die angenommene Antwort sagt. –

Verwandte Themen