Matlab FFT与IFFT与FFTSHIFT

来源:互联网 发布:mac 硬盘重新分区 编辑:程序博客网 时间:2024/05/21 15:02

一、利用FFT 及 IFFT实现傅立叶正反变换

注:常用数学符号的 LaTeX 表示方法

1.周期信号的离散傅里叶级数表示

x[n] = x[n+N] N—序列周期。例:x[n]=ejkw0n 由于频率上相差2π 的整数倍的离散时间复指数信号都是一样的。(ejk(w0+2π)=ejkw0)故N=2π/w0,取kw0[0,2π]范围上,即k[0,N],其中N=2π/w0. 即只有N个信号是不相同的。

x[n]=n1i=0akejk(2π/N)n ,如何求解akak=1NN1n=0x[n]ejk(2π/N)n ,其中ak也是以N为周期变化的。

对时域进行采样。采样率的影响:若是占空比一定的情况下,增加采样率,N = T/Ts = T*fs。采样点数会增多,而N不仅是空域的周期,也是频域的周期。由于离散化的过程,类似于序列冲激采样。其中频域中ws相当于N为采样频率,平常由于空域采样间隔Ts非常小,故fs非常大,远远大于wm才能使得不产生频谱混叠。而FFT函数只产生一个周期内的频谱,得到的是[0,ws]或者说是[0,fs]内的一个周期的数据。也就是说,占空比一定的情况下,增加采样率,结果是:前wm(fm)的点数不变,间距不变。只是增加了wm到ws间的点数。即频率的占空比减小了。 而频域中的点数间的间距df(dw)是由fm决定的。即是由周期函数自身的周期决定的。 周期函数离散谱的间距由ws决定,也即由Ts决定(周期函数的空域周期)。
这里写图片描述
捕获5
这里写图片描述
捕获4

**例**1:求在区间[-1,1]间的矩形信号的傅立叶变换。

(1)利用抽样产生离散时间

fs = 10;ts = 1/fs;%时域抽样间隔t = [-5:ts:5];x = zeros(size(t));x(41) = 0.5;x(42:60) = ones(1,19);x(61) = 0.5;%x = 2*sinc(2*t);%绘制时域波形subplot(211)plot(t,x);title('矩形波时域图像');xlabel('t');ylabel('x(t)时域大小');

核心解释:按ts的间隔(ts = 1/fs)对时间域抽样N点并且做FFT算法后,得到的是对应与频域[0,fs]间的N个值,频率分辨率为df = fs/N;同时我们知道fs其实对应着0频率,fs/2对应着-fs/2即有一个频率反转fftshift函数

时域周期为N,频域基波频率为w0=2πN.

N = 1024;%所做的FFT点数,2的次幂能实现快速算法X = fft(x,N);%求得x(n)的DFT结果X = X/fs;%由于时域抽样会有一个 1/Ts的衰减,所以必须乘以Ts也即除以fsdf = fs/N;%频率分辨率f = [0:df:df*(N-1)] - fs/2;%频率倒转%绘制频谱图subplot(212)plot(f,fftshift(abs(X)));%把数据‘循环倒转’title('傅立叶正变换');xlabel('频率')
阅读全文
0 0