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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.