当前位置:首页 > 1、五基于Matlab信号频谱研究(复杂)
需要注意的是信号的离散傅立叶变换只和信号
的频谱是在时间
在一段时间内
的傅立叶变换有关,而由公式1-1,上得到的。所
以上述计算所得到的并不是真正的信号频谱,而是信号加了一个时间窗后的频谱。当信号
是随时间衰减的或是时限信号,只要时间窗足够长,可以通过
这种方法获得信号的近似频谱。因此,用DFT计算的信号频谱精度依赖于信号、抽样的时间间隔和时间窗的大小。一般情况下,对于时限信号,在抽样时间间隔小,即抽样频率高的情况下能获得较为精确的信号频谱。 计算信号的离散傅里叶变换在数字信号处理中有一种高效算法,即快速傅里叶变换FFT,Matlab中也有专门的工具,下面简要介绍: fft(x>,x是离散信号,或对模拟信号取样后的离散值。 ifft(x>,x是对信号进行快速傅里叶变换后的离散谱。 源代码一:
利用fft,fftshift定义函数T2F计算信号的傅立叶变换 function [f,sf]=T2F(t,st>%该子函数需要两个参数t和st。 %t—离散时间;st—离散信号 dt=t(2>-t(1> 。% 时间分辨率 T=t(end> 。
df=1/T 。%频率分辨率
N=length(st> 。%离散傅立叶变换长度
f=-N/2*df :df :N/2*df-df 。%设定频谱区间,注意要关于原点对称,共有N个
%点,包括0点,故要减去一个df sf=fft(st>。
sf=T/N*fftshift(sf>。%信号的频谱与离散傅立叶变换之间的关系,?tshift(x>是将信号的频谱x进行移位,与原点对称。 源代码二:
利用ifft,fftshift定义函数T2F计算信号的傅立叶反变换 function [t,st]= F2T (f,sf>
%f离散的频率;sf—信号的频谱 df=f(2>-f(1> 。 %频率分辨率 Fmx=f(end>-f(1>+df 。%频率区间长度
dt=1/Fmx 。 %已知频率区间长度时,求时间分辨率,由前面频率分辨率公式△f=df=1/T,
%T=dt*N,得到△f=df=1/ (dt*N>,故dt=1/(df*N>=1/Fmx,即时间分辨率 N=length(sf> 。 T=dt*N。 %信号持续时间 t=0:dt:T-dt。
%离散傅立叶反变换,是T2F的逆过程
sff=fftshift(sf>。 %把对称的频谱进行平移,平移后同T2F中的sf st=Fmx*ifft(sff>。 %由于T2F中求信号频谱在DFT基础上乘了一个因子T/N,反变换求信号时要乘以其倒数即N / T=1/dt,正好等于Fmx。 <2)举例 设非周期信号
,求该信号的傅里叶变换,用MATLAB画
的波形。 出傅里叶变换后的频谱,并对频谱进行反变换,画出解:
主程序: clear all T=1。
N_sample=128。%为了画波形,设置每个周期的采样点数 dt=1/ N_sample。%时间分辨率 t=0:dt:T-dt。
st=[ones(1, N_sample/2>, -ones(1, N_sample/2>]。%依据T将信号离散化 subplot(311>。plot(t,st>。axis([0 1 -2 2]>。xlabel('t'>。ylabel('s(t>'>。 subplot(312> 。 [f,sf]=T2F(t,st> 。
plot(f,abs(sf>> 。hold on 。%画出sf的幅度谱,不含相位 axis([-10 10 0 1]>。
xlabel('f'>。ylabel('|S(f>|'>。
sff=T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T>.*sinc(f*T*0.5>.*sinc(f*T*0.5>。 %依据傅里叶变换求信号频谱 plot(f,abs(sff>,'r-'>
[t,st]= F2T (f,sf>。%进行离散傅立叶反变换,求原始信号 subplot(313> 。
axis([0 1 -2 2]>。
xlabel('t'>。ylabel('恢复的s(t>'>。 plot(t,st> 。hold on 。 仿真结果截图<图3):
申明:
所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。
共分享92篇相关文档