function [mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa, scale) ; 
% Input: 
% Signal im Zeitbereich 
% nfft = Anzahl Messwerte für fft 
% wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch 
% fa = Abtastfreq. 
% 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(:); 

% 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)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft]; 
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) 
 
