RLS 算法仿真程序源代码:
clc;
clear all;
%BPSK调制
M=2;
w_len=2; % 前馈抽头个数
Fd=10e6; % 信息速率
rolloff = 1; % 滚降系数
up = 4; % samples per symbol
delay = 4; % 升余弦滤波器的群延迟
Fs=Fd*up;
data_len = 100;
data = randint(1,data_len,M);
m_data = pskmod(data,M);
[NUM1,DEN1]=rcosine(Fd,Fs,'fir/sqrt',rolloff,delay);
[t_data,tc]=rcosflt(m_data,Fd,Fs,'filter',NUM1);
t_data = t_data.';
% 成形滤波
gain=[1 1];
%%%%%%%%%%15ms delay channel %%%%%%%%%%%%%%
t_delay=ceil(1.5*up);
r_signal(1,:)= gain(1)*t_data +
gain(2)*[zeros(1,t_delay),t_data(t_delay+1:length(t_data))];
%%%%%%%%%%25ms delay channel %%%%%%%%%%%%%%
t_delay=ceil(2.5*up);
r_signal(2,:)= gain(1)*t_data +
gain(2)*[zeros(1,t_delay),t_data(t_delay+1:length(t_data))];
snr = 5; % 信噪比
r_signal(3,:) = gain(1)*t_data;
r_signal(3,:) = awgn(r_signal(3,:), snr, 'measured');
for i=1:3
[r_data,tr]=rcosflt(r_signal(i,:),Fd,Fs,'filter/Fs',NUM1);
%匹配
升余弦滤波器
equlz_in=r_data(delay*2*up+1:up:length(r_data)-delay*2*up); %抽取
得到均衡输入数据
%抽头系数初始化 第一个抽头系数为1,其余为0
a(w_len)=0;
a(1)=1;
a = zeros ( w_len , 1 );
Lambda = 0.99 ; % Set the forgetting factor
Delta = 10 ; % R initialized to Delta*I
R = Delta * eye (w_len, w_len) ; % 相关矩阵
for n=w_len:data_len
u = equlz_in(n:-1:n-w_len+1);
pi = u' * R ; % 互相关矩阵
K= pi'/(Lambda + pi * u );
p(n)=a' * u;
y(n)=pskdemod(p(n),M);
rd(n)=pskmod(y(n),M);
err(i,n)=rd(n)-p(n) ;
R=(R-K*pi)/Lambda ;
a = a + K * conj(err(i,n)) ;
end
end
figure;
subplot(3,1,1);
plot(abs(err(1,:)));
xlabel('15ms delay');
subplot(3,1,2);
plot(abs(err(2,:)));
xlabel('25ms delay');
subplot(3,1,3);
plot(abs(err(3,:)));
xlabel('white noise');