Matlab中fft函数详解

FFT函数

Y = fft(x)

如果x是向量,则fft(x)返回该向量的傅里叶变换

如果x是矩阵,则fft(x)将x的各列视为向量,并返回每列的傅里叶变换。

如果x是一个多维数组,则 fft(X) 将沿大小不等于 1 的第一个数组维度的值视为向量,并返回每个向量的傅里叶变换。

Y = fft(X,n)

如果 X 是向量且 X 的长度小于 n,则为 X 补上尾零以达到长度 n。

如果 X 是向量且 X 的长度大于 n,则对 X 进行截断以达到长度 n。

如果 X 是矩阵,则每列的处理与在向量情况下相同。

如果 X 为多维数组,则大小不等于 1 的第一个数组维度的处理与在向量情况下相同。

Y = fft(X,n,dim)

当x为矩阵时,在指定的dim维上进行傅里叶变换

dim=1按列

dim =2按行

函数详细解释

一.实信号

因为实信号以fs为采样速率的信号在 fs/2处混叠,所以实信号fft的结果中前半部分对应[0, fs/2],后半部分对应[ -fs/2, 0];

1)实信号fft的结果前半部分对应[0, fs/2]是正频率的结果,后半部分对应[ -fs/2, 0]是负频率的结果。大于fs/2的部分的频谱实际上是实信号的负频率加fs的结果。故要得到正确的结果,只需将视在频率减去fs即可得到频谱对应的真实负频率;

2)如果要让实信号fft的结果与[-fs/2, fs/2]对应,则要fft后fftshift一下即可,fftshift的操作是将fft结果以fs/2为中心左右互换;

3)如果实信号fft的绘图频率f从[-fs/2, fs/2],并且没有fftshift,则fft正频谱对应f在[0, fs/2]的结果将混叠到(f - fs/2)的位置;

fft负频谱对应f在[-fs/2, 0]的结果混叠到 f + fs - fs/2 的位置,注意这里f为负值,也就是说此种情况下fft负频谱对应的视在频率减去fs/2即可得到频谱对应的真实负频率。

二.复信号情况

1)复信号没有负频率,以fs为采样速率的信号,fft的频谱结果是从[0,fs]的。

2)在 f> fs/2时,对复信号的fft结果进行fftshift会产生频率混叠(将下面的示例2中的频率从f=15改为f=85可以验证f=85的谱线在fftshift后跑到 f= -15 = 85 - fs = 85 - 100的位置了),所以复信号也一般要求 f <= fs/2

3)在对雷达的慢时间维(复信号)进行fft后,由于要用doppler= ((0:LFFT-1)/LFFT - 0.5)*PRF; 计算多普勒频率,所以对该慢时间信号fft后要fftshift下,以便和正确的频率单元相对应。注意多普勒频率fd < = PRF/2 时才测的准!

实信号
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);    
y2=fftshift(y1);
 
mag1=abs(y1);     
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('图1FFT','color','r');grid on;
 
subplot(3,1,2),plot(f2,mag1,'b');  
xlabel('频率/Hz');
ylabel('振幅');title('FFT变换后无FFTSHIFT','color','b');grid on;
 
subplot(3,1,3),plot(f2, mag2,'c');
xlabel('频率/Hz');
ylabel('振幅');title('FFT后进行FFTSHIFT','color','c');grid on;

image-20210511200038747

复信号
close all; clear; clf;
 
fs=100;N=256;   
n=0:N-1;t=n/fs;  
x=0.5*exp(j*2*pi*15*t)+2*exp(j*2*pi*40*t); 
 
y1=fft(x,N);    
y2=fftshift(y1);
 
mag1=abs(y1);    
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('FFT','color','r');grid on;
 
subplot(3,1,2),plot(f2,mag1,'b');  
xlabel('频率/Hz');
ylabel('振幅');title('FFT后无FFTSHIFT','color','b');grid on;
 
subplot(3,1,3),plot(f2,mag2,'c');  
xlabel('频率/Hz');
ylabel('振幅');title('FFT后有FFTSHIFT','color','c');grid on;

subplot(3,1,3),plot(f2,mag2,‘c’);
xlabel(‘频率/Hz’);
ylabel(‘振幅’);title(‘FFT后有FFTSHIFT’,‘color’,‘c’);grid on;


![image-20210511200428935](https://img-blog.csdnimg.cn/img_convert/116629808359a402c7bdcd93722f283e.png)
  • 96
    点赞
  • 472
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小七rrrrr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值