📄 ftf.m
字号:
% FTF
% Latest change: $Date: 2008/3/21 21:26(The Second change)
% Author: WuBiao $Tutor: Professor Jiang
% $Revision: Beta 1.2 $
%%%%%%%%%%%%%%%%%%%% 参数输入 %%%%%%%%%%%%%%%%%%%%
clc;
clear all;
n = 300; % 迭代次数
a1 = 0.2; % 模型参数
a2 = 0.7;
%=================================================
%%%%%%%%%%%%%%%%%%%% 产生序列和期望信号 %%%%%%%%%%%%%%%%%%%%
en = randn(1,n);
x(1) = en(1); % 赋初值
nn(1) = 1;
for L = 2 : n
x(L) = a1*en(L)+a2*en(L-1); % 产生输入序列x(n)
d(L) = a1*x(L)+a2*x(L-1); % 产生期望信号d(n)
nn(L) = L;
end
x = x';
%=================================================
figure
plot(nn,x); grid on % 绘制随机过程的一个取样序列
xlabel('n');
ylabel('x(n)');
title('2阶自回归信号x(n)的波形');
% ------------------LSL--------------------
%%%%%%%%%%%%%% 利用FTF算法估计权值a1、a2 %%%%%%%%%%%%%%
% 初始化
a = [0;0]; % 前向预测误差滤波器权矢量
b = [0;0]; % 后向预测误差滤波器权矢量
w = [0;0]; % 最小二乘滤波器权矢量
g = [0;0]; % 增益滤波器权矢量
gama(1) = 1; % 角参考量
delta = 1;
ebf(1) = delta; % 前向预测误差剩余
ebb(1) = delta; % 后向预测误差剩余
% 迭代计算(按时间n=1,2,...)
for i = 2:n
X = [x(i);x(i-1)]; % 前向预测误差滤波器参数
ef1(i) = x(i)-X'*a;
ef2(i) = gama(i-1)*ef1(i);
ebf(i) = ebf(i-1)+ef2(i)*ef1(i);
a = a+ef1(i)*g;
gama1(i) = (ebf(i-1)/ebf(i))*gama(i-1); % n时刻N+1阶角参量
gn = [0;g]+(ef2(i)/ebf(i))*[1;-a]; % N+1阶增益滤波器权矢量
Kn = gn(1:2);
k(i) = gn(3);
eb1(i) = x(i-1)-X'*b; % 后向预测误差滤波器参数
gama(i) = (1/(1-k(i)*eb1(i)))*gama1(i);
eb2(i) = gama(i)*eb1(i);
ebb(i) = ebb(i-1)+eb2(i)*eb1(i);
g = (Kn+k(i)*b)*(gama(i)/gama1(i));
b = b+g*eb1(i);
e(i) = d(i)-X'*w; % 最小二乘横向自适应滤波器参数
w = w+g*e(i);
w1(i) = w(1);
w2(i) = w(2);
n(i) = i;
end
figure
n(1) = 1;
plot(n,w1,n,w2); % 绘制图形
ylim([0 1])
hold on;
plotyline(a1,'r')
hold on;
plotyline(a2,'r')
xlabel('n');
ylabel('w1(n) w2(n)');
title('FTF算法的收敛轨迹');
legend('w1','w2','a1','a2');
grid on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -