线性最小均方估计matlab源代码

更新时间:2023-05-27 02:28:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

代码比较简单,但效果还不错。

clear;clc;echo off;close all;

%产生复信号

N=500; %指定信号序列长度

for i=1:N, %实部

temp=rand;

if (temp<0.5),

R(i)=-1/sqrt(2); % 1/2的概率输出为-1/sqrt(2)

else

R(i)=1/sqrt(2); % 1/2的概率输出为1/sqrt(2)

end

end

for i=1:N, %虚部

temp=rand;

if (temp<0.5),

I(i)=-1/sqrt(2); % 1/2的概率输出为-1/sqrt(2)

else

I(i)=1/sqrt(2); % 1/2的概率输出为1/sqrt(2)

end

end

x_k=R+I*j; %信号x_k

snr_in_db=20; %AWGN信道信噪比

SNR=exp(snr_in_db*log(10)/10); %信噪比真值转换

cv=1/(2*SNR); %高斯白噪声的方差

cxx=var(x_k); %信号方差cxx

%指定信道的ISI参数

isi=[0.04,-0.05,0.07,-0.21,-0.5,0.72,0.36,0,0.21,0.03,0.07];

y=conv(isi,x_k); %信号通过isi信道,相当于信号序列与信道模型序列作卷积 %需要指出,此时码元序列长度变为N+len-1,译码时我们从第len个码元开始到N+len个结束 y_k=awgn(y,snr_in_db); %叠加噪声

%H矩阵

isi_k=[zeros(1,N+100),isi,zeros(1,N+100)];

n=N+length(isi)-1;

H=ones(n,N);

for i1=0:N-1,

for i2=1:n,

H(i2+i1*n)=isi_k(i2+N+100-i1);

end

end

%c_xx矩阵

c_xx=eye(N,N)*cxx;

%c_v矩阵

c_v=eye(n,n)*cv;

代码比较简单,但效果还不错。

%LMMSE估计x_k,假设E(x)=0

estimate_x_k=c_xx*H'*(H*c_xx*H'+c_v)^(-1)*y_k'; estimate_x_k=estimate_x_k';

scatterplot(y_k);title('y_k');

scatterplot(x_k,'+');title('x_k');

scatterplot(estimate_x_k);title('估计值x_k');

本文来源:https://www.bwwdw.com/article/fvw4.html

Top