《2022年MATLAB中FFT的使用方法.pdf》由会员分享,可在线阅读,更多相关《2022年MATLAB中FFT的使用方法.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MATLAB 中 FFT的使用方法MATLAB中 FFT 的使用方法一、调用方法X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N) 用 MATLAB进行谱分析时注意: (1)函数 FFT 返回值的数据结构具有对称性。例: N=8; n=0:N-1; xn=4 3 2 6 7 8 9 0; Xk=fft(xn) Xk =39、0000 -10、7782 + 6 、2929i 0 - 5 、0000i 4、7782 - 7 、7071i 5、0000 4、7782 + 7、7071i 0 + 5 、0000i -10 、7782 - 6 、2929i Xk 与
2、 xn 的维数相同 ,共有 8 个元素。 Xk 的第一个数对应于直流分量,即频率值为0。(2)做 FFT 分析时 ,幅值大小与FFT 选择的点数有关,但不影响分析结果。在IFFT 时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2 除以 N 即可。二、 FFT 应用举例例 1:x=0 、5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz, 分别绘制N=128 、1024 点幅频图。clf; fs=100;N=128; %采样频率与数据点数精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳
3、- - - - - - - - - -第 1 页,共 7 页 - - - - - - - - - - MATLAB 中 FFT的使用方法n=0:N-1;t=n/fs; %时间序列x=0、5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier 变换mag=abs(y); %求得 Fourier 变换后的振幅f=n*fs/N; %频率序列subplot(2,2,1),plot(f,mag); %绘出随频率变化的振幅xlabel( 频率 /Hz); ylabel( 振幅 );title(N=128);grid on; sub
4、plot(2,2,2),plot(f(1:N/2),mag(1:N/2); %绘出 Nyquist 频率之前随频率变化的振幅xlabel( 频率 /Hz); ylabel( 振幅 );title(N=128);grid on; %对信号采样数据为1024 点的处理fs=100;N=1024;n=0:N-1;t=n/fs; x=0、5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y=fft(x,N); %对信号进行快速Fourier 变换mag=abs(y); %求取 Fourier 变换的振幅f=n*fs/N; subplot(2,2,3),plot(f,mag);
5、 %绘出随频率变化的振幅xlabel( 频率 /Hz); ylabel( 振幅 );title(N=1024);grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2); %绘出 Nyquist 频率之前随频率变化的振幅xlabel( 频率 /Hz); ylabel( 振幅 );title(N=1024);grid on; 运行结果 : 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 7 页 - - - - - - - - - - MATLAB 中 FF
6、T的使用方法fs=100Hz,Nyquist频率为 fs/2=50Hz 。整个频谱图就是以Nyquist 频率为对称轴的。并且可以明显识别出信号中含有两种频率成分:15Hz 与 40Hz 。由此可以知道FFT 变换数据的对称性。 因此用 FFT 对信号做谱分析 ,只需考察 0Nyquist 频率范围内的福频特性。若没有给出采样频率与采样间隔,则分析通常对归一化频率 01 进行。另外 ,振幅的大小与所用采样点数有关,采用 128 点与 1024 点的相同频率的振幅就是有不同的表现值 ,但在同一幅图中 ,40Hz 与 15Hz 振动幅值之比均为4:1,与真实振幅 0、5:2 就是一致的。为了与真实
7、振幅对应 ,需要将变换后结果乘以2 除以 N。例 2:x=0 、5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100Hz,绘制 : (1)数据个数N=32,FFT 所用的采样点数NFFT=32; (2)N=32,NFFT=128; (3)N=136,NFFT=128; (4)N=136,NFFT=512。clf;fs=100; % 采样频率Ndata=32; % 数据长度N=32; %FFT的数据长度n=0:Ndata-1;t=n/fs; %数据对应的时间序列x=0、5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %时间域信号精品资料 - -
8、- 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 7 页 - - - - - - - - - - MATLAB 中 FFT的使用方法y=fft(x,N); %信号的 Fourier 变换mag=abs(y); %求取振幅f=(0:N-1)*fs/N; %真实频率subplot(2,2,1),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出 Nyquist 频率之前的振幅xlabel( 频率 /Hz);ylabel( 振幅 ); title(Ndata=32 Nfft=32);grid on;
9、Ndata=32; %数据个数N=128; %FFT 采用的数据长度n=0:Ndata-1;t=n/fs; %时间序列x=0、5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N); mag=abs(y); f=(0:N-1)*fs/N; %真实频率subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出 Nyquist 频率之前的振幅xlabel( 频率 /Hz);ylabel( 振幅 ); title(Ndata=32 Nfft=128);grid on; Ndata=136; %数据个数N=128; %FFT
10、采用的数据个数n=0:Ndata-1;t=n/fs; %时间序列x=0、5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N); mag=abs(y); f=(0:N-1)*fs/N; %真实频率subplot(2,2,3),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出 Nyquist 频率之前的振幅xlabel( 频率 /Hz);ylabel( 振幅 ); title(Ndata=136 Nfft=128);grid on; Ndata=136; %数据个数N=512; %FFT 所用的数据个数n=0:Ndata-1;t=n/fs;
11、 %时间序列x=0、5*sin(2*pi*15*t)+2*sin(2*pi*40*t); y=fft(x,N); mag=abs(y); f=(0:N-1)*fs/N; %真实频率精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 7 页 - - - - - - - - - - MATLAB 中 FFT的使用方法subplot(2,2,4),plot(f(1:N/2),mag(1:N/2)*2/N); %绘出 Nyquist 频率之前的振幅xlabel( 频率 /Hz);ylabel( 振幅 );
12、 title(Ndata=136 Nfft=512);grid on; 结论 : (1)当数据个数与FFT 采用的数据个数均为32 时,频率分辨率较低,但没有由于添零而导致的其她频率成分。(2)由于在时间域内信号加零,致使振幅谱中出现很多其她成分,这就是加零造成的。其振幅由于加了多个零而明显减小。(3)FFT 程序将数据截断 ,这时分辨率较高。(4)也就是在数据的末尾补零,但由于含有信号的数据个数足够多,FFT 振幅谱也基本不受影响。对信号进行频谱分析时,数据样本应有足够的长度,一般 FFT 程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响
13、。例 3:x=cos(2*pi*0、24*n)+cos(2*pi*0、26*n) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 7 页 - - - - - - - - - - MATLAB 中 FFT的使用方法(1)数据点过少 ,几乎无法瞧出有关信号频谱的详细信息; (2)中间的图就是将x(n)补 90 个零 ,幅度频谱的数据相当密,称为高密度频谱图。但从图中很难瞧出信号的频谱成分。(3)信号的有效数据很长,可以清楚地瞧出信号的频率成分,一个就是 0、24Hz, 一个就是 0、26Hz, 称
14、为高分辨率频谱。可见 ,采样数据过少 ,运用 FFT 变换不能分辨出其中的频率成分。添加零后可增加频谱中的数据个数,谱的密度增高了 ,但仍不能分辨其中的频率成分,即谱的分辨率没有提高。 只有数据点数足够多时才能分辨其中的频率成分。Fs = 100; % Sampling frequency T = 1/Fs; % Sample time L = 50; % Length of signal t = (0:L-1)*T; % Time vector x = sin(2*pi*10*t); NFFT = 2nextpow2(L); Y = fft(x,NFFT)/L; f = Fs/2*linsp
15、ace(0,1,NFFT/2+1); % Plot single-sided amplitude spectrum、精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 7 页 - - - - - - - - - - MATLAB 中 FFT的使用方法plot(f,2*abs(Y(1:NFFT/2+1) title(Single-Sided Amplitude Spectrum of y(t) xlabel(Frequency (Hz) ylabel(|Y(f)|) 1。为什么用 2nextpow2
16、(L) 而不直接就是 L?2。Y = fft(x,NFFT)/L为什么除以 L。3。f = Fs/2*linspace(0,1,NFFT/2+1);为什么用 0,1,NFFT/2+1 。最后 2*abs(Y(1:NFFT/2+1) 就是什么意思?答案:1 、一般频域的采样点要大于时域的采样点,最好就是 2 的幂数 ,便于计算。可以瞧瞧数字信号处理这类的书2、假设采样频率为 Fs,信号频率 F,采样点数为 N。那么 FFT 之后结果就就是一个为 N 点的复数。每一个点就对应着一个频率点。这个点的模值,就就是该频率值下的幅度特性。 具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为 A,那么
17、FFT 的结果的每个点 (除了第一个点直流分量之外)的模值就就是 A 的N/2 倍所以这里应该就是3 linspace(x0,x1,n) 其中 n 代表的就是点的数目 ,即分成 n-1 等分。其实Fs/2*linspace(0,1,NFFT/2+1);就就是在 0 到 1 之间分成 NFFT/2 份,也就就是FS/NFFT, 也就就是设置间隔点的频率。最后 2*abs(Y(1:NFFT/2+1) 因为前面 Y = fft(x,NFFT)/ NFFT就是原来信号的二分之一 所以要乘以 2 假设 FFT 之后某点 n 用复数 a+bi 表示,那么这个复数的模就就是An=根号 a*a+b*b, 相位就就是 Pn=atan2(b,a) 。根据以上的结果 , 就可以计算出 n 点(n1, 且 n=N/2) 对应的信号的表达式为 : An/(N/2)*cos(2*pi*Fn*t+Pn),即 2*An/N*cos(2*pi*Fn*t+Pn)。对于 n=1 点的信号 ,就是直流分量 ,幅度即为 A1/N。由于 FFT 结果的对称性 ,通常我们只使用前半部分的结果, 即小于采样频率一半的结果。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 7 页 - - - - - - - - - -
限制150内