• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[引用]MATLAB中的fft后为何要用fftshift - 阿长长

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

[引用]MATLAB中的fft后为何要用fftshift

原文地址:MATLAB中的fft后为何要用fftshift

fft是一维傅里叶变换,即将时域信号转换为频域。

fftshift是针对频域的,将FFT的DC分量移到频谱中心,重新排列fft,fft1和……ftn的输出结果。

fftshift就是对换数据的左右两边比如
x=[1 2 3 4]
fftshift(x) ->[3 4 1 2]

IFFTSHIFT Inverse FFT shift.(就是fftshift的逆)

x=[1     2     3     4     5];

y=fftshift(x)

y =

     4     5     1     2     3

ifftshift(y)

ans =

     1     2     3     4     5

 

在OFDM系统中,将DC分量0移到频谱中心

x = [0 0 1 1 1 1 1 1 0 0];
fftshift(x)

ans =

1 1 1 0 0 0 0 1 1 1

 

直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来

示例:

clf;

fs=100;N=256;   %采样频率和数据点数
n=0:N-1;t=n/fs;   %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号

y1=fft(x,N);    %对信号进行快速Fourier变换
y2=fftshift(y1);

mag1=abs(y1);     %求得Fourier变换后的振幅
mag2=abs(y2);    

f1=n*fs/N;    %频率序列
f2=n*fs/N-fs/2;

subplot(3,1,1),plot(f1,mag1,\'r\');   %绘出随频率变化的振幅
xlabel(\'频率/Hz\');
ylabel(\'振幅\');title(\'图1:usual FFT\',\'color\',\'r\');grid on;

subplot(3,1,2),plot(f2,mag1,\'b\');   %绘出随频率变化的振幅
xlabel(\'频率/Hz\');
ylabel(\'振幅\');title(\'图2:FFT without fftshift\',\'color\',\'b\');grid on;

subplot(3,1,3),plot(f2,mag2,\'c\');   %绘出随频率变化的振幅
xlabel(\'频率/Hz\');
ylabel(\'振幅\');title(\'图3:FFT after fftshift\',\'color\',\'c\');grid on;

结论:

1)如果期望绘制的幅频图的频率范围为0~fs,则无需运行fftshift变换,如图1。

2)如果期望绘制的幅频图的频率范围为-fs/2~fs/2,则需要运行fftshift变换,如图3;如果不变换,图示的响应频点会发生变换,如图2。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap