Ich arbeite im Bereich der Biosignal-Akquisition. Ich habe ein Experiment wie unten beschrieben durchgeführt und versuche nun, einige Ergebnisse aus den Daten zu erhalten.Matlab: Berechnung Signal-Rausch-Verhältnis (SNR) von zwei hochkorrelierten Zeit-Domain-Signale
Ich habe eine Textdatei eines Signals in Matlab. Ich habe das Signal auf einen Wellenformgenerator geladen und dann den Generatorausgang auf einem Oszilloskop aufgezeichnet. Ich habe das aufgenommene Signal vom Oszilloskop zurück in Matlab importiert. Der Pearson-Korrelationskoeffizient zwischen dem Originalsignal und dem Oszilloskopsignal beträgt 0,9958 (erhalten mit der Corrcoeff-Funktion).
Ich möchte das SNR des Oszilloskopsignals berechnen (was ich mein Signal nenne und welches Rauschen durch die Digital-zu-Analog-Umwandlung eingeführt wird und umgekehrt). Ich habe ein Snippet der 2 Signale als Referenz beigefügt.
Also mein Original-Signal ist X und Oszilloskop-Signal ist X + N. Ich habe die SNR-Funktion verwendet, um SNR wie folgt zu berechnen.
Das Ergebnis war 20,44 dB. Dies scheint mir, wie ich mit einer so hohen Korrelation gedacht hätte, dass das SNR viel höher sein sollte?
Oder ist es nicht angemessen zu versuchen, SNR in einer solchen Situation zu berechnen?
Alle Hilfe ist willkommen.
Dank
Edit: Graph von ein paar Ergebnisse vs Sleutheye simulierte Beziehung
Das ist eine großartige Antwort, danke. Ich habe meinen Korrelationswert mit 'corrcoef' anstelle von' xcorr' erhalten. Habe ich richtig gedacht, dass 'xcorr' in der Art ' C (i) = xcorr (x, z, 0) ./ sqrt (Summe (x. * X) * Summe (z. * Z)); ' im wesentlichen das gleiche ist, wie Sie die Berechnung: ' Kovarianz (x, z)/sqrt (Varianz (x) * Varianz (z)) ' , die gibt immer einen Wert zwischen +/- 1 , das ist das gleiche wie Pearson? Auch ich verstehe Ihren endgültigen Fall nicht vollständig. Ich habe die Formel nicht gesehen (Korrelation^2/(1-Korrelation^2)) = Rauschstandardabweichung vor? Nochmals vielen Dank – markos14
Auch eine triviale Frage, aber warum gibt es ein Minus in Ihrer dB/Betrag Berechnungen, sowohl im Matlab-Code ('-SNR (i)') und der letzte Fall (der sich auf die letzte bezieht Teil meines vorherigen Kommentars). – markos14
1) mit 'corrcoef' vs' xcorr': sie sind nicht gleichwertig. 'xcorr (x, z, 0)' berechnet 'sum (x. * z)' was nicht dasselbe ist wie 'cov (x, z) = Summe ((x-mean (x)). * (z-mean (z)). "Auch Pearsons Korrelation ist nicht definiert 2) Die Formel ist spezifisch für das Signal beteiligt. Es ist eine Ableitung beteiligt (z. B. E {Summe (x. * X)} = M, E {Summe (z. * Z)} = M (1 + σ^2), ...) 3) Der Code verwendet ein negatives Vorzeichen (für dB/mag), weil es die Stärke des Rauschens relativ zu einem Signal einheitlicher Größe berechnet. Wenn ich ein Rauschen mit einheitlicher Amplitude verwendet hätte und stattdessen das Signal skaliert hätte, wäre das ein positives Zeichen. – SleuthEye