📄 dferls_equation.asv
字号:
function [data_estimation,data_decision,C]=dferls_equation(K1,K2,signal_in,signal_original)
%基于数字通信书的P495页的算法
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 训练模式 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=K1+K2+1;
%均衡滤波器的阶数
w=0.999;
%加权因子
C=zeros(N,1);
%均衡滤波器各抽头的系数初始化为零
Num=length(signal_in)-N+1;
%由于反馈的引入,实际对Num个数据进行了均衡
I=zeros(Num,1);
%均衡后的结果,尚未判决
error=zeros(Num,1);
%误差矩阵
Yall=zeros(N,Num);
%每一列代表每次均衡所用的数据,其中前K1+1个是接收到的值,后K2个是判决反馈后的值,在训练模式下,即为已知值
Call=zeros(N,Num);
%每列代表每次迭代所得到的滤波器的系数的值
P=1000*eye(N) ;
%R矩阵的逆,R矩阵初值取deltaI,取delta为0.001
train_length=length(signal_original);
for t=K2+1:train_length
Yall(:,t)=[signal_in(K1+t:-1:t);signal_original(t-1:-1:t-K2)];
%第t次迭代对应Y矩阵的第t列,每列元素的前K1+1个为接收到的信号,后K2个为已知序列,
Y=Yall(:,t);
%代表第t次迭代用到的数据
Y_star=conj(Y);
%取共轭
Y_trans=Y.';
%取转置
I(t)=Y_trans*C;
%计算均衡输出
error(t)=signal_original(t)-I(t);
%计算误差
K=(P*Y_star)/(w+(Y_trans*P*Y_star));
%计算卡尔曼增益
P=(1/w)*(P-(K*Y_trans*P));
%更新矩阵P
C=C+(error(t)*K);
%更新均衡器的系数矩阵
Call(:,t)=C;
end
semilogy(power(abs(error),2))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 传输模式 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Num=length(signal_in)-train_length-K1-1;%所传输的信息序列的长度
data_decision=zeros(Num,1);
data_estimation=zeros(Num,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%前K2
data(:,1)=[signal_in(train_length+K1+1:-1:train_length+1);signal_original(train_length:-1:train_length-K2+1)];
data_estimation(1)= data(:,1).'*C;
data_decision(1)=decision(data_estimation(1));
for t=2:K2
data(:,t)=[signal_in(train_length+K1+t:-1:train_length+t);data_decision(t-1:-1:1);signal_original(train_length:-1:train_length-K2+t)];
data_estimation(t)= data(:,t).'*C;
data_decision(t)=decision(data_estimation(t));
end
Y=zeros(N,Num);
for t=(K2+1):Num
for n=1:K1+1
data(n,t)=signal_in(train_length+t+K1-n+1);
end;
for n=(K1+2):(K1+K2+1)
data(n,t)=data_decision(t+K1-n+1);
end
data_estimation(t)=C.'*data(:,t);
data_decision(t)=decision(data_estimation(t));
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -