?
一、迫零均衡
二、部分代码
echo off;
clear all;
close all;
%迫零均衡前的眼图
%1.随机产生双极性序列
n= 3000;
M = 300;
A=n/M;%一个码元的取样点数,即过采样率为10
P=0.2;%1码概率
%x=2*round(rand(1,n)+P-0.5)-1;%产生一列01码
x=sign(randn(1,1000));
%2.发送信号序列与一个多抽头的滤波器卷积(相当于经过一个多径信道),产生码间串扰
%h=[0.02 0.05 0.1 -0.2 1 -0.2 0.1 0.06 0.01];
%h=[0.02 0.03 -0.13 0.2 0.08 -0.22 0.28 0.45 -0.2];
h=[0.03 0.06 0.14 -0.25 1 -0.25 0.14 0.03 0.02];%最优
x1=conv(x,h);
%3.成型滤波
%一种简单的方法生成过采样信号
temp=[1;zeros(A-1,1)];
x2=temp*x1;
x2=x2(1:end);%过采样信号
%通过升余弦滤波器,成型滤波
N_T=6;%控制滤波器长度,滤波器的阶数为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);
for ii=0:(M-1)/2
plot(x3([1:2*30+1]+ii*2*30));
hold on;
end
xlim([0 44]);
title(‘迫零均衡前的眼图‘);
%5.用matlab画眼图函数直接画眼图
eyediagram(x1,5,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);
for ii=0:(M-3)/2
plot(y2([1:10*A+1]+ii*2*A));
hold on;
end
xlim([0 44]);
title(‘迫零均衡后的眼图‘);
%3.用matlab画眼图函数直接画眼图
eyediagram(y,5,2);
title(‘迫零均衡后的眼图‘);
%四、计算ISI信号叠加不同信噪比的信道加性噪声后?
%用不同阶数的迫零均衡器均衡后的误码率,并与理想误码率曲线比较。
SNRdB=[4:12];%信噪比(dB)的范围
N=[1 2 3];%用3、5、7阶横向滤波器迫零
err_rate=zeros(length(N),length(SNRdB));%误码率统计
for ii=1:length(N)
C=force_zero(h,N(ii))
for jj=1:length(SNRdB)
SNR=10^(SNRdB(jj)/10);%计算比值形式的信噪比
err=0;%误码数清零
for kk=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))));
hold on;
grid on;
semilogy(SNRdB,err_rate(1,:),‘-*r‘);
hold on;
grid on;
semilogy(SNRdB,err_rate(2,:),‘-ok‘);
hold on;
grid on;
semilogy(SNRdB,err_rate(3,:),‘-hc‘);
title(‘迫零均衡后的误码率‘);
legend(‘理想误码率特性‘,‘三阶迫零均衡误码率‘,‘五阶迫零均衡误码率‘,‘七阶迫零均衡误码率‘);
xlabel(‘SNR‘);
?