信号的频谱分析实验matlab,实验五 基于Matlab的信号频谱分析(复杂)

班级: 学号: 姓名:

立叶变换得到的是离散谱Sk,为了比较它们之间的关系,对S?f?也进行等间隔抽样,且抽样间隔为?f?1,即其频率分辨率,则在频率范围? ?0,?N?1??f??内,TS?f??S?k?f??limN??TNN?1?sn?0ne?j2?NnfT

??limN??TNTNN?1?sn?0ne?j2?Nnk

limN??Sk?k?0,1,2,?,N?1?可以看到,s?t?的离散傅里叶变换与s?t?在一段时间?0,T?内的傅立叶变换S?f?的抽样S?k?f?成正比。由于N点离散傅里叶变换具有Sk?Sk?m*N的性质,故信号s?t?连续谱的负半轴部分可以通过对Sk的平移得到。

需要注意的是信号s?t?的离散傅立叶变换只和信号s?t?在一段时间?0,T?内的傅立叶变换有关,而由公式1-1,s?t?的频谱是在时间???,??上得到的。所以上述计算所得到的并不是真正的信号频谱,而是信号加了一个时间窗后的频谱。当信号s?t?是随时间衰减的或是时限信号,只要时间窗足够长,可以通过这种方法获得信号的近似频谱。因此,用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)举例

?1,0?t?T/2设非周期信号s?t?????1,T/2?t?T,求该信号的傅里叶变换,用MATLAB画出

傅里叶变换后的频谱,并对频谱进行反变换,画出s?t?的波形。

班级: 学号: 姓名:

解:

TS?f?e?j?fT???0e?j2?fT2e?j2?ftdt??TT2e?j2?ftdt

?1?j2?f1?e?j?fT??e?j?fT?j2?fe?j?fT?j2?f??j1?fT2?e???e?j2?fTj2?f?2?1?e?j?fT?2j2?f?1?fT?j?fT???j12?e2?e?????j2?f?e?j?fT?2?12?1?4sin??fT?sin???j?fT?2??2?ej2?f?1??fT?2Te2?j?fT?fT?????2j?f2T2?j?f2sinc2?fT/2?

主程序: 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):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值