fft MATLAB 负数,Matlab中fft与fftshift命令的小结与分析

我们知道Fourier分析是信号处理里很重要的技术,matlab提供了强大的信号处理能力,但是有一些细节部分需要我们注意。

记信号f(t)的起始时间为t_start, 终止时间为t_end, 采样周期为t_s, 可以计算信号的持续时间Duration为

t_end – t_start, 信号离散化造成的采样点数 N = Duration/t_s + 1;

根据Fourier分析的相关结论,我们知道时域的采样将会造成频域的周期化,该周期为采样频率f_s(著名的香农采样定理基于此).

于是, 经过matlab的fft函数处理后,得到数据的横坐标为0:f_s/(N-1):f_s。相关代码如下所示:

%matlab fft 测试代码

t_s = 0.01;

t_start = 0.5; t_end = 5;

t = t_start:t_s:t_end;

y = 0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

y_f = fft(y);

subplot(3,1,1);

plot(t,y); title('original signal');

Duration = t_end - t_start;

Sampling_points = Duration/t_s + 1;

f_s = 1/t_s;

f_x = 0:f_s/(Sampling_points-1):f_s;

subplot(3,1,2);

plot(f_x,abs(y_f)); title('fft transform');

subplot(3,1,3);

plot(f_x-f_s/2,abs(fftshift(y_f))); title('shift fft

transform');

也就是说,如果我们不使用fftshift,其变换后的横坐标为0:f_s/(N-1):f_s,

如果使用fftshift命令,0频率分量将会移到坐标中心,这也正是matlab中帮助中心给出的意思:对fft的坐标进行了处理。实际上由于频谱的周期性,我们这样做是合理的,可以接受的。

a4c26d1e5885305701be709a3d33442f.png

请读者特别要注意横坐标的差别。另外,根据函数的特性,频谱应当只有在15Hz,40Hz出现峰值,但是fft变换后在60Hz,及85Hz处同样出现了峰值,应当可以从fft的计算过程中得到相应的解释。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值