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)');