⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftf.m

📁 matlab,自适应滤波算法
💻 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 + -