MATLAB环境下ISI信道仿真及自适应均衡器设计程序说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 环境下ISI 信道仿真及自适应均衡器设计程序说明
一、系统模型
二、ISI 信道仿真及LSM 算法自适应均衡器原理
1、发送端和接收端滤波器的级联和在采样瞬间时的信道可用等效的离散时间FIR 信道滤波器来表示,Xn={0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088},n={-5,-4,…,5}。
2、基于MSE (均方准则)的均衡器抽头系数的自适应算法为:
^^1k k k k c c e y +=+∆
其中^
k c 代表抽头系数向量的估值,∆为迭代过程中的步长参数,k e 为误差信号,k y 代表在瞬时k 包含均衡器中2k+1接收信号值的行向量。
误差信号k e 表示为:k k k e a z =-;k z 为均衡器输出,k a 为已知信号序列。最初用一已知伪随机序列{k a }在信道上将这个自适应均衡器进行训练。在解调器端,均衡器用这个已知序列去调整它的系数,一旦初始调节完成,自适应均衡器就从一个训练模式切换到直接判决模式,这时:^k k k e a z =-,式中^k a 是检测器的输出。
为了确保收敛 和 在慢变化信道中好的跟踪能力,选择步长参数的一种经验公式是
15(21)R k P ∆=+ 式中R P 代表接收到的信号加噪声的功率,它可以从接收信号中估计出。
三、仿真结果图
四、结论分析
从结果图中我们可以看出,在信噪比逐渐增大的过程中,未经均衡器均衡的差错率没有明显改善,可知系统中始终存在码间干扰造成的误码;经均衡器均衡后的差错率则有明显改善。
但我们同时也可以看到在信噪比较低情况下,均衡器均衡之后的误码率并没有明显改善,甚至没有未均衡的差错率低,这主要是因为噪声为随机信号,功率大时对源信号影响较大,而且均衡器不易跟踪;当我们把均衡器的步长调低后,跟踪能力增强,差错率降低。
附源程序代码:
main_plot.m
clear;
clc;
echo off;
close all;
N=10000; %指定信号序列长度
info=random_binary(N); %产生二进制信号序列
SNR_ in _dB=8:1:18; %AWGN信道信噪比
for j=1:length(SNR _in_ dB)
[y, len ]=channel(info, SNR _in _dB(j)); %通过既有码间干扰又有白噪声信道
numoferr=0; %初始误码统计数
for i=len+1:N+len, %从第len个码元开始为真实信元
if (y(i)<0), %判决译码
decis=-1;
else
decis=1;
end;
if (decis~=info(i-5)), %判断是否误码,统计误码码元个数
numoferr=numoferr+1;
end;
end;
Pe(j)=numoferr/N; % 未经均衡器均衡,得到的误码率
end;
semilogy(SNR_in_dB,Pe,'red*-'); %未经均衡器,误码率结果图
hold on;
delta_1=0.11; %指定自适应均衡器的步长
delta_2=0.09; %指定自适应均衡器的步长
for j=1:length(SNR_in_dB)
y=channel(info,SNR_in_dB(j)); %通过信道
z=lms_equalizer(y,info,delta_1); %通过自适应均衡器,并设置步长为0.11 numoferr=0;
for i=1:N,
if (z(i)<0),
decis=-1;
else
decis=1;
end;
if (decis~=info(i)),
numoferr=numoferr+1;
end;
end;
Pe(j)=numoferr/N; % 经自适应均衡器均衡后,得到的误码率
end;
semilogy(SNR _in _ dB, Pe ,'blacko-'); %自适应均衡器均衡之后,误码率结果图 hold on;
for j=1:length(SNR_in_dB)
y=channel(info,SNR_in_dB(j)); %通过信道
z=lms_equalizer(y,info,delta_2); %通过自适应均衡器,并设置步长为0.09 numoferr=0;
for i=1:N,
if (z(i)<0),
decis=-1;
else
decis=1;
end;
if (decis~=info(i)),
numoferr=numoferr+1;
end;
end;
Pe(j)=numoferr/N; % 经自适应均衡器均衡后,得到的误码率
end;
semilogy(SNR_in_dB,Pe,'blue.-'); %自适应均衡器均衡之后,误码率结果图
hold on;
xlabel('SNR in dB');
ylabel('Pe');
title('ISI信道自适应均衡系统仿真');
legend('未经均衡器均衡','经自适应均衡器均衡,步长detla=0.11',...
'经自适应均衡器均衡,步长detla=0.09');
random_binary.m
%产生二进制信源随机序列
function [info]=random_binary(N)
if nargin == 0, %如果没有输入参数,则指定信息序列为10000个码元
N=10000;
end;
for i=1:N,
temp=rand;
if (temp<0.5),
info(i)=-1; % 1/2的概率输出为-1
else
info(i)=1; % 1/2的概率输出为1
end
end;
channel.m
%模拟既有码间干扰又有高斯白噪声的信道
function [y,len]=channel(x,snr_in_dB)
SNR=exp(snr_in_dB*log(10)/10); %信噪比真值转换
sigma=1/sqrt(2*SNR); %高斯白噪声的标准差
%指定信道的ISI参数,可以看出此信道质量还是比较差的
actual_isi=[0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088];