2013-01-17 4 views
5

Ich habe ein Signal, das ich in Matlab gemacht habe, das ich mit einem anderen Signal vergleichen möchte (nennen Sie sie y und z). Nach was ich suche, ist eine Weise, einen Wert oder einen Prozentsatz zuzuweisen, wie ähnlich zwei Signale sind.Der beste Weg, zwei Signale in Matlab zu vergleichen

ich versuche corrcoef zu verwenden, aber ich sehr schlechte Werte (corrcoef(y,z) = -0.1141), aber wenn ich an der FFT der beiden Grundstücke übereinander gelegt aussehen, hätte ich gesagt, visuell, dass sie sehr ähnlich sind. Ein Blick auf die Korrcoef der FFT der Größe der beiden Signale sieht viel vielversprechender aus: corrcoef(abs(fft(y)),abs(fft(z))) = 0.9955, aber ich bin mir nicht sicher, ob das der beste Weg ist, da die beiden Signale in ihrer reinen Form nicht scheinen korreliert sein.

Hat jemand eine Empfehlung, wie man zwei Signale in Matlab wie beschrieben vergleicht?

Danke!

+0

Ein besserer Ort für diese Frage ist dsp.stackoverflow.com. (Ich habe versucht, es zu verschieben, aber aus irgendeinem Grund war diese Seite keine Option.) –

+1

Gibt es einen dsp.stackoverflow? – toozie21

+0

sorry dsp.stackexchange.com –

Antwort

9

Die Frage ist unmöglich zu beantworten ohne eine klarere Definition dessen, was Sie mit "ähnlich" meinen.

Wenn Sie mit "ähnlich" "korrelierte Frequenzantworten" meinen, dann sind Sie dem Spiel einen Schritt voraus!

Im Allgemeinen ist die Definition der richtigen Metrik sehr anwendungsspezifisch; Sie müssen antworten warum Sie möchten wissen, wie ähnlich diese beiden Signale wissen, wie sie messen, wie ähnlich sie sind. Werden sie in dasselbe System eingegeben? Müssen sie vom selben Algorithmus erkannt werden?

In der Zwischenzeit ist Ihre Idee, die Freq-Domain-Korrelation zu verwenden, nicht schlecht. Aber Sie könnten auch

http://en.wikipedia.org/wiki/Dynamic_time_warping

Oder die Wahrscheinlichkeit der Zeitreihen unter verschiedenen statistischen Modellen berücksichtigen:

http://en.wikipedia.org/wiki/Hidden_Markov_model http://en.wikipedia.org/wiki/Autoregressive_model http://en.wikipedia.org/wiki/Autoregressive%E2%80%93moving-average_model

Oder eine beliebige Anzahl von anderen Modellen ...

Ich sollte hinzufügen: Im Allgemeinen der Korrelationskoeffizient betw Eine Zeitreihe ist eine sehr schlechte Metrik der Ähnlichkeit der Zeitreihe, außer unter sehr spezifischen Umständen (z. B. keine Phasenverschiebung).

+0

Ja, ich glaube, ich war nicht so klar, wie ich gehofft hatte, sorry. Was ich letztendlich tun wollte, war, mein Originalsignal zu "mixen", also ein paar Sachen dazu, "mixe" es wieder zusammen und sehe, wie nah es dem Originalsignal war. Ich wusste, dass es ein wenig anders sein würde, da ich nach den beiden Mischungen eine LPF und BPF hatte, also wollte ich bewerten, wie ähnlich es war. Leider bin ich mir nicht sicher, ob ich das geklärt habe, oder? – toozie21

+0

Es tut mir leid. Sie haben gefragt, was Sie für eine vernünftige Frage hielten. Jetzt hast du die lustigen Sachen vor dir! – Pete

6

Pete hat recht, dass Sie einen Begriff der Ähnlichkeit definieren müssen, bevor Sie fortfahren . Sie könnten normalisieren maximale Kreuzkorrelation Größe finden nützlicher Begriff der Ähnlichkeit für Ihre Situation zu sein, aber:

norm_max_xcorr_mag = @(x,y)(max(abs(xcorr(x,y)))/(norm(x,2)*norm(y,2))); 
x = randn(1, 200); y = randn(1, 200); % two random signals 
norm_max_xcorr_mag(x,y) 

ans = 0.1636 

y = [zeros(1, 30), 3.*x]; % y is delayed, multiplied version of x 
norm_max_xcorr_mag(x,y) 

ans = 1 

Dieser Begriff der Ähnlichkeit ist ähnlich rote Korrelation der beiden Sequenzen ist aber zu Zeitverzögerung invariant.