一种matlab_判决反馈均衡器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

采用10次蒙特卡洛仿真绘制结果,如果想获得更平滑结果,可适当调整nFrame,我将DFE-LMS和横向滤波器LMS 均衡做在了一起比较,如有问题,请留言!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%

%% DFE-LMS算法实数基带系统仿真程序

% 功能:实数基带系统判决反馈LMS均衡算法仿真-->BER\MSE指标

% 编写:李振兴

%E-Mail:******************

% Tel:

% 任何问题以及错误欢迎通过邮箱交流%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%

clc

clear all

close all hidden %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%

%% 初始化参数设置(用户可根据需要修改此处参数)

nFrame = 10; % 仿真发送的帧数(可作为蒙特卡洛仿真次数)

nPacket = 2500; % 每帧的发送的数据点数

stepa = 0.01; % 学习步长

stepb = 0.1;

dB = 25; % 信噪比

e = zeros(1,nPacket); % 瞬时计算误差

E = zeros(1,nPacket); % 统计均方误差(为平滑用)

h = [0.18,0.3,1,0.18]; %ISI信道参数

h = h/norm(h);

nW = 11; % 横向均衡器阶数

nB = 2; % 反馈层阶数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%

% 注意:当帧数nFrame不等于1的时候不要绘制星座图!

% nFrame根据需要可以适当设置,只要使得MSE曲线足够平滑就可以

% 均衡器阶数对结果影响较大,这里给出的是经过实验的最佳阶数

% 学习步长不宜设置过大

%% 算法实现过程

LP = nPacket-nW; % 移掉几个数据避免负或零下标

X = zeros(nW+1,LP); % 组织均衡器输入矩阵

Y = zeros(nB+1,LP);

y = zeros(1,nPacket);

z = zeros(1,nPacket);

% 循环开始(迭代次数=nFrame*nPacket)

for kk = 1:nFrame % 此处修改蒙特卡洛次数

W = zeros(nW+1,1);

B = zeros(nB+1,1);

sX = round(rand(1,nPacket))*2-1; % BPSK 或2PAM 信号

% scatterplot(sX); % nFrame=1时调试用

rX = filter(h,1,sX); % 通过信道

% scatterplot(rX); % nFrame=1时调试用

vn = randn(1,nPacket); % 产生噪声数据

vn = vn/norm(vn)*10^(-dB/20)*norm(rX); % 根据信噪比调整噪声功率

SNR = 20*log10(norm(rX)/norm(vn)); % 计算SNR

rX = rX+vn; % 接收信号

XX = sign(rX);

[num,rate] = symerr(XX,sX) % 计算均衡前的误码

% scatterplot(rX); % nFrame=1时调试用

for i=1:LP

X(:,i)=rX(i+nW:-1:i).';

end

for i = 1:LP

Y(:,i) = y(i+nB:-1:i);

end

% 开始均衡器参数调整

for i = 1:LP

if i < nB+1

y(i) = W'*X(:,i);

for j = 1:LP

Y(:,i) = sign(y(i+nB:-1:i));

end

temp = B'*Y(:,i);

else

y(i) = W'*X(:,i)+temp;

Y(:,i) = sign(y(i:-1:i-nB));

temp = B'*Y(:,i);

end

z(i) = W'*X(:,i)+temp;

e(i) = z(i)-sX(i); % LMS代价函数

W = W - stepa*2*e(i)*X(:,i); % LMS迭代算法

B = B - stepb*2*e(i)*Y(:,i);

E(i) = E(i)+e(i)^2;

end

end

save E;

clc

clear all

close all

%% 初始化参数设置(用户可根据需要修改此处参数)

nFrame = 10; % 仿真发送的帧数(可作为蒙特卡洛仿真次数)

nPacket = 2500; % 每帧的发送的数据点数

step = 0.01; % 学习步长

dB = 25; % 信噪比

e1 = zeros(1,nPacket); % 瞬时计算误差

E1 = zeros(1,nPacket); % 统计均方误差(为平滑用)

h = [0.18,0.3,1,0.18]; %ISI信道参数

h = h/norm(h);

nW = 11; % 均衡器阶数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%

% 注意:当帧数nFrame不等于1的时候不要绘制星座图!

% nFrame根据需要可以适当设置,只要使得MSE曲线足够平滑就可以

% 均衡器阶数对结果影响较大,这里给出的是经过实验的最佳阶数

% 学习步长不宜设置过大

%% 算法实现过程

LP = nPacket-nW; % 移掉几个数据避免负或零下标

X = zeros(nW+1,LP); % 组织均衡器输入矩阵

% 循环开始(迭代次数=nFrame*nPacket)

for kk = 1:nFrame % 此处修改蒙特卡洛次数

W = zeros(nW+1,1);

sX = round(rand(1,nPacket))*2-1; % BPSK 或2PAM 信号

% scatterplot(sX); % nFrame=1时调试用

rX = filter(h,1,sX); % 通过信道

% scatterplot(rX); % nFrame=1时调试用

vn = randn(1,nPacket); % 产生噪声数据

vn = vn/norm(vn)*10^(-dB/20)*norm(rX); % 根据信噪比调整噪声功率

SNR = 20*log10(norm(rX)/norm(vn)); % 计算SNR

rX = rX+vn; % 接收信号

XX = sign(rX);

[num,rate] = symerr(XX,sX) % 计算均衡前的误码

% scatterplot(rX); % nFrame=1时调试用

for i=1:LP

X(:,i)=rX(i+nW:-1:i).';

end

% 开始均衡器参数调整

for i = 1:LP

相关文档
最新文档