Forum: Digitale Signalverarbeitung / DSP / Machine Learning Leistungsdichte zeigt nicht den korrekten Pegel eins sinus


von Ralf Dortmund (Gast)


Lesenswert?

Hallo!

Ich habe folgendes Problem. Ich habe ein Leistungsdichtespektrum "zu 
Fuß" mit Matlab geschrieben, da mir die zb der pwelch-Schätzer 
mathematisch nicht ganz korrekt arbeitet. Jetzt habe ich das Problem das 
der Pegel eines Sinus nicht korrekt angezeigt wird. D.h. ein Sinus mit 
-7 dbFS zeigt zum Beispiel -16dBFS an. ICh habe auch schon das Outsignal 
durch die FFT Länge geteilt aber das bringt auch nichts

hier mal der Code dazu. Über Ideen wäre ich sehr dankbar.


clear;
close all;

[Audio,Fs,bits] = wavread('Sinus_6dBFS.wav');

FFTLen = 40*1024; % FFT Auflösung
BlockLen = FFTLen;  % Blockgröße

Win = hann(FFTLen); % Fensterfunktion in FFT-Größe

KFolgen = length(Audio)/BlockLen; % Anzahl der Teilfolgen ermitteln

Out = zeros(FFTLen,1); % Vektor für Addition der unabhängigen 
Periodogramme

hh = FFTLen; % Zähler für Blockzerlegeung

% Blockzerlegung des Signals (momentan nur geeignet für Samplingraten 
die ein 2er Potenz entsprechen)
for kk = 1 : KFolgen

    Block = Win .* Audio(hh-(FFTLen-1):hh);  % X. Block mit 
Fensterfunktion multiplizieren

    AktSpec = fft(Block); % FFT vom aktuellen Block

    Out = Out + real(AktSpec(1:FFTLen,1).*conj(AktSpec(1:FFTLen,1))); 
%Komlpexes Spektrum von einzelnen Blöcken addieren

    hh = hh+FFTLen;
end


Out = Out ./ FFTLen;

Out = Out./(FFTLen/2)

% Normierungskonstante A bilden
A = (1/FFTLen) .* sum(Win.^2);


Out = Out / (KFolgen * A) ;
PosIndex = 1:FFTLen/2+1;
freq_vek = linspace(0,Fs/2,length(PosIndex));
plot(freq_vek,10*log10(Out(PosIndex)));


% % Test ob asymptotisch erwartungstreu
% % Und siehe da
% TimeSig = Audio(1:10*1024);
% var(TimeSig)
% mean(Out)
% % beides gleich

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.