적응 형 AR NLMS 필터를 과도하게 모델링하면 급격한 스파이크가 해결되는 이유는 무엇입니까?


10

방금 백색 노이즈로 연료를 공급하는 자동 회귀 2 차 모델을 시뮬레이션하고 1-4 차수의 정규화 된 최소 평균 제곱 필터로 매개 변수를 추정했습니다.

1 차 필터가 시스템을 모델화함에 따라, 추정은 이상하다. 2 차 필터는 몇 번의 급격한 점프가 있지만 좋은 추정치를 찾습니다. 이는 NLMS 필터의 특성상 예상됩니다.

나를 혼란스럽게하는 것은 3 차 및 4 차 필터입니다. 아래 그림에서 볼 수 있듯이 급격한 점프를 제거하는 것으로 보입니다. 2 차 필터로 시스템을 모델링하기에 충분하므로 추가 할 내용을 볼 수 없습니다. 어쨌든 중복 매개 변수는 약 움직 입니다.0

누군가이 현상을 질적으로 설명 할 수 있습니까? 무엇이 원인이며 바람직합니까?

단계 크기 , 샘플 및 AR 모델 여기서 는 흰색입니다 분산 노이즈10 (4) , X ( t ) = E ( t ) - 0.9 X ( t - 1 ) - 0.2 X ( t - 2 ) E ( t )μ=0.01104x(t)=e(t)0.9x(t1)0.2x(t2)e(t)

여기에 이미지 설명을 입력하십시오

MATLAB 코드는 다음과 같습니다.

% ar_nlms.m
function th=ar_nlms(y,order,mu)
N=length(y);
th=zeros(order,N); % estimated parameters
for t=na+1:N
    phi = -y( t-1:-1:t-na, : );
    residue = phi*( y(t)-phi'*th(:,t-1) );
    th(:,t) = th(:,t-1) + (mu/(phi'*phi+eps)) * residue;
end

% main.m
y = filter( [1], [1 0.9 0.2], randn(1,10000) )';
plot( ar_nlms( y, 2, 0.01 )' );

2
나는 당신이 거기에 무엇을 꾸미고 있는지 잘 모르겠습니다. NLMS로 어떤 종류의 필터를 시뮬레이션하고 있습니까? — 매개 변수가 많을수록 임의의 필터에 더 잘 맞을 수 있습니다. 매개 변수가 "0 주위에"있어도 아무 것도하지 않는다는 의미는 아닙니다.
leftaroundabout

@ left : 상수 매개 변수를 사용하여 AR (2) 모델을 시뮬레이션하고 있습니다. 즉 NLMS (2)가 시스템을 완전히 설명 할 수 있어야합니다. 분명히 추가 매개 변수는 스파이크를 줄이기 위해 무언가를 수행하지만 시스템이 과도하게 모델링 된 이유가 궁금합니다. 일반적으로 추정 매개 변수의 신뢰 구간이 증가한다는 것을 의미합니다.
Andreas

엑스()=이자형()1엑스(1)2엑스(2)...엑스(){1,2,,4}

AR 모델을 근사하려고하는 동안 NLMS가 MA 모델이 아닙니까?
Memming

1
@Memming : NLMS가 AR 모델 을 반전 시키려고 하므로 여기서 MA 모델이 옳습니다.
Peter K.

답변:


2

발생하는 것처럼 보이는 것은 오버 모델링을 시작할 때 오류 신호가 점점 희미 해집니다.

오류 신호 ( residue항의 일부)를 반환하도록 코드를 수정했습니다 .

이 그림은 xcorr차수 = 2 (파란색), 3 (빨간색) 및 4 (녹색)에 대한 오차 의 제로 지연 계수를 보여줍니다 . 보시다시피, 0에 가깝지 않은 래그 항의 크기는 점점 커지고 있습니다.

xcorr오류 의 FFT (스펙트럼)를 보면, 낮은 드리프트 항 (큰 드리프트를 유발하는)이 점점 작아지고 있음을 알 수 있습니다 (오류는 더 높은 주파수를 포함 함).

따라서이 경우 오버 모델링의 효과는 오류를 고역 통과 필터링하는 것 같습니다 (이 예제의 경우).

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

function [th,err]=ar_nlms(y,order,mu)
eps = 0.000000001;
N=length(y);
th=zeros(order,N); // estimated parameters
err = zeros(1,N);
for t=order+1:N
    phi = -y( t-1:-1:t-order, : );
    err(t) = y(t)-phi'*th(:,t-1);
    residue = phi*( err(t) );
    th(:,t) = th(:,t-1) + (mu/(phi'*phi+eps)) * residue;
    size(residue)
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.