MATLAB中的FFT后用FFTSHIFT 的意义

本文详细介绍了FFT(快速傅里叶变换)和FFTSHIFT函数在信号处理中的作用。FFT用于将时域信号转换为频域信号,而FFTSHIFT则将频谱的直流分量移动到中心,确保频率范围从-fs/2到fs/2。通过示例展示了未使用FFTSHIFT和使用FFTSHIFT后幅频图的区别,强调了在特定场景下使用FFTSHIFT的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.FFT是一维傅里叶变换,即将时域信号转换为频域信号;

FFTSHIFT是针对频域信号的,将FFTDC分量移到频谱中心,重新排列fft,fft2fftn的输出结果。


2.fftshift,就是将左右两边的数据对换

例子:

x=[1 2 3 4]
fftshift(x)

结果如下图


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

例子:

x=[1 2 3 4 5]
y=fftshift(x)
z=ifftshift(y)

结果:


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

示例:

clear all;
clc;

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;

结果:


5.结论

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

2)如果期望绘制的幅频图,频率范围为-fs/2~fs/2,则需要运行fftshift变换,如图3;

3)如果不运行fftshift变换,图示的响应频点会发生变换,如图2。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值