关于matlab编写的程序,求频谱的。

关于matlab编写的程序,求频谱的。,第1张

1、这段代码首先时生成一个离散信号x3,这个离散信号由两个x1,x2合成而来。

2、其次,分别对x1、x2、x3用快速傅立叶算法做512点的离散时间傅立叶变换,X1,X2,X3就是对应x1,x2,x3三个信号的频谱系数。

3、频谱系数一般情况下都是复数,通常用模长和相位分开表示。其中模长用abs函数求,相角用angle函数求,所以plot(f,angle(X3))只是求X3的相角并把他画出来。

mag1=abs(X1)

mag2=abs(X2)

mag3=abs(X3)

这里是分别求幅度。画频谱一般是要把幅度谱和相位谱这两个一起画出。

4、 plot(f(1:N/2),mag3(1:N/2))这几句是什么意思? fft求出的结果是对称的双边谱,我们只看一半的话就是看单片谱了。不过一般是取 0~N/2-1 ,取1:N/2的话也行,不过自己要明白有啥区别,有啥区别了?自行翻书了解DFT的物理意义。

5、可能涉及到的知识:频率分辨率、归一化频率与模拟频率和采样频率之间的关系、DFT的物理意义自己去翻书啊。

下面matlab程序,按照你的要求编写的。fs=100N=200lag=100%randn('state',0)%设置产生随机数的初始状态(噪声)n=0:N-1t=n/fsx1=sin(2*pi*10*t)+2*sin(2*pi*15*t) y=fft(x1,N)%计算频谱mag=abs(y)f=n*fs/Nfigure(1)subplot(2,2,1),plot(t,x1)title('原始信号'),xlabel('时间/s')subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)*2/N)title('频谱图'),xlabel('频率/Hz')[c,lags]=xcorr(x1,lag,'unbiased') %自相关subplot(2,2,3),plot(lags/fs,c)title('自相关信号'),xlabel('时间/s')m=length(c)-1 z=fft(c,m)mag_z=abs(z)ff=(0:m-1)*fs/msubplot(2,2,4),plot(ff(1:m/2),mag_z(1:m/2)*2/m)title('自相关频谱'),xlabel('频率/Hz')figure(2)[c1,lags1]=xcorr(x1,randn(1,length(t)),lag,'unbiased')m1=length(c1)-1 z1=fft(c1,m1)mag_z1=abs(z1)ff1=(0:m1-1)*fs/m1subplot(2,1,1),plot(lags1/fs,c1)title('互相关信号'),xlabel('时间/s')subplot(2,1,2),plot(ff1(1:m1/2),mag_z1(1:m1/2)*2/m1)title('互相关频谱'),xlabel('频率/Hz')

因为N个样点的信号经过fft以后变成N个样点的频谱,这个频谱是关于第N/2+1样点左右对称的,所以真正有用的频谱数据只有前面一半,后面一半是镜像。mxk11是对前N/2个样点取幅度谱,其实应该是取1:N1/2+1,你这里少取了一个点。具体为什么会镜像请看数字信号处理DFT章节。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10969995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存