Wie kann man Frequenzkomponenten bestimmen, die in einem verzerrten Signal vorhanden sind, wobei der Satz möglicher Komponenten bereits bekannt ist?

Ich versuche, den besten Ansatz zu wählen, um ein Signal digital zu analysieren, das eine Mischung aus einer unbekannten Anzahl (aber weniger als 16) Grundsignalen bei bestimmten Frequenzen (z. B. Sinus) ist.

Das Ziel besteht darin, zu bestimmen, welche der Grundsignale in dem Signal vorhanden sind.

Einige der Grundsignale könnten verzerrt sein, sodass sie eigentlich eher Rechteckwellen als Sinuswellen ähneln.

Ich kann entscheiden, was die Grundsignale sein werden, einschließlich ihrer Frequenzen, Wellenformen und Amplituden, da ich sie digital erzeugen werde.

Ich habe jedoch keine Kontrolle über den Verzerrungsprozess, der die Amplitude der Grundsignale um einen unbekannten Betrag erhöhen kann, was zu einer Verzerrung einiger oder aller Grundsignale führt.

Der Analyseansatz sollte robust sein, sodass er auch dann noch herausfinden kann, welche Signale vorhanden sind, wenn alle Grundsignale verzerrt wurden.

Die Grundsignale haben offensichtlich alle eine begrenzte Bandbreite, und die Gesamtbandbreite, in die die Grundsignale passen, ist ebenfalls begrenzt.

Eine Idee, die ich bereits hatte, besteht darin, die Amplitude der Grundsignale über ein kurzes Zeitfenster zu erhöhen, sodass sie für einen kurzen Moment im Fenster unverzerrt durchkommen, was die Erkennungsaufgabe mit einer FFT erleichtert .

Aber vielleicht gibt es einen viel besseren Weg, damit umzugehen? Ich habe andere Techniken wie Wavelets, Kalman-Filter usw. nicht erforscht, und um ehrlich zu sein, sind meine Kenntnisse in der Signalverarbeitung etwas begrenzt.

Hallo @b20000, willkommen bei Physics.SE! Mir ist nicht ganz klar, was Sie fragen. Sie können Ihre Eingangswellen frei wählen und möchten diese nur rekonstruieren können? Wenn Sie bereits wissen, nach welchen Frequenzen Sie suchen (zB indem Sie sich für den Eingang entschieden haben), ist es viel einfacher, Ihr Signal neu zu erstellen. Sie können nämlich das Signal einfach reinigen und anpassen - anstatt irgendetwas Komplexes wie eine FFT.
@zhermes thx, was ich suche, ist der beste Ansatz, um ein Signal zu analysieren und die im Signal vorhandenen Komponenten zu bestimmen. Ich kann wählen, was diese Komponenten sind (z. B. Sinuswellen bei bestimmten Frequenzen), und ich weiß, dass sie durch einen bestimmten Prozess mit unbekannten Amplituden zusammengemischt werden und dass einige von ihnen möglicherweise verzerrt werden.

Antworten (1)

Ganz allgemein gesprochen und die Terminologie etwas lockerer verwenden:

Verzerrungen sind in der Regel harmonisch, was vereinfacht bedeutet, dass Vielfache des Grundtons erzeugt und dem Signal hinzugefügt werden. Wenn Ihr ursprüngliches Signal also eine Sinuswelle bei 100 Hz ist, erhalten Sie neue Signalkomponenten bei 200, 300, 400 usw. in Ihrem verzerrten Signal. Verzerrungen können unabhängig von der Signalintensität auftreten (z. B. wenn die positiven und negativen Seiten eines Signals unterschiedlich verstärkt werden oder wenn eine Verzerrung am Nulldurchgangspunkt auftritt, was bei einigen Arten von Transistorschaltungen üblich ist). Darüber hinaus werden Sie immer etwas Rauschen in Ihren FFT-Bins bekommen, und Sie müssen einen Schwellenwert haben, um das vom Signal zu unterscheiden. Verlassen Sie sich also nicht auf Ihre Low-to-High-Technik, wenn Sie Ihre Verzerrung nicht a priori kennen.

Die Lösung besteht also darin, Frequenzen so auszuwählen, dass ihre Grundschwingungen nicht mit anderen Harmonischen übereinstimmen. Beispielsweise sind 100 Hz und 150 Hz gute Ausgangspunkte, da 150 kein Vielfaches von 100 ist. Offensichtlich sind Sie durch die Bin-Größe Ihrer FFT und die Frequenz des tiefsten ausgewählten Tons begrenzt. Ob Sie also 16 Töne erhalten können, hängt von Ihrer Abtastrate und Ihrer FFT-Bin-Größe ab (was sich darauf auswirkt, wie schnell Sie Ihre Ergebnisse erhalten können). Bei 44 kHz könnten Sie 1 kHz, 1,5 kHz, 1,75 kHz usw.

Sie können die Auswirkungen der Verzerrung auch mit einem Tiefpassfilter reduzieren, wenn Sie nicht erwarten, dass es zu schlimm wird. Dies wird dazu beitragen, die Grundfrequenz anstelle der höherfrequenten Vielfachen hervorzuheben.

Sie können auch ausgefeilter werden und versuchen zu erraten, welches Signal durch welche Oberwellen vorhanden ist. Wenn Sie zB 200, 300 und 400 sehen, haben Sie wahrscheinlich mit einem 100-Hz-Ton und nicht mit einem 200-Hz-Ton begonnen. Dies kann ein wenig fehleranfällig werden, da Sie Verzerrungen haben können, die bestimmte Harmonische überspringen, und Rauschen kann wie eine Harmonische aussehen, aber es ist ein Trick, den Sie verwenden können, wenn Sie anspruchsvoller werden müssen.

Schließlich können Sie die Grenzen Ihres Problems überschreiten und so etwas tun, wie Ihre Töne zeitlich wechseln zu lassen.

Informieren Sie sich auch über DTMF , das ein ähnliches Problem löst. Ich habe vielleicht etwas übersehen.

Danke für deine Antwort. Wollen Sie damit sagen, dass die Töne idealerweise Grundfrequenzen haben müssten? Ich denke, das ist eine Art von DTMF. Danke für die Erinnerung. Ich frage mich jetzt, ob FFT der beste Ansatz dafür ist oder ob Wavelets oder etwas anderes besser funktionieren würden.
Im digitalen Bereich wird DTMF normalerweise unter Verwendung des Goertzel-Algorithmus dekodiert. Wie die FFT ist der Goertzel-Algorithmus im Wesentlichen eine DFT-Implementierung, die auf Leistung ausgelegt ist.
Die Signale und die Harmonischen müssen weit genug voneinander entfernt sein, damit sie keine überlappenden FFT-Bins haben. Die Wahl von Primzahlen garantiert dies nicht.