clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
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; % 反馈层阶数
%% 算法实现过程
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; % 均衡器阶数
%% 算法实现过程
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
e1(i) = W'*X(:,i)-sX(i); % LMS代价函数
W = W - step*2*e1(i)*X(:,i); % LMS迭代算法
E1(i) = E1(i)+e1(i)^2;
end
end
% 平滑误差
load E.mat;
semilogy(E/nFrame,'r')
hold on
semilogy(E1/nFrame,'k')
hold off
legend('DFE','LMS');
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
matlab_(含教程)基于MATLAB的DFE和LMS两种均衡算法的系统性能仿真.7z (3个子文件)
matlab_(含教程)基于MATLAB的DFE和LMS两种均衡算法的系统性能仿真
教程.mp4 2.21MB
E.mat 178KB
Runme_dfe_VS_lms.m 4KB
共 3 条
- 1
资源评论
mYlEaVeiSmVp
- 粉丝: 1907
- 资源: 19万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功