2016-10-05 4 views
1

Die Frage ist einfach genug, aber ich kann nicht verstehen, was ich vermisse. Also ich habe eine Aufnahme, zuerst ich es mit 128 Proben 50% überlappend, dann für jeden Rahmen ich möchte die Energie des Rahmens berechnen. Also ich berechne es, aber wenn ich es auf 0db normalisieren will, bekomme ich seltsame Ergebnisse. Hier ist mein Matlab-Code:normalisieren Signal Energie auf 0db

for i=1:size(dataF,2) 
E(:,i)=20*log10((abs(dataF(:,i)).^2)); 
emax(:,i)=max(E(:,i)); 
E1(:,i)=E(:,i)/emax(i); 
end 

Hier wird die Ausgangsenergie für den ersten Frame und unten ist die normalisierte Energie auf 0 dB, aber es ist nicht korrekt enter image description here enter image description here

Irgendwelche Vorschläge wirklich zu schätzen. Danke im Voraus.

Antwort

0

Um jeden Frame auf 0 dB zu normieren, muss man den Logarithmus durch vor dividieren. Außerdem müssen Sie wahrscheinlich den Faktor 20 von 10 ersetzen, da Sie bereits die Daten im Quadrat:

for i = 1:size(dataF,2) 
    dataFmax(:,i) = max(abs(dataF(:,i)).^2) 
    E1(:,i) = 10*log10((abs(dataF(:,i)).^2)/dataFmax(:,i)); 
end 

Alternativ können Sie subtrahieren das Maximum nach dem Logarithmus:

for i=1:size(dataF,2) 
    E(:,i) = 10*log10((abs(dataF(:,i)).^2)); 
    emax(:,i) = max(E(:,i)); 
    E1(:,i) = E(:,i) - emax(i); 
end 
+1

vielen Dank für die schnelle Antwort –

+0

Ich bin froh, dass ich helfen konnte. Willkommen auf der Seite! –