为什么用matlab将两个信号叠加后,再进行FFT后的图像和分别FFT的图像叠加的不同?(图像是功率频谱图)
应该是相同的,有图,有程序,有真相。
%两信号叠加信号的频谱和分别频谱的叠加
t=0:0.001:1;%设定信号时间为0到1秒,频率为1000HZ
s1=sin(300*pi*t);%信号1
s2=sin(100*pi*t);%信号2
y=s1+s2;%叠加信号
Y=fft(y,512);%512点的FFT
Pyy=Y.*conj(Y)/512;%叠加信号功率谱
f=1000*(0:256)/512;%计算横轴频率值
Y1=fft(s1,512);%512点的FFT 信号1
Ps1=Y1.*conj(Y1)/512;%信号1功率谱
Y2=fft(s2,512);%512点的FFT 信号2
Ps2=Y2.*conj(Y2)/512;%信号2功率谱
PP=Ps1+Ps2;%信号1,2功率谱叠加
figure(1)
subplot(1,2,1),plot(t,y),title('叠加信号'),xlabel('时间(S)')
subplot(1,2,2),plot(f,Pyy(1:257)),title('叠加信号功率谱'),xlabel('频率(Hz)')
figure(2)
subplot(2,2,1),plot(t,s1),title('信号1'),xlabel('时间(S)')
subplot(2,2,2),plot(f,Ps1(1:257)),title('信号1功率谱'),xlabel('频率(Hz)')
subplot(2,2,3),plot(t,s2),title('信号2'),xlabel('时间(S)')
subplot(2,2,4),plot(f,Ps2(1:257)),title('信号2功率谱'),xlabel('频率(Hz)')
figure(3)
subplot(2,1,1),plot(f,Pyy(1:257)),title('叠加信号功率谱'),xlabel('频率(Hz)')
subplot(2,1,2),plot(f,PP(1:257)),title('信号1,2功率谱叠加'),xlabel('频率(Hz)')
这是个很有意思的问题,从数字计算方面,很好解释,在计算功率谱的时候要进行平方,而你的信号叠加是做加法,那么(a+b)^2=a^2+b^2+2ab,就是这个2ab导致了功率谱的变化,这里啊a和b可以理解为信号1和2的幅值谱(注意a和b都是一组数啊)。我原先的程序由于在50hz和150hz时,对应的b或a在这里的值都非常小,所以2ab这个值是很小的,(a+b)^2约等于a^2+b^2,所以两种功率谱并没有什么变化。
而当你将两个信号的频率调为一致时,(a+b)^2=(a+2*a)^2=a^2+(2a)^2+2*2*a*a,这里a^2+(2a)^2分别对应信号1,2的功率谱的叠加,(a+b)^2对应叠加信号的功率谱,两个功率谱相差2*2*a*a,而这时在两个信号幅值谱都在150hz上有很大的值,所以2*2*a*a很大,对于你追问的图来说相差4*a^2=4*240^2=230400(这里你可以计算一下信号1 在150赫兹时的幅值,我这里只是在图上估计的240,不是很准但也可以说明问题了),然后计算功率谱还要再除以512,得450,也就是你追问的两个图的差异所在了。
所以你的问题主要是使用了功率谱来分析信号,我把功率谱的代码改成幅值谱后就一致了。哎呀,累死朕了,我欲醉眠君且去,吃点东西先!