3.17
(1)相关函数
仿真代码:
A1=getAk(SNR1);
A2=getAk(SNR2);
A3=getAk(SNR3); %求得信号的幅度;
noise=randn(1,N) + j*randn(1,N); % 构建高斯白噪声;
s1=getSk(A1,f1,N);
s2=getSk(A2,f2,N);
s3=getSk(A3,f3,N);; %产生3个复正弦信号
vn=s1+s2+s3+noise;
vk=fft(vn,2*N); %对v(n)补N个零,然后做2N点FFT
swk=((abs(vk)).^2)/N; %计算功率谱估计S(ω)
r0=ifft(swk); %对S(k)做ifft得到
r=[r0(N+2 : 2*N) , r0(1 : N)]; %根据教程3.1.8式可得
r1=xcorr(vn, N-1,'biased'); %直接计算自相关函数%%%%%%%%%%%%%%%%%%%%%%%%%取序列实部,虚部%%%%%% real_r=real(r);
imag_r=imag(r);
real_r1=real(r1);
imag_r1 = imag(r1);
subplot(2,2,1);
stem(real_r);
xlabel('基于FFT的自相关函数的实部');
ylabel('实部');
subplot(2,2,2);
stem(imag_r);
xlabel('基于FFT的自相关函数的虚部');
ylabel('虚部');
subplot(2,2,3);
stem(real_r1);
ylabel('实部');
xlabel('估计的自相关函数的实部');
subplot(2,2,4);
stem(imag_r1);
xlabel('估计的自相关函数的虚实部');
ylabel('虚部');
function AK=getAk(SNR) %求得幅度%%%%%%%%%%%%%%%%%%%由SNR=10log(A^2/2*σ^2) %%%%%%% AK=((10^(SNR/10))*2)^0.5;
function Sk=getSk(Ak,fk,N)
Sk=Ak * exp(j * 2 * pi * fk *(0:N-1));