在MATLAB中使用FFT的频率响应 [英] Frequency response using FFT in MATLAB

查看:657
本文介绍了在MATLAB中使用FFT的频率响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是场景:使用频谱分析仪,我有输入值和输出值.样本数为32000,采样率为2000样本/秒,输入为50 hz的正弦波,输入为电流,输出为psi压力.

Here is the scenario: using a spectrum analyzer i have the input values and the output values. the number of samples is 32000 and the sampling rate is 2000 samples/sec, and the input is a sine wave of 50 hz, the input is current and the output is pressure in psi.

如何使用MATLAB根据这些数据计算频率响应, 使用MATLAB中的FFT函数.

How do i calculate the frequency response from this data using MATLAB, using the FFT function in MATLAB.

我能够产生一个正弦波,给出了幅度和相位角,这是我使用的代码:

i was able to generate a sine wave, that gives out the the magnitude and phase angles, here is the code that i used:

%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

我从相位图上的相位角处获取了频率响应,这是计算频率响应的正确方法吗?

i took the frequency response from the phase plot at 90 degree phase angle, is this the right way to calculate the frequency response?

我如何将此响应与从分析仪获得的值进行比较?这是一项交叉检查,以查看分析器逻辑是否有意义.

how do i compare this response to the values that is obtained from the analyzer? this is a cross check to see if the analyzer logic makes sense or not.

推荐答案

乍一看似乎还可以,但您可能会缺少以下几点:

Looks OK at first glance, but a couple of things you're missing:

  • you should apply a window function to the time domain data before the FFT, see e.g. http://en.wikipedia.org/wiki/Window_function for windowing in general and http://en.wikipedia.org/wiki/Hann_window for the most commonly used window function (Hann aka Hanning).

您可能想绘制以dB为单位的对数幅度,而不仅仅是原始幅度

you probably want to plot log magnitude in dB rather than just raw magnitude

这篇关于在MATLAB中使用FFT的频率响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆