Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

선형 예측과 자기회귀 모델링

이 예제에서는 자기회귀 모델링과 선형 예측 사이의 관계를 비교하는 방법을 보여줍니다. 선형 예측과 자기회귀 모델링은 동일한 수치 결과를 생성할 수 있는 두 가지 서로 다른 문제입니다. 두 경우 모두, 궁극적인 목표는 선형 필터의 파라미터를 구하는 것입니다. 하지만, 각 문제에 사용되는 필터는 다릅니다.

소개

선형 예측의 경우, 이전 샘플의 일차 결합을 기반으로 한 자기회귀 과정의 향후 샘플을 가장 효과적으로 예측할 수 있는 FIR 필터를 구하는 것이 목적입니다. 실제 자기회귀 신호와 예측된 신호 사이의 차이점을 예측 오차라고 합니다. 이상적으로, 이 오차는 백색 잡음입니다.

자기회귀 모델링의 경우, 전극점 IIR 필터를 구하는 것이 목적입니다. 전극점 IIR 필터는 백색 잡음이 가해지는 경우 모델링하려는 자기회귀 과정과 동일한 통계량을 가지는 신호를 생성합니다.

입력값으로 백색 잡음을 갖는 전극점 필터를 사용하여 AR 신호 생성하기

여기서는 LPC 함수와 FIR 필터를 사용하여 단순히 나중에 작업할 자기회귀 신호를 생성하는 데 사용할 파라미터를 구합니다. 여기서 FIR1과 LPC 사용은 중요하지 않습니다. 예를 들어, d를 [1 1/2 1/3 1/4 1/5 1/6 1/7 1/8]과 같은 단순한 값으로 대체하고 p0을 1e-6과 같은 값으로 대체할 수 있습니다. 하지만, 이 필터의 형태가 더 훌륭하므로 이를 대신 사용하겠습니다.

b = fir1(1024, .5);
[d,p0] = lpc(b,7);

자기회귀 신호를 생성하기 위해 전극점 필터에 분산 p0을 갖는 백색 가우스 잡음을 가합니다. 분산 p0을 구하기 위해서는 잡음 생성기에서 '이득' 항으로 SQRT(p0)을 사용해야 합니다.

rng(0,'twister'); % Allow reproduction of exact experiment
u = sqrt(p0)*randn(8192,1); % White Gaussian noise with variance p0

이제, 백색 가우스 잡음 신호와 전극점 필터를 사용하여 AR 신호를 생성합니다.

x = filter(1,d,u);

Yule-Walker 방법을 사용하여 신호에서 AR 모델 구하기

Yule-Walker 방정식의 해를 구하여 전극점 필터의 파라미터를 구할 수 있습니다. 전극점 필터는 백색 잡음이 가해지는 경우 지정된 신호 x의 통계량과 일치하는 통계량을 가지는 AR 신호를 생성합니다. 다시 설명하자면, 이를 자기회귀 모델링이라고 합니다. Yule-Walker 방정식의 해를 구하려면 x에 대한 자기상관 함수를 추정해야 합니다. 그런 다음, Levinson 알고리즘을 사용하여 효율적인 방식으로 Yule-Walker 방정식의 해를 구합니다. 함수 ARYULE을 사용하면 이 동작을 자동으로 수행할 수 있습니다.

[d1,p1] = aryule(x,7);

AR 모델과 AR 신호 비교하기

이제, 방금 전에 AR 신호 x를 모델링하는 데 사용한 전극점 필터의 주파수 응답을 계산해 보겠습니다. 필터에 백색 가우스 잡음이 가해진 경우 이 필터의 출력값에 대한 파워 스펙트럼 밀도가 필터의 주파수 응답의 크기 제곱에 백색 잡음 입력값의 분산을 곱한 값으로 주어진다는 것은 잘 알려진 사실입니다. 이 출력 파워 스펙트럼 밀도를 계산하는 한 가지 방법은 다음과 같이 FREQZ를 사용하는 것입니다.

[H1,w1] = freqz(sqrt(p1),d1);

자기회귀 신호 x를 얼마나 효과적으로 모델링했는지 알아보기 위해 FREQZ를 사용하여 계산된 모델 출력값의 파워 스펙트럼 밀도를 PERIODOGRAM을 사용하여 계산된 x의 파워 스펙트럼 밀도 추정값에 겹쳐 봅니다. 주기도는 2*pi로 스케일링되었으며 단측입니다. 비교하려면 이에 맞게 조정해야 합니다.

periodogram(x)
hold on
hp = plot(w1/pi,20*log10(2*abs(H1)/(2*pi)),'r'); % Scale to make one-sided PSD
hp.LineWidth = 2;
xlabel('Normalized frequency (\times \pi rad/sample)')
ylabel('One-sided PSD (dB/rad/sample)')
legend('PSD estimate of x','PSD of model output')

LPC를 사용하여 선형 예측 수행하기

이제, 선형 예측 문제를 살펴보겠습니다. 여기서는 FIR 예측 필터를 구해보도록 하겠습니다. LPC를 사용하여 이를 수행하되, LPC의 결과에 약간의 해석이 필요합니다. LPC는 전체 백색화 필터 A(z)의 계수를 반환하고, 이 필터는 입력값으로 자기회귀 신호 x를 받아 출력값으로 예측 오차를 반환합니다. 그러나, A(z)에는 B(z) = 1- A(z) 형태로 예측 필터가 포함되어 있습니다. 여기서 B(z)는 예측 필터입니다. 참고로, LPC로 계산된 계수 및 오차 분산은 기본적으로 ARYULE로 계산된 계수 및 오차 분산과 동일하지만, 해석이 다릅니다.

[d2,p2] = lpc(x,7);
[d1.',d2.']
ans = 8×2

    1.0000    1.0000
   -3.5245   -3.5245
    6.9470    6.9470
   -9.2899   -9.2899
    8.9224    8.9224
   -6.1349   -6.1349
    2.8299    2.8299
   -0.6997   -0.6997

이제 위에서 설명한 대로 A(z)에서 B(z)를 추출하여 FIR 선형 예측 변수 필터를 사용하여 이전 값의 일차 결합을 기반으로 하는 자기회귀 신호의 향후 값에 대한 추정값을 구합니다.

xh = filter(-d2(2:end),1,x);

실제 신호와 예측된 신호 비교하기

7탭 FIR 예측 필터로 무슨 작업을 했는지를 알아보기 위해 예측 필터에 1개 샘플 지연이 있다는 점을 명심하고 선형 예측 변수에서 생성된 신호 추정값과 함께 원래 자기회귀 신호의 200개 샘플을 플로팅합니다.

cla
stem([x(2:end),xh(1:end-1)])
xlabel('Sample time')
ylabel('Signal value')
legend('Original autoregressive signal','Signal estimate from linear predictor')
axis([0 200 -0.08 0.1])

예측 오차 비교하기

예측 오차 전력(분산)은 LPC의 두 번째 출력값으로 반환됩니다. 이 값은 AR 모델링 문제(p1)의 전극점 필터를 유발하는 백색 잡음의 분산과 (이론적으로) 동일합니다. 이 분산을 추정하는 또 다른 방법은 예측 오차 자체에서 추정하는 것입니다.

p3 = norm(x(2:end)-xh(1:end-1),2)^2/(length(x)-1);

다음 값은 모두 이론적으로 동일합니다. 이러한 값의 차이는 여기서 설명한 다양한 계산 오차와 근사오차로 인한 것입니다.

[p0 p1 p2 p3]
ans = 1×4
10-5 ×

    0.5127    0.5305    0.5305    0.5068

참고 항목

|