matlab中fft的参数设置

生成一组chirp信号

t=0:0.001:1;
a=chirp(t,0,1,10);

该chirp信号频率范围0~10Hz,如图所示,但各频率成分大小从图中并不可知在这里插入图片描述
利用matlab的fft变换,可将其转换到频域中进行分析,代码如下:

fs = 2*10; %根据采样定理,fs为你所关心的最大频率范围的两倍
L = length(0:1/fs:1);%对应图的采样点数
N = 2^nextpow2(L);   %采样点数设置为2的整数幂,当信号中按采样频率进行采样,点数少于N时,fft函数将自动补零,设置N可提高fft性能,N最小的个数可以根据上述的定,若要提高频率分辨率,则N可自行增大
n = 0:N-1;
t = n/fs;   %采样点对应的时间序列,可检验对应的点,如下图所示,红点表示采样点
%开始傅里叶变换
y1=fft(a,N);    %对信号进行快速Fourier变换
mag1=abs(y1);     %求得Fourier变换后的振幅
f=n*fs/N;    %频率序列
mag1=mag1/(N/2);
figure(1)
semilogy(f(1:N/2),mag1(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');grid on;

在这里插入图片描述
zhe就是fft变化后的结果,从图中看结果还是比较粗糙的,这时就要考虑可能是频率间隔过大引起精确度不够,或者采样率过低,引起信号丢失在这里插入图片描述在这里插入图片描述尝试更改采样频率fs为全部采样,fs=1000 Hz ,即1/dt
在这里插入图片描述这样频率就对上了,因此今后最好是将所有数据点都用上,才能保证fft结果正确。
总结:先根据已知dt的离散数据,确定采样频率fs,fs=1/dt,同时要保证fs>2*fmax,N的设置可直接按照程序中进行给定Nmin,若频域划分的很细,可在Nmin基础上增加点数,但若后面补零数过多,也会影响fft结果。然后就直接应用fft即可,图中数据点的高度为对应频率的正弦波的幅值。
若大佬觉得有说的不对的地方敬请留言指出,相互学习。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值