Principio de filtro adaptativo: mínimos cuadrados recursivos (RLS)

MMSE es adecuado para tratar con secuencias estacionarias, porque MMSE es un problema de optimización uniformemente ponderado, es decir, el peso de contribución de la señal de error en cada momento a la función objetivo es el mismo, y el efecto no es muy bueno para secuencias no estacionarias. señales de voz. .

RLS redefine la función objetivo:

 Entre ellos, se seleccionan los coeficientes de filtro w^{T}(n), en lugar de w^{T}(yo). Debido a que el filtro siempre mejora cada vez más durante la actualización adaptativa, lo que significa que para cualquier i<n, |d(i)−wT(n)x(i)| siempre es mejor que |d(i)−wT(i )x(i)| es pequeño.

λ se llama factor de olvido (0<λ≤1). Agregue un peso mayor al error más cercano al tiempo n, y menos se olvide, y agregue un peso menor al error más lejos del tiempo n, más se olvide

  • λ=1: sin ninguna función de olvido, en este momento RLS degenera en método LMS 
  • λ−>0: solo funciona con el error en el momento actual, y el error en el momento pasado se olvida por completo

Dejamos que la función objetivo Jn(w) se derive de w, y el gradiente es igual a 0, y la fórmula para obtener w es:

 

 De acuerdo con la ecuación de R(n) y r(n), se obtiene la fórmula de recurrencia en el tiempo:

Desventajas : No es rentable calcular la matriz inversa de cada punto de R(n). ¿Una mejor manera?

Sea P(n)=R−1(n), la fórmula de recurrencia temporal de P(n) es:

 De acuerdo con el lema de inversión de matriz:

 puede obtener:

 donde el vector de ganancia:

 Explorando la fórmula de recursión temporal de w(n)

 Esta es la fórmula de actualización del algoritmo RLS estándar, donde ε(n) es el error de estimación anterior.

 Existe un amplio consenso en que el algoritmo RLS tiene mejor velocidad de convergencia y rendimiento de seguimiento que el algoritmo LMS, a costa de una mayor complejidad computacional.

  • Ventajas : los filtros adaptativos RLS proporcionan una convergencia y un rendimiento de seguimiento más rápidos.
  • Desventajas : dado que RLS usa la recursión de la matriz inversa de la matriz de autocorrelación, una vez que la matriz de autocorrelación de la señal de entrada está cerca de singular, la velocidad de convergencia y el rendimiento de seguimiento de RLS se deteriorarán seriamente.

 El código de MATLAB es el siguiente:

function [e, y, w] = myRLS(d, x, lamda, M)
% Inputs:
% d  - 麦克风语音
% x  - 远端语音
% lamda - the weight parameter, 权重
% M  - the number of taps. 滤波器阶数
%
% Outputs:
% e - 大小为Ns的输出误差向量
% y - 输出的近端语音
% w - 滤波器参数

    Ns = length(d);
    if (Ns <= M)  
        print('error: 信号长度小于滤波器阶数!');
        return; 
    end
    if (Ns ~= length(x))
        print('error: 输入信号和参考信号长度不同!');
        return;
    end

    I = eye(M);
    a = 0.01;
    p = a * I;
    
    xx = zeros(M,1);
    w1 = zeros(M,1);        % 滤波器权重
    y = zeros(Ns, 1);        % 近端语音
    e = zeros(Ns, 1);       % 误差
    
    for n = 1:Ns
        %在输入信号x后补上M-1个0,使输出y与输入具有相同长度
        xx = [x(n); xx(1:M-1)];
        k = (p * xx) ./ (lamda + xx' * p * xx);
        y(n) = xx'*w1;
        e(n) = d(n) - y(n);
        w1 = w1 + k * e(n);
        p = (p - k * xx' * p) ./ lamda;
        w(:,n) = w1;
    end
end

Link de referencia:

https://www.cnblogs.com/LXP-Never/p/11773190.html

Supongo que te gusta

Origin blog.csdn.net/qq_42233059/article/details/131344384
Recomendado
Clasificación