2016-07-20 18 views
2

Im Rekonstruieren Signal von Amplitude, Frequenz und Phase fft erhalten. Nachdem ich fft gemacht habe, wählte ich einige seiner Frequenzen aus und rekonstruierte das Zeitliniensignal aus diesen fft-Daten. Ich weiß, IFFT ist dafür, aber ich möchte nicht IFFT verwenden. Die Rekonstruktion scheint in Ordnung zu sein, aber es gibt einige Zeitverzögerungen zwischen zwei Signalen. Dieses Bild zeigt dieses Problem. Schwarz ist das ursprüngliche Signal und Rot ist das rekonstruierte. enter image description hereSignal von fft rekonstruieren

Wenn ich es richtig weiß, Amplitude-Frequenz-Bin t sqrt(real[t]*real[t] + imag[t]*imag[t] und Phase ist atan2(imag[t], real[t]). Also, ich habe Formel für eine Frequenz bin. Und ich habe diese regenerierten Wellen summiert. Soweit ich weiß, sollte dies intakte Signalanpassungen zum ursprünglichen Signal erzeugen. Aber es endet immer mit einer gewissen Verzögerung vom ursprünglichen Signal.

Ja, ich denke es ist Phase, aber das ist so einfach zu berechnen und es funktioniert richtig. Wenn es einen Fehler hat, würde das rekonstruierte Signal nicht zu seinem ursprünglichen Signal passen.

Dies ist der Code zum Generieren einer Kosinuswelle. Ich habe eine Kosinuswelle von sin (x + π/2) erzeugt.

std::vector<short> encodeSineWavePCM(
    const double frequency, 
    const double amplitude, 
    const double offSetPhase) 
{ 
    const double pi = 3.1415926535897932384626; 
    const int N = 44100; // 1 sec length wave 
    std::vector<short> s(N); 
    const double wavelength = 1.0 * N/frequency; 
    const double unitlength = 2 * pi/wavelength; 
    for (int i = 0; i<N; i ++) { 
     double val = sin(offSetPhase + i * unitlength); 
     val *= amplitude; 
     s[i] = (short)val; 
    } 

    return s; 
} 

Was fehlt mir?

+1

Sie müssen Ihre Frage nicht erneut posten, Sie sollten Ihre ursprüngliche Frage bearbeiten, um die Diskussion zu bewahren. –

+1

"Ich weiß, IFFT ist dafür" - und es ist die _only_ Transformation, die Ihnen das Original zurückgibt. Aber warum die irrationale Abneigung gegen die IFFT? – MSalters

+0

für Testzwecke. Das ist ein Tonsignal und ich versuche, aus den Hauptfrequenzen des Originalsignals einen Originalton zu machen. Muss es den gleichen Klang haben, wenn ich jede Frequenz gleichzeitig spiele? –

Antwort

1

Ganz normal. Sie machen eine Frame-für-Frame-Transformation. Das bedeutet, dass der FFT-Frame nach ein Zeitfenster produziert wird. Bei der Rücktransformation haben Sie den umgekehrten Effekt: Ihr Zeitrahmen beginnt nach der FFT-Rahmen wurde decodiert.

+0

Das scheint richtig. Das rekonstruierte Signalplot passt nach seinem ursprünglichen Signal. Aber das wird immer verwirrender. :( –

+0

Könnten Sie plz erklären, warum das passiert? So weit ich verstehe, Fourier Series nur Signal in seine Frequenzdomäne.Wie Zeitrahmen kann beteiligt sein? –

+0

Verwechseln Sie die Dinge nicht.Fourier Series ist eine verwandte Sache, nicht eine FFT Die Fourier-Reihe ist ein mathematisches Konstrukt für ein periodisches Signal, das zu einem beliebigen Zeitpunkt definiert wird.Sie haben sehr viel diskretes Signal, und die FFT arbeitet daran.Wie groß ist Ihr Eingangston (in Samples) und wie viele Proben gehen an die FFT? Sie sind wahrscheinlich nicht die gleichen. – MSalters