2010-11-21 1 views
1

Angenommen, ich habe drei komplexe Wellenformen (bestehend aus vielen Sinuswellen): A, B und C. Jede hat die folgende Frequenz: 550, 600, 700 Hz.Fourier-Serie Transformieren Original-Signale wiederherstellen

Nun füge ich die drei Signale das heißt eine Überlagerung tun D. die drei ursprünglichen Signale A, B und C getrennt, um wieder zu bekommen Signal

Mein Ziel.

Ich habe das Fourier-Spektrum gezeichnet, wo ich die Hauptpeaks bei 550, 660 und 700 Hz bekomme. Es gibt andere kleinere Spitzen. Woher weiß ich, welche Peaks mit welchen Wellenformen verknüpft sind, damit ich die ursprünglichen Wellenformen A, B und C neu erstellen kann? Vielen Dank.

Antwort

1

Ohne zu wissen, welche Technologie Sie verwenden (ein DSP-Chip, FFTW, etc.) ist es unmöglich, Ihnen Details zur Implementierung zu geben. Aber ja, wenden Sie eine schnelle Fourier-Transformation an, und nehmen Sie dann an, dass Sie drei reine Sinuswellen bei 550, 600 und 700 rekonstruieren wollen. Die FFT gibt Ihnen die Amplitude und Phase für jeden. Dann wird ein einfacher Sinus-Ausdruck der Form y=a*sin(wt+p) das Signal rekonstruieren. "a" und "p" sind die Amplitude und Phase von der FFT und w = 2 · pi * f, wobei f 550 Hz, 600 Hz oder 700 Hz ist.

+0

Ich benutze nur schnelle Fourier-Transformationsgleichung und Schreibcodes. Das Hauptproblem ist, dass ich keine reinen Sinuswellen rekonstruieren will. Denken Sie daran, dass jede der Wellen A, B und C aus vielen Sinuswellen besteht. ZB könnte A eine Rechteckwelle, B eine Dreieckswelle usw. sein und mein Ziel ist es, sie von Signal D zu rekonstruieren, wie oben erklärt – user515285

+0

Wenn A, B oder C eine Rechteckwelle, Dreieckwelle oder irgendetwas außer einer Sinuswelle ist, dann kannst du rekonstruiere es nicht von einer einzigen Frequenz im Spektrum. Du brauchst auch seine Obertöne. Erstens empfehle ich, dass wenn Sie C/C++/C#/so ziemlich alles außer einem eingebetteten System verwenden, Sie eine FFT-Bibliothek wie FFTW verwenden. Zweitens, lesen Sie http://cnx.org/content/m0041/latest/. Für die 550Hz-Welle müssen Sie die Grundwelle bei 550Hz sowie eine ordentliche Anzahl von Oberwellen bei 2 * 550, 3 * 550, 4 * 550, 5 * 550, usw. nehmen. – Reinderien

+0

Aus der Fourier-Serie wird jede Frequenz multipliziert durch einen konstanten Faktor, wie du richtig angemerkt hast. Aber woher weiß ich, mit was man jede Frequenz multiplizieren soll? Der Faktor könnte alles und nicht unbedingt 2,3,4,5 ... sein (wie oben erwähnt, d. H. 2 * 550, 3 * 550 ...). Bitte beachten Sie, dass ich von Wellenform D die drei Signale A B C rekonstruieren muss, über die ich keine a priori Informationen habe. Ich habe gerade quadratische und dreieckige Wellen als Beispiel genannt. Aber sie könnten alles sein. – user515285

5

Wenn A, B und C keine reinen Sinuswellen sind, ist das, was Sie tun möchten, ohne zusätzliche Informationen nicht möglich. Angenommen, A ist eine Summe von Sinuswellen mit den Frequenzen 100 und 200 Hz, B mit 300 und 400 Hz und C mit 500 und 600 Hz. Betrachten wir nun das Signal D mit den Frequenzen 100 und 300 Hz, E mit den Frequenzen 200 und 500 Hz und F mit den Frequenzen 400 und 600 Hz, jede Komponente mit der gleichen Phase und Amplitude wie die Komponenten A, B und C. (A + B + C) haben die gleiche FFT wie (D + E + F), so dass man sie nicht unterscheiden kann.

+0

Zustimmen. Aber wenn ich die kombinierten drei Wellen höre, kann ich deutlich finden, dass es drei Wellen gibt. Wenn ich es hören kann, muss es eine Möglichkeit geben, die Wellen mit einem Programm zu trennen. – user515285

+0

@user: Vielleicht hat das Signal, das Sie gerade hören, besondere Eigenschaften, die die Unterscheidung der A-, B- und C-Komponenten erleichtern - z. jeder von A, B und C hat die Form einer starken Grundschwingung plus einer Reihe schwächerer Oberschwingungen. Das würde unter die "zusätzliche Information" fallen, auf die ich in meiner Antwort hingewiesen habe - aber das Problem, wie Sie es gesagt haben, ist im Allgemeinen nicht lösbar. –

2

Es ist wichtig zu wissen, dass Sie eine window function vor der FFT anwenden müssen, sonst erhalten Sie Artefakte im Frequenzbereich von der Wirkung des impliziten rechteckigen Fensters, das Sie auf Ihre Zeitdomäne anwenden. Eine gute Allzweckfensterfunktion ist die Hann (aka Hanning) window.

0

Müssen Sie irgendwelche komplexen Signale hinzufügen? Haben sie ein Muster? Wenn Sie irgendeine Form von Signal abrufen möchten, wird es unmöglich sein. Aber in einigen Fällen, in denen Sie ein Einschränkungsmaterial haben, können Sie daran arbeiten. In Melodyne zum Beispiel können sie etwas Material von tonhöhenbestimmten Instrumenten trennen: http://www.youtube.com/watch?v=jFCjv4_jqAY

+0

Wie bei Reindien und Sie erwähnen das oben, wäre es möglich, dies zu erreichen, wenn ich das Muster von A B oder C kenne. Aber der Punkt ist, dass ich mir vorstellen muss, was es ist. Ich bekomme gerade die Wellenform D. Daraus muss ich die drei Signale rekonstruieren. Wenn ich mir das Fourier-Spektrum anschaue, sehe ich viele Oberschwingungen, aber ich weiß nicht, welche man wählen soll, um die drei Wellen AB oder C zu erhalten. – user515285

+0

Ich glaube nicht, dass man A, B oder C abrufen kann Wenn Sie völlig ahnungslos sind ... AB oder C können eine unendliche Menge möglicher Signale sein! – Nemeth