matlab
傅立叶变换
题目:对一个矩形波进行傅立叶变换,并观察其频谱与理想方波函数的理论频谱是否相同
代码如下:
Fs=100; % Sampling frequency
T=1/Fs; % Sample time
L=100; % Length of signal
t=(0:L-1)*T;% Time vector
%绘制占空比为40%的矩形波
y=zeros(1,L); y(1:0.4*L)=1;
subplot(121); plot(t,y);
title('占空比为40%的矩形波');
xlabel('Time'); ylabel('Amplitude');
%对矩形波进行傅立叶变换
NFFT=1024;
Y=fft(y,NFFT);
f=Fs*linspace(0,1,NFFT);
subplot(122); plot(f,abs(Y(1:NFFT))) ;
title('占空比为40%的矩形波对应的频谱曲线');
xlabel('Frequency (Hz)'); ylabel('|Y(f)|');
代码运行结果:
图1
编程解析:
对于周期性方波而言,其各个周期信号的频谱会产生重叠,不便于观察,因此,在程序中未使用square( )函数,而是通过使用zeros( )函数,然后对其进行部分置1来构造一个矩形波。
对矩形波进行傅立叶变换部分,其中 Y=fft(y,NFFT) 表示对时域波形进行NFFT点的离散傅立叶变化,NFFT数值越大得到的频域图形其曲线越平滑,这里的NFFT最好取为2的整数次幂,因为当NFFT为2的整数次幂的情况下进行离散傅立叶变换需要的次数就越少,效率就越高。而一般情况下,NFFT应该取大于信号长度L且距L最近的一个2的整数次幂,在MATLAB中用NFFT=2^nextpow2(L)实现。
当进行离散傅立叶变换的点数大于信号的长度L时,会对L后面的部分补零,当NFFT的数值小于L时,会取L的前NFFT个点,而把后面的点舍弃。在进行傅立叶变换时,倘若不使用NFFT,而直接写成fft(y)的形式,此时是默认对时域信号y进行L点的离散傅立叶变换。
而f=Fs*linspace(0,1