迫零均衡.docx
《迫零均衡.docx》由会员分享,可在线阅读,更多相关《迫零均衡.docx(12页珍藏版)》请在冰豆网上搜索。
迫零均衡
迫零均衡
一、实验要求
1.利用matlab软件编程实现,对存在ISI的信号进行迫零均衡;
2.要求给出均衡前后的眼图对比,并计算误码率;
3.对仿真结果进行性能分析。
二、实验原理
2.1均衡技术简介
由于实际的限带信道的传递函数往往是非理想的,且经常是时变的、未知的,因而系统特性不符合奈窐斯特准则,导致在接受端抽样时刻存在码间干扰,使得系统误码性能下降。
为此,要考虑在信道传递函数是非理想情况,且信号在信道传输中受到加性白高斯噪声干扰条件下的接收机的设计问题。
在限带数字通信系统中所采取的技术之一是在收端抽样、判决之前加一均衡器,此均衡器是用来补偿信道特性的不完善,从而减小在收端抽样时刻的码间干扰。
具有均衡器的数字基带传输系统如下:
信道均衡技术大致分为两大类:
线性均衡和非线性均衡。
在信道频率响应特性比较平坦、所引起的码间干扰不太严重的情况下,可采用线性均衡。
线性均衡器可用横向滤波器实现,图示如下:
要实现信道的均衡,关键是要计算出横向滤波器的抽头系数,我们常用两种方法来得到横向滤波器的抽头系数:
一是以最小峰值畸变为准则的迫零均衡算法;另一种是以最小均方误差为准则的均方误差均衡算法。
本实验只要求理解迫零均衡的原理,仿真验证迫零均衡的性能。
2.2迫零均衡算法
迫零算法是由Lucky于1965年提出的,他在分析中略去了信道的加性噪声,所以在实际存在噪声的情况下由该算法得到的解不一定是最佳的,但它易于实现。
因此,在信道的频率响应特性比较平坦,所引起的码间干扰不太严重的情况下,由该算法可达到信道均衡的效果。
具体实现如下:
在横向滤波器的延迟单元N为无穷多个的理想线性均衡条件下:
为消除接收端抽样时刻的码间干扰,希望:
在实际应用中,常用的是截短的横向滤波器,因而不可能完全消除接收端抽样时刻的码间干扰,只能适当的调整各抽头系数,尽量减小码间干扰。
此时,可使:
当k为其它值时,
可能是非零值,构成均衡器输出端的残留码间干扰。
2.3存在信道加性噪声时误码率的理论值
讨论无码间串扰的情况下,噪声引起的误码率。
若二进制基带信号为双极性,设它在抽样时刻的电平取值为+A或-A。
信道加性噪声通过接收滤波器后成为平均功率为
,均值为0的高斯噪声。
x(t)在抽样时刻的取值为:
设判决电路的判决门限为
,判决规则为:
判为“1”码
判为“0”码
经推导可得,发“1”判错为“0”的概率P(0/1):
发“0”判错为“1”的概率P(1/0):
则传输系统总的误码率可以表示为:
在A和
一定的条件下,可以找到一个误码率最小的判决门限电平
。
当
时,
相应的总误码率为:
其中SNR为信号功率与带限噪声功率的比。
三、实验步骤
3.1设计迫零均衡函数force_zero.m
1.函数入口参数:
归一化的多径信道系数h,均衡器抽头数2N+1;
2.找到h的时间原点,即h=1处;
3.若原点两侧的值个数不等,补零使之相等;
4.根据给定抽头数确定冲击序列x:
5.根据冲击序列x确定矩阵方程系数X:
6.由矩阵方程求迫零均衡器的系数C,作为函数出口参数返回。
3,2对存在ISI的信号进行迫零均衡
1.产生一列随机等概的二进制消息序列;
2.让该发送信号序列与一个多抽头的滤波器卷积,就相当于经过一个多径信道,从而产生ISI;
3.分别用实验三中的两种方法画出均衡前的眼图;
4.利用C=force_zero(h,N)函数对存在ISI的信号迫零均衡;
5.分别用实验三中的两种方法画出均衡后的眼图。
3.3计算误码率并与理想误码率曲线比较
1.产生一列随机等概的二进制消息序列;
2.给定一信噪比,在消息序列中加入高斯噪声(带限);
3.让该发送信号序列通过多径信道产生ISI;
4.利用C=force_zero(h,N)函数分别对存在ISI的信号进行三阶、五阶和七阶迫零均衡;
5.对均衡后的信号进行判决,由于0、1等概,判决限为0;
6.比较接收信号和发送信号,求误码个数;
7.重复步骤1-6,保证产生的总码元个数大于
,求误码率;
8.计算信噪比从4dB至11dB的误码率,与理想误码率曲线画在同一坐标中。
四、仿真结果及性能分析
4.1均衡前的眼图
方法一:
方法二:
4.2均衡后的眼图
方法一:
方法二:
3.3实际误码率与理想误码率
3.4性能分析
均衡后的信号眼图“眼睛”完全张开,波形重合较好;迫零均衡器的抽头数越多,叠加高斯噪声后实测误码率与理想误码率曲线越相符,均衡性能越理想,这是因为多径信道径数较少,七阶抽头的均衡器足以基本消除所有抽样点的码间串扰。
而在实际系统中,远离零点的抽样点上仍会有码间串扰,但适当增加抽头数可以将码间串扰减小到相当小的程度。
%一、迫零均衡前的眼图
%1.随机产生双极性序列
n=1500;%取样点数
M=150;%码元数目
A=n/M;%一个码元的取样点数,即过采样率为10
P=0.5;%1码概率
x=2*round(rand(1,M)+P-0.5)-1;%产生一列01码
%2.发送信号序列与一个多抽头的滤波器卷积(相当于经过一个多径信道),产生码间串扰
h=[0.020.050.1-0.21-0.20.10.060.01];
x1=conv(x,h);
%3.成型滤波
%一种简单的方法生成过采样信号
temp=[1;zeros(A-1,1)];
x2=temp*x1;
x2=x2(1:
end);%过采样信号
%通过升余弦滤波器,成型滤波
N_T=4;%控制滤波器长度,滤波器的阶数为2*N_T+1。
alpha=1;%滚降系数,影响带宽
r=rcosfir(alpha,N_T,A,1);%产生升余弦滤波器系数
x3=conv(r,x2);
x3=x3(fix(A*N_T)+1:
end-fix(A*N_T));%删去由于卷积产生的拖尾的0
%4.将不同码元周期内的图形平移至一个周期内画出眼图。
figure
(1);
forii=0:
(M-3)/2
plot(x3([1:
2*A+1]+ii*2*A));
holdon;
end
xlim([022]);
title('迫零均衡前的眼图');
%5.用matlab画眼图函数直接画眼图
eyediagram(x1,2);
title('迫零均衡前的眼图');
%二、迫零均衡
N=5;
C=force_zero(h,N);
y=conv(x1,C);
%三、迫零均衡后的眼图
%1.成型滤波
%一种简单的方法生成过采样信号
temp=[1;zeros(A-1,1)];
y1=temp*y;
y1=y1(1:
end);%过采样信号
%通过升余弦滤波器,成型滤波
N_T=4;%控制滤波器长度,滤波器的阶数为2*N_T+1。
alpha=1;%滚降系数,影响带宽
r=rcosfir(alpha,N_T,A,1);%产生升余弦滤波器系数
y2=conv(r,y1);
y2=y2(fix(A*N_T)+1:
end-fix(A*N_T));%删去由于卷积产生的拖尾的0
%2.将不同码元周期内的图形平移至一个周期内画出眼图。
figure(3);
forii=0:
(M-3)/2
plot(y2([1:
2*A+1]+ii*2*A));
holdon;
end
xlim([022]);
title('迫零均衡后的眼图');
%3.用matlab画眼图函数直接画眼图
eyediagram(y,2);
title('迫零均衡后的眼图');
%四、计算ISI信号叠加不同信噪比的信道加性噪声后
%用不同阶数的迫零均衡器均衡后的误码率,并与理想误码率曲线比较。
SNRdB=[4:
11];%信噪比(dB)的范围
N=[123];%用3、5、7阶横向滤波器迫零
err_rate=zeros(length(N),length(SNRdB));%误码率统计
forii=1:
length(N)
C=force_zero(h,N(ii));
forjj=1:
length(SNRdB)
SNR=10^(SNRdB(jj)/10);%计算比值形式的信噪比
err=0;%误码数清零
forkk=1:
10^3%循环多次以达到足够的精确度
x=2*round(rand(1,M)+P-0.5)-1;%产生双极性码
x1=awgn(x,SNR,'measured','linear');%加入高斯白噪声
x1=conv(x1,h);%通过多径信道
y=conv(x1,C);
L=(length(y)-M)/2;
y=y(L+1:
L+M);%除去由于卷积产生的拖尾信号
y=sign(y);%抽样判决,判决分界为0
err=err+sum(abs(x-y))/2;%误码数累加
end
err_rate(ii,jj)=err/(M*10^3)%误码率计算
end
end
figure(5);
semilogy(SNRdB,0.5*erfc(sqrt(0.5*10.^(SNRdB/10))));
holdon;
semilogy(SNRdB,err_rate(1,:
),'ko');
holdon;
semilogy(SNRdB,err_rate(2,:
),'go');
holdon;
semilogy(SNRdB,err_rate(3,:
),'ro');
title('迫零均衡后的误码率');
legend('理想误码率特性','三阶迫零均衡误码率','五阶迫零均衡误码率','七阶迫零均衡误码率');
xlabel('SNR');
functionc=force_zero(h,N)
%h:
归一化的多径信道系数h
%N:
均衡器抽头数2N+1
%c:
返回迫零均衡器的系数C
H=length(h);
MID=find(h==1);%找到h的时间原点
%若原点两侧的值个数不等,补零使之相等;
if(MID-1fori=1:
(H-MID)-(MID-1)
h=[0,h];
end
else
fori=1:
(MID-1)-(H-MID)
h=[h,0];
end
end
l=max(MID-1,H-MID);
%根据给定抽头数确定冲击序列x
%x=[h(-2N)h(-2N+1)...h(0)...h(2N-1)h(2N)]
x=zeros(1,4*N+1);
if2*N>=l
x([2*N+1-l:
2*N+1+l])=h
else
x=h([MID-2*N:
MID+2*N]);
end
%根据x构造矩阵方程系数X
%X=[x(0)x(-1)...x(-2N);
%x
(1)x(0)...x(-2N+1);
%..............................
%x(2N)x(2N-1)...x(0)]
X=[];
fori=1:
2*N+1
X=[X;fliplr(x(i:
2*N+i))];
end
%d为delta函数
d=zeros(2*N+1,1);
d(N+1)=1;
c=X^(-1)*d;