function FFT_betragsspektrum( signal, nfft, fa, window, scale) % Input: % Signal im Zeitbereich % nfft = Anzahl Messwerte für fft % wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch % fa = Abtastfreq. % window: 0 = kein fenster, 1 = Hanning Fensterfunktion % scale: 0 = keine Impulsantwort als Eingang, 1 = Impulsantwort % Output: % Magnitude des Spektrums linear und dB skaliert % Frequenzvektor fv in [Hz] von 0...fa/2 % un-,gerade Anzahl Messwerte? if mod(nfft,2) == 0; k = (nfft/2) + 1; else nfft = nfft + 1; k = (nfft/2) + 1; end fn = fa/2; % Nyquistfreq. df = fa/nfft; % Frequenzauflösung des Spektrums % Frequenzvektor: Darstellung bis Nyquistfreq. fv = 0: df : fn; sig = signal(:); Lsig = size(sig,1); % Fensterung if window == 1 win = hann(Lsig); sig_win = sig .* win * Lsig / sum(win); % Fensterung mit Amplitudenkorrektur sig = sig_win; end % Signal transformieren Fy = fft(sig,nfft); % Betrag - nur positives Freq.spektrum if scale == 0 Fy_pos0 = abs(Fy(1:k)); % Skalierung mag = [Fy_pos0(1)/Lsig ;Fy_pos0(2:k-1)/(Lsig/2);Fy_pos0(k)/Lsig]; else % nicht durch nfft teilen bei Impulsantwort mag = abs(Fy(1:k)); end % Umrechnung in dB mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0) figure(1) plot(fv,mag) title('Betragsspektrum') xlabel('Frequenz [Hz]') ylabel('Amplitude linear') figure(2) plot(fv,mag_dB) title('Betragsspektrum') xlabel('Frequenz [Hz]') ylabel('Amplitude [dB]')