Matlab FFT与IFFT与FFTSHIFT

一、利用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 ,如何求解 ak ak=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决定(周期函数的空域周期)。
Matlab FFT与IFFT与FFTSHIFT_第1张图片
捕获5
Matlab FFT与IFFT与FFTSHIFT_第2张图片
捕获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也即除以fs
df = fs/N;%频率分辨率
f = [0:df:df*(N-1)] - fs/2;%频率倒转

%绘制频谱图
subplot(212)
plot(f,fftshift(abs(X)));%把数据‘循环倒转’
title('傅立叶正变换');
xlabel('频率')

你可能感兴趣的:(数字图像处理)