信号频谱和测量
傅里叶变换
汉明窗
实际情况中,由于无穷的积分范围问题,需要减少测量信号的时间,导致产生了并不存在的频率成分。
一定程度解决该问题的一种方法,取一定数量样本(M个),乘以一个平滑函数:
其中n为样本序号
汉明窗函数
x=0:0.01:1;y=0.54-0.46*cos(2*pi*x);plot(x,y);grid on;
频谱计算
function [Xm,faxis, xtw] = CalcFourierSpectrum(xt,tmax,fmax,UseWindow)
dt=tmax/(length(xt)-1);
t=0:dt:tmax;
xtw=xt;
if(UseWindow)
w=0.54-0.46*cos(2*pi*t/tmax);
xtw=xt.*w;
end
OmegaMax=2*pi*fmax;
dOmega = OmegaMax* .001;
%fvec=[];
%Xmvals=[];
p=1;
for Omega=0:dOmega:OmegaMax
coswave=cos(Omega*t);
sinwave=-sin(Omega*t);
Xreal=sum(xtw.*coswave*dt);
Ximag=sum(xtw.*sinwave*dt);
mag=sqrt(Xreal*Xreal+Ximag*Ximag);
fHz=Omega/(2*pi);
mag=2*mag/tmax;
faxis(p)=fHz;
Xm(p)=mag;
p=p+1;
end
end
示例
输入示例
f=1,w=2*pi*f=2*pi,T=2*pi/w=1,
x(t)=sin(2*pi*f*t)=sin(2*pi*t), f=1
代码
f=1;
t=0:0.001:4;
xt=sin(2*pi*f*t) ;
[Xm,faxis,xtw]=CalcFourierSpectrum(xt,4,10,0);
subplot(2,2,1)
plot(t,xt);
grid on;
subplot(2,2,2)
plot(faxis,Xm);
grid on;
[Xm,faxis,xtw]=CalcFourierSpectrum(xt,4,10,1);
subplot(2,2,3)
plot(t,xtw);
grid on;
subplot(2,2,4)
plot(faxis,Xm);
grid on;
运行结果
备注:频谱中,横坐标为f,正比于角频率(w=2piw)
见CalcFourierSpectrum中:fHz=Omega/(2*pi);
示例2-书中示例
x(t)=sin(2pi7/2t)=sin(7pi*t), f=3.5
参考资料
1.通信系统-使用MATLAB分析与实现,【澳】John W.Leis著,徐争光等译,清华大学出版社,2021年4月第1版