www.pudn.com > equ.rar > equ.m
clc, close all , clear;
g=400; % 统计仿真次数为g
N=1000; % 训练时的输入信号抽样点数N
k=11; % 时域抽头LMS算法滤波器阶数
% u步长
% ww 通信信道参数
pp=zeros(g,N-k); % 将每次独立循环的误差结果存于矩阵pp中,以便后面对其平均
u=0.02;
n=1:3;
ww=2.9;
h=0.5*(1+cos(2*pi*(n-2)/ww));
yy=randn(1,N)>0;
for j=1:N
if yy(j)
s(j)=1;
else
s(j)=-1;
end;
end;
x=zeros(size(s));
x(1:3)=s(1:3);
% 信道冲击响应,将发端信号s污染
for j=4:N
x(j)=h(1)*s(j-1)+h(2)*s(j-2)+h(3)*s(j-3);
end;
% 对每一个SNR进行仿真。包括:1训练,2均衡处理,3判决并计算误码
SNR_db = 0:12;
for n=1:length(SNR_db)
% 应为 10^(-SNR_db(n)/20)
Eb_N0(n)=10^(-SNR_db(n)/20);
v = Eb_N0(n)*randn((size(s)));
xn = x + v;
y=zeros(1,N); % 输出信号y
y(1:k)=xn(1:k); % 将输入信号xn的前k个值作为输出y
w=zeros(1,k); % 设置抽头加权初值
e=zeros(1,N); % 误差信号
% 不同SNR下,首先用LMS算法训练滤波器
for i=(k+1):N
XN=xn((i-k+1):(i)); % 输入:[2 12], 输出:[5]
y(i)=w*XN';
%要特别注意:输入信号的起始下标位是[2 12],期望信号起始是s(12-7) = 5,因此训练后的均衡器输出的第1个bit要对齐到输入信号的第5个bit
e(i)=s(i-7)-y(i);
w=w+u*e(i)*XN;
end;
%训练完成后,开始均衡滤波处理
v = Eb_N0(n)*randn((size(s)));
xn = x + v;
for i=(k+1):N
XN=xn((i-k+1):(i));
y(i)=w*XN';
end;
% 硬判决
y(y >= 0) = 1;
y(y < 0) = -1;
% 计算出现误码bi的个数,以向量方式计算
% 要特别注意:输入信号的起始下标位是[2 12],期望信号起始是s(12-7) = 5,因此训练后的均衡器输出的第1个bit要对齐到输入信号的第5个bit
% 计算收发两端不同的bit总数
error(n) = sum(abs(y(k + 1:N) - s(5:N - k + 4))/2)
Pe(n) = (error(n) + eps) / N % 加上eps,避免0求对数的情况
end
semilogy(SNR_db,Pe);
xlabel('信噪比(dB)');
ylabel('误码率(Pe)');