📄 ml.m
字号:
%%%%%%%%%%%%%%%ML法估计信号的信噪比%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear all
L=500;%每个信号采样500点
snr_theory=-5:0.5:12;
S=1;%%%%信号功率因子
A=1;%信号幅度
M=4;%QPSK调制信号
N=S./10.^(snr_theory/10);%噪声功率因子
var_noise1=A^2./(2*10.^(snr_theory/10));
a=[-1,1];
for m=1:length(snr_theory)
SNR=num2str(snr_theory(m))
for n=1:500
noise1=sqrt(N(m))*randn(1,L)+i*sqrt(N(m))*randn(1,L);%复高斯白噪声
mk=a(randint(1)+1)*sqrt(2)/2+i*a(randint(1)+1)*sqrt(2)/2;
r=sqrt(S)*mk+noise1;
for g=1:L
c(g)=real(r(g))*real(mk)+imag(r(g))*imag(mk);
d(g)=real(r(g))^2+imag(r(g))^2;
end
theta=2*pi/M*round((M-1)*rand(1));
noise2=sqrt(var_noise1(m))*randn(1,L)+i*sqrt(var_noise1(m))*randn(1,L);
real_r=A*cos(theta)*ones(1,L)+real(noise2);%同向分量
imag_r=A*sin(theta)*ones(1,L)+imag(noise2);%正交分量
envelop_r=real_r.^2+imag_r.^2;%信号的包络
u=mean(envelop_r);%包络均值
var_envelop_r=mean(envelop_r.^2)-u^2;%包络方差
z1(n)=var_envelop_r/u^2;
snr_est11(n)=-10*log10(abs(sqrt(1/(1-z1(n)))-1));
snr_est1(m)=mean(snr_est11);
SD1(m)=(snr_est1(m)-snr_theory(m))^2;
snr_est12(n)=mean(c)^2/(mean(d)-mean(c)^2);%估计的信噪比
snr_est2(m)=10*log10(mean(snr_est12));
SD2(m)=(snr_est2(m)-snr_theory(m))^2;
end
end
figure(1)
plot(snr_theory,snr_theory);
hold on
plot(snr_theory,snr_est1,'-o');
hold on
plot(snr_theory,snr_est2,'-s');
hold off
xlabel('snr/dB')
ylabel('信噪比估计均值/dB')
title('复高斯信道下新算法与ML估计法比较(数据长度:L=500)')
legend('理论值','Proposed','ML')
figure(2)
plot(snr_theory,SD2,'-o');
hold on
plot(snr_theory,SD1,'-s');
hold off
xlabel('snr/dB')
ylabel('信噪比估计偏差/dB')
title('复高斯信道下新算法与ML估计法比较(数据长度:L=500)')
legend('ML','Proposed')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -