randn('seed', 0)
rand('seed', 0)
NoOfData = 8000 % Set no of data points used for training
Order = 32 % 自适应滤波权数
Lambda = 0.98 % 遗忘瞎友因子
Delta = 0.001 % 相关矩阵R的初始化
x = randn(NoOfData, 1) %高斯随机系列
h = rand(Order, 1) % 系统随机抽样
d = filter(h, 1, x) % 期望输出
% RLS算法的初始化
P = Delta * eye ( Order, Order ) %相关矩阵
w = zeros ( Order, 1 ) %滤波系数矢量的初始化
% RLS Adaptation
for n = Order : NoOfData
u = x(n:-1:n-Order+1) %延时函数
pi_ = u' * P %互相关函数
k = Lambda + pi_ * u
K = pi_'/k%增益矢量
e(n) = d(n) - w' * u %误差函数
w = w + K * e(n) %递归公式
PPrime = K * pi_
P = ( P - PPrime ) / Lambda %误差相关矩阵
w_err(n) = norm(h - w) %真实估计散哪误差
end
% 作图表示结果
figure
plot(20*log10(abs(e))) %| e |的误差曲线
title('学习曲线')
xlabel('迭代次数')
ylabel('输出误差估计')
figure
semilogy(w_err) %作实际估计误差图
title('矢量估计误差')
xlabel('迭代次数')
ylabel('误差权矢量')
%lms 算法
clear all
close all
hold off%系统信道权数
sysorder = 5 %抽头数
N=1000%总采样次数
inp = randn(N,1)%产生高斯随机系列
n = randn(N,1)
[b,a] = butter(2,0.25)
Gz = tf(b,a,-1)%逆变换函数
h= [0.09760.28730.33600.22100.0964]%信道特性向量
y = lsim(Gz,inp)%加入噪声
n = n * std(y)/(10*std(n))%噪声信号
d = y + n%期望输出信号
totallength=size(d,1)%步长
N=60 %60节点作为训练序列
%算法的开始
w = zeros ( sysorder , 1 ) %初始化
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) % u的矩阵
y(n)= w' * u%系统输出
e(n) = d(n) - y(n) %误差
if n <20
mu=0.32
else
mu=0.15
end
w = w + mu * u * e(n) %迭代方程
end
%检验结果
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1)
y(n) = w' * u
e(n) = d(n) - y(n) %误差
end
hold on
plot(d)
plot(y,'r')
title('系统输出')
xlabel('样本')
ylabel('实际输出')
figure
semilogy((abs(e))) % e的绝对值坐标
title('误差曲线')
xlabel('样本')
ylabel('误差矢量')
figure%作图
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('实际权矢量','估计权矢量')
title('比磨掘槐较实际和估计权矢量')
axis([0 6 0.05 0.35])
clear allclose all
N=10%滤波器阶数
sample_N=500%采样点数
A=1%信号幅度
snr=10%信噪比
t=1:sample_N
length_t=100%期望信号序列长度
d=A*sin(2*pi*t/length_t)%期望信号猜李腊
M=length(d)%M为接收数据长度
x=awgn(d,snr)%经过信道(加噪声)
delta=1/(10*N*(A^2))%计算能够使LMS算法收敛的delta
y=zeros(1,M)
h=zeros(1,N)%LMS滤波器系数
h_normalized=zeros(1,N)%归一化LMS滤波器系数
y1=zeros(1,N)
for n=N:M %系数调整LMS算法
x1=x(n:-1:n-N+1)
%LMS算法
y(n)=h*x1'
e(n)=d(n)-y(n)
h=h+delta*e(n)*x1
%NLMS算法扰森
y_normalized(n)=h_normalized*x1'
e_normalized(n)=d(n)-y_normalized(n)
h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1')
end
error=e.^2%LMS算穗滑法每一步迭代的均方误差
error_normalized=e_normalized.^2%NLMS算法每一步迭代的均方误差
for n=N:M %利用求解得到的h,与输入信号x做卷积,得到滤波后结果
x2=x(n:-1:n-N+1)
y1(n)=h*x2'
y2(n)=h_normalized*x2'
end
subplot(411)
plot(t,d)
axis([1,sample_N,-2,2])
subplot(412)
plot(t,x)
subplot(413)
plot(t,y)
subplot(414)
plot(t,y_normalized)
figure(2)
plot(t,error,'r',t,error_normalized,'b')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)