matlab均衡仿真报告材料—胡梦春—11211132
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
均衡matlab实验仿真报告
学院:电子信息工程学院
班级:通信1106班
姓名:胡梦春
学号:11211132
指导教师:杨维老师
时间:2014年5月27日
均衡MATLAB仿真报告
要求:现给出迫零均衡(ZF)、最小均方误差均衡中的最小均方算法(LMS)的matlab程序,理解各程序,完成以下习题。
将程序运行结果及各题目的解答写入word中:
用matlab分别运行“main_zf.m”和“main_lms.m”(a)在程序中标注“注释”处加上注释(英文或中文)。
①main_zf.m
M=1500; %码元数目
P=0.5; %1码概率
data=2*round(rand(1,M)+P-0.5)-1;%产生一列01 码
h=[0.02 0.05 0.1 -0.2 1 -0.2 0.1 0.06 0.01];%注释:归一化的多径信道系数h r=conv(data,h);
%迫零均衡
N=5;
C=force_zero(h,N); %获得均衡器系数C
dataout=conv(r,C); %注释:将经过多径信道传输的信号通过均衡器
figure(1)
subplot(2,2,1)
plot([1:length(data)],data,'.')
title('发送信号序列')
subplot(2,2,2)
plot([1:length(r)],r,'.')
title('多径信号序列')
subplot(2,2,3)
plot([1:length(dataout)],dataout,'.')
title('均衡后的信号序列')
figure(2)
eyediagram(r,2);
title('迫零均衡前的眼图');
figure(3)
eyediagram(dataout,2);
title('迫零均衡后的眼图'); %注释:画迫零均衡后的眼图
%用不同阶数的迫零均衡器均衡后的误码率,并与理想误码率曲线比较。
snr_in_dB=[4:11]; %注释:产生不同的信噪比条件,4dB到11dB
N=[1 2 3]; %注释:均衡器抽头数为2*N+1,分别表示3、5、7阶均衡器err_rate=zeros(length(N),length(snr_in_dB)); %注释:经过均衡误码率统计err_rate1=zeros(1,length(snr_in_dB)); %注释:未经过均衡误码率统计
for ii=1:length(N)
C=force_zero(h,N(ii));
forjj=1:length(snr_in_dB)
SNR=10^(snr_in_dB(jj)/10); %注释:将信噪比dB值转化为线性值
err=0; %注释:经过均衡的误码个数
err1=0; %注释:没有经过均衡的误码个数
for kk=1:10^3 %注释:kk从1到1000,每种信噪比下,试验1000次
x=2*round(rand(1,M)+P-0.5)-1; %注释:%产生一列01码,1码概率为P x2=awgn(x,SNR,'measured','linear'); %注释:x序列中加入高斯白噪声
x1=conv(x2,h); %注释:序列x2通过多径信道
y=conv(x1,C); %注释:将经过多径信道传输的信号通过均衡器
L=(length(y)-M)/2;
y=y(L+1:L+M); %注释:取L+1到L+M个数的符号
y=sign(y); %注释:根据y的正负,以零为判决门限
err=err+sum(abs(x-y))/2; %根据收发序列是否相同统计误码个数
%--------------------------------------不经过均衡
L1=(length(x1)-M)/2; %注释:收到序列的起始点
x11=x1(L1+1:L1+M); %注释:取L+1到L+M个数的符号
y11=sign(x11); %注释:根据y的正负,以零为判决门限
err1=err1+sum(abs(x-y11))/2; %注释:根据收发序列是否相同统计误码个数
end
err_rate(ii,jj)=err/(M*10^3) %注释:统计不同阶数均衡器下的误码率
err_rate1(1,jj)=err1/(M*10^3) %注释:统计不经过均衡器的误码率
end
end
figure;
semilogy(snr_in_dB,0.5*erfc(sqrt(1*10.^(snr_in_dB/10))),'g*-');
hold on;
semilogy(snr_in_dB,err_rate1(1,:),'g-');
hold on;
semilogy(snr_in_dB,err_rate(1,:),'ko');
hold on;
semilogy(snr_in_dB,err_rate(2,:),'go');
hold on;
semilogy(snr_in_dB,err_rate(3,:),'ro');
title('误码率');
legend('高斯信道下理想误码率特性','未进过均衡的误码率','三阶迫零均衡误码率','五阶迫零均衡误码率','七阶迫零均衡误码率');
xlabel('SNR');
②main_LMS.m
clear;
clc;
%************变量设置区************%
N=10000; %二进制信源的长度,测误码率时使用的N
h = [0.6 -0.3 0.1]; %多径响应序列
order = 5; %C的阶数(取大于1的奇数)
mu = 0.01; % 步长
delta=2; %延迟
SNRdB = 5:15;
Loops = [100,100,100,100,100,100,100,100,100,100,100]; %循环数,实现信源长度10^6
%****************************%
C = zeros(order,1); %初始化自适应系数
for i = 1:length(SNRdB) % 注释:在不同信噪比下,从5dB到15dB disp(['目前仿真到第',num2str(i),'轮:','SNR=',num2str(SNRdB(i)),'dB']); %注释:不同轮数,不同信噪比条件下
TotalError = 0; % 注释:经过均衡的误码个数,初始化为0 totalerror1=0;
SNR = 10^(SNRdB(i)/10); % 注释:将信噪比dB值转化为线性值
for JJJ = 1:Loops(i) % 注释:第一轮迭代循环
x=randsrc(1,N,[0,1;0.5,0.5]);%注释:产生有N个数的01随机序列,0、1概率都为0.5
x1=1-x*2; %注释:将x序列中的0转化为1,1转化为-1
x2 = conv(x1,h); % 注释:序列x1通过多径信道
x3 = awgn(x2,SNR,'measured','linear'); %注释:x2序列中加入高斯白噪声for jjj=order+1:N % iterate 循环,迭代
rr=x3(jjj:-1:jjj-order+1)'; % vector of received signal
e=x1(jjj-delta)-C'*rr; % calculate error
C=C+mu*e*rr; % update equalizer coefficients
end
x6=filter(C,1,x3); %注释:通过信道传输的序列x3经过均衡器C
x7 = (1-sign(x6))/2; %注释:判决x6序列,小于0的数判为1,大于零的数判为-1
x8=x3<0; %注释:经信道传输不经过均衡器x3小于0,x8为1,否则x8为0 TotalError = TotalError + sum(abs(x-x7(3:end))); %注释:统计经过均衡器的误码数
totalerror1=totalerror1+ sum(abs(x8(1:end-2)-x)); %注释:统计不经过均衡器的误码
end
BER(i) = TotalError / (N-order) / Loops(i); % 注释:统计经过均衡器的误码率
ber1(i)= totalerror1 / N / Loops(i); %注释:统计不经过均衡器的误码率end
figure(1)
subplot(2,2,1)
plot([1:length(x1)],x1,'.')
title('发送信号序列')
subplot(2,2,2)
plot([1:length(x2)],x2,'.')
title('多径信号序列')
subplot(2,2,3)
plot([1:length(x3)],x3,'.')
title('多径加噪声信号序列')
subplot(2,2,4)
plot([1:length(x6)],x6,'.')
title('均衡后信号序列')
eyediagram(x3,2);
title('均衡前的眼图');
eyediagram(x6,2);
title('均衡后的眼图');
figure(2)
semilogy(SNRdB, BER,'r.-'); %注释:画经过均衡器的误码率曲线hold on;
semilogy(SNRdB, ber1,'g.-');
hold on;
semilogy(SNRdB,0.5*erfc(sqrt(2*10.^(SNRdB/10))/sqrt(2)),'-'); ylim([10^(-6),10^(0)]);
legend('均衡后的误码率曲线','均衡前的误码率曲线','理想误码率曲线'); xlabel('SNR(单位:dB)');
ylabel('误码率');
(b)写出这两种算法实现的流程。
(1)这两种方法的理论实现流程:
①迫零均衡的理论实现流程
如图1所示,迫零均衡是根据信道特性F(z)获得均衡器响应1/F(z)。
图1 迫零均衡流程
采用有限长滤波器,第n个抽头系数用en表示,共有(2K+1)个,均衡器的输出信号采样为ci等于输入信号{Ui}与抽头系数序列{en}的卷积,表示为:
通过强迫信道和均衡器组合冲激响应的抽样值Ck在除k=0外的其它抽样时刻取值为零,使均衡器输出端的失真最小。
截取矩阵U的前K行和后K行,U 矩阵为2K+1方阵,为2K+1维
由Cˆ=UE 得E =U-1C。
迫零法通过选择{en}的加权,迫使均衡器的输出信号在期望脉冲的两侧各K个采样值为0(名称的由来),即选择抽头系数使下式成立:
求解2K+1方程,可得到{en} ,滤波器的长度(抽头系数的个数)取决于信道产生干扰的程度。
②迭代LMS的算法理论实现流程
a. 用对权值进行初始化
b. 计算一个MSE的梯度近似值,使用R,P的估计值,n表示迭代次数,梯度估计
c. 通过负梯度方向调整权值参数,决定了收敛速度和剩余误差算法收敛,是相关矩阵R的最大特征值
d. 满足终止条件,停止,否则到第b步
(2)这两种方法的程序实现流程
①迫零均衡的程序实现流程:
迭代LMS的算法程序实现流程:
(c)运行程序,会得到关于信号的一系列图形,包括信号序列图、均衡前后眼图以及均衡前后的误码率图,分析这些图形,你能得到什么结论?
解答:迫零均衡中的相关图如图2、3、4、5所示:
图2 迫零均衡
图3迫零均衡
图4迫零均衡
图5迫零均衡
最小均方误差均衡中的最小均方算法(LMS)中的相关图如图6、7、8、9所示:
图6 最小均方误差(LMS算法)均衡
图7最小均方误差(LMS算法)均衡
图8最小均方误差(LMS算法)均衡
图9最小均方误差(LMS算法)均衡
结论:对迫零均衡,均衡后的序列+1和-1值差距很大,很容易判别,眼图也很好看,眼睛张开得很大,体现了迫零均衡是以消除码间干扰为目的的。
并且均衡器阶数越大,误码率越低,理论上当均衡器阶数无限大时,可以实现完全没有码间干扰。
对最小均方误差(LMS算法)均衡,其均衡后的序列+1、-1分辨得并不十分清楚,眼图的眼睛张开也不是十分大,但也能容易判决符号,而且其误码率在相同信噪比条件下比比迫零均衡要低,体现了最小均方误差均衡的目的不是使码间干扰最小而是使误码率最小。