|
本帖最后由 wdhd 于 2016-9-13 14:24 编辑
原帖由 S0704082 于 2009-1-11 13:42 发表
本人编写了一个MATLAB频谱校正的程序,信号有两个频率,但是两个频率下幅值和相位为多组,我要求的是将一个频率下的所有幅值和所有相位分别放在一个矩阵里,该如何处理,循环的单个程序已经运行出来。我的信号为
fs ...
程序如下,250和600两个频率的参数分别放在AA和BB两个矩阵中:
fs=5120;
N=1024;
t=(0:N-1)/fs;
A1=[5 10 6 8 1 3];A2=[1.5 9 4.6 8.5 7.5 6.1];theta1=[10 20 30 40 50 60];theta2=[70 80 90 100 110 120];
for i=1:6
s=A1(i)*cos(2*pi*250.658*t+theta1(i)*pi/180)+A2(i)*cos(2*pi*600.52*t+theta2(i)*pi/180);
aa=s;%(cos(2*pi*502.5*t+100*pi/180)+cos(2*pi*997*t+110*pi/180)+cos(2*pi*2001*t+120*pi/180));%+cos(2*pi*200.3*t+40*pi/180)+cos(2*pi*480.4*t+50*pi/180);
x=randn(1,N);
x=x/std(x);
x=x-mean(x);
a=0; %均值
b=0; %方差
y=a+sqrt(b)*x; %产生均值零,方差为1的高斯噪声
z=aa+y;
%xf=fft(z);
%xf=xf(1:N/2)/N*2;
%[frequency,amplitude,theta]=SpectrumCorrect(xf,2,1);
w=hann(N,'periodic');
xfw=fft(z.*w');
xfw=xfw(1:N/2)/N*4;
[frequency,amplitude,theta]=SpectrumCorrect(xfw,2,2);
ff1=fix(frequency(1));
if ff1==250
AA(i,1)=amplitude(1); AA(i,2)=theta(1);
BB(i,1)=amplitude(2); BB(i,2)=theta(2);
else
AA(i,1)=amplitude(2); AA(i,2)=theta(2);
BB(i,1)=amplitude(1); BB(i,2)=theta(1);
end
end |
|