Réponse en fréquence à l'aide de la FFT de MATLAB

Voici le scénario: à l'aide d'un analyseur de spectre, j'ai les valeurs d'entrée et les valeurs de sortie. le nombre d'échantillons est 32000 et le taux d'échantillonnage est 2000 échantillons/sec, et l'entrée est une onde sinusoïdale de 50 hz, l'entrée est en cours et la sortie est de la pression en psi.

Comment puis-je calculer la réponse en fréquence à partir de ces données à l'aide de MATLAB,
à l'aide de la fonction FFT de MATLAB.

j'ai été en mesure de générer une onde sinusoïdale, qui donne de l'ampleur et des angles de phase, voici le code que j'ai utilisé:

%FFT Analysis to calculate the frequency response for the raw data
%The FFT allows you to efficiently estimate component frequencies in data from a discrete set of values sampled at a fixed rate
% Sampling frequency(Hz)
Fs = 2000;   
% Time vector of 16 second
t = 0:1/Fs:16-1;   
% Create a sine wave of 50 Hz.
x = sin(2*pi*t*50);                                                       
% Use next highest power of 2 greater than or equal to length(x) to calculate FFT.
nfft = pow2(nextpow2(length(x))) 
% Take fft, padding with zeros so that length(fftx) is equal to nfft 
fftx = fft(x,nfft); 
% Calculate the number of unique points
NumUniquePts = ceil((nfft+1)/2); 
% FFT is symmetric, throw away second half 
fftx = fftx(1:NumUniquePts); 
% Take the magnitude of fft of x and scale the fft so that it is not a function of the length of x
mx = abs(fftx)/length(x); 
% Take the square of the magnitude of fft of x. 
mx = mx.^2; 
% Since we dropped half the FFT, we multiply mx by 2 to keep the same energy.
% The DC component and Nyquist component, if it exists, are unique and should not be multiplied by 2.
if rem(nfft, 2) % odd nfft excludes Nyquist point
mx(2:end) = mx(2:end)*2;
else
mx(2:end -1) = mx(2:end -1)*2;
end
% This is an evenly spaced frequency vector with NumUniquePts points. 
f = (0:NumUniquePts-1)*Fs/nfft; 
% Generate the plot, title and labels. 
subplot(211),plot(f,mx); 
title('Power Spectrum of a 50Hz Sine Wave'); 
xlabel('Frequency (Hz)'); 
ylabel('Power'); 
% returns the phase angles, in radians, for each element of complex array fftx
phase = unwrap(angle(fftx));
PHA = phase*180/pi;
subplot(212),plot(f,PHA),title('frequency response');
xlabel('Frequency (Hz)')
ylabel('Phase (Degrees)')
grid on

j'ai pris la réponse en fréquence à partir de la phase de terrain à 90 degré de l'angle de phase, est-ce la bonne façon de calculer la réponse en fréquence?

comment puis-je comparer cette réponse à l'valeurs qui est obtenu à partir de l'analyseur? c'est une croix de vérifier pour voir si l'analyseur logique du sens ou pas.

OriginalL'auteur Jerry | 2010-10-22