Matlab中用fft作频谱后为什么要用fftshift

fft是一维傅里叶变换,即将时域信号转换为频域信号
fftshift是针对频域的,将FFT的DC分量移到频谱中心.即对频域的图像,(假设用一条水平线和一条垂直线将频谱图分成四块)对这四块进行对角线的交换与反对角线的交换。

其中,(a)为一幅简单的图像,(b)为傅里叶频谱,©为经过fftshift变换后居中的频谱。

FFTSHIFT:将零频率分量移至频谱中心。对于向量,FFTSHIFT(X)交换X的左右半部分。对于矩阵,FFTSHIFT(X)交换第一和第三象限,第二和第四象限。对于N维数组,FFTSHIFT(X)在每个维度上交换X的“半空间”。

FFTSHIFT(X,DIM) :在DIM维度上应用FFTSHIFT操作。
FFTSHIFT对于将频谱中间的零频率分量的傅里叶变换可视化是很有用的。

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

    IFFTSHIFT undoes the effects of FFTSHIFT.

fft及fftshift示例:

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;

补充:https://blog.csdn.net/wordwarwordwar/article/details/52695473

在这里插入图片描述

  • 12
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值