Main Content

lpc

선형 예측 필터 계수

설명

[a,g] = lpc(x,p)는 과거의 샘플을 기반으로 하여 실수 값 시계열 x의 현재 값을 예측하는 FIR 필터인 p차 선형 예측 변수의 계수를 구합니다. 이 함수는 예측 오차의 분산 g도 반환합니다. x가 행렬인 경우 이 함수는 각 열을 독립적인 채널로 처리합니다.

예제

예제

모두 축소

3차 순방향 예측 변수를 사용하여 데이터 계열을 추정합니다. 추정값을 원래 신호와 비교합니다.

먼저, 정규화된 백색 가우스 잡음으로 구동되는 자기회귀(AR) 과정의 출력값으로 신호 데이터를 생성합니다. AR 과정 출력값의 마지막 4096개 샘플을 사용하여 시작 과도(Transient)를 피합니다.

noise = randn(50000,1);
x = filter(1,[1 1/2 1/3 1/4],noise);
x = x(end-4096+1:end);

예측 변수 계수와 추정된 신호를 계산합니다.

a = lpc(x,3);
est_x = filter([0 -a(2:end)],1,x);

예측된 신호와 원래 신호를 각각의 마지막 100개 샘플을 플로팅해 비교합니다.

plot(1:100,x(end-100+1:end),1:100,est_x(end-100+1:end),'--')
grid
xlabel('Sample Number')
ylabel('Amplitude')
legend('Original signal','LPC estimate')

Figure contains an axes object. The axes object with xlabel Sample Number, ylabel Amplitude contains 2 objects of type line. These objects represent Original signal, LPC estimate.

예측 오차와 예측 오차의 자기상관 시퀀스를 계산합니다. 자기상관을 플로팅합니다. 예측 오차는 3차 AR 입력 과정에 예상된 대로, 백색 가우스 잡음에 가깝습니다.

e = x-est_x;
[acs,lags] = xcorr(e,'coeff');

plot(lags,acs)
grid
xlabel('Lags')
ylabel('Normalized Autocorrelation')
ylim([-0.1 1.1])

Figure contains an axes object. The axes object with xlabel Lags, ylabel Normalized Autocorrelation contains an object of type line.

입력 인수

모두 축소

입력 배열로, 벡터나 행렬로 지정됩니다. x가 행렬이면 함수는 각 열을 독립적인 채널로 처리합니다.

예측 필터 다항식 차수로, 양의 정수로 지정됩니다. px의 길이보다 작거나 같아야 합니다.

출력 인수

모두 축소

선형 예측 변수 계수로, 행 벡터 또는 행렬로 반환됩니다. 계수는 xp개 과거 샘플 및 현재 값과 다음 관계를 가집니다.

x^(n)=a(2)x(n1)a(3)x(n2)a(p+1)x(np).

예측 오차 분산으로, 스칼라 또는 벡터로 반환됩니다.

세부 정보

모두 축소

예측 오차

예측 오차 e(n)은 예측 오차 필터 A(z)의 출력값으로 볼 수 있습니다. 여기서

  • H(z)는 최적 선형 예측 변수입니다.

  • x(n)은 입력 신호입니다.

  • x^(n)은 예측된 신호입니다.

알고리즘

lpc는 최소제곱 측면에서 예측 오차를 최소화하는 방식으로 순방향 선형 예측 변수의 계수를 결정합니다. 이는 필터 설계와 음성 코딩에 응용할 수 있습니다.

lpc는 자기회귀(AR) 모델링의 자기상관 방법을 사용하여 필터 계수를 구합니다. 데이터 시퀀스가 올바른 차수에 대한 진정한 AR 과정이라고 할지라도 생성된 필터는 과정을 정확히 모델링하지 못할 수 있습니다. 이것은 자기상관 방법이 데이터에 묵시적으로 윈도우를 적용하기 때문입니다. 즉, 이 방법은 x의 길이를 초과하는 신호 샘플을 0으로 간주합니다.

lpcXa = b에 대한 최소제곱해를 계산합니다. 여기서

X=[x(1)00x(2)x(1)x(2)0x(m)x(1)0x(m)x(2)00x(m)],a=[1a(2)a(p+1)],b=[100],

mx의 길이입니다. 정규 방정식 XHXa=XHb를 사용하여 최소제곱 문제를 풀면 다음과 같은 Yule-Walker 방정식이 생성됩니다.

[r(1)r(2)r(p1)r(p)r(2)r(1)r(p2)r(p1)r(p1)r(p2)r(1)r(2)r(p)r(p1)r(2)r(1)][a(2)a(3)a(p)a(p+1)]=[r(2)r(3)r(p)r(p+1)],

여기서 r = [r(1) r(2) ... r(p+1)]xcorr을 사용하여 계산된 x에 대한 자기상관 추정값입니다. Levinson-Durbin 알고리즘(levinson 참조)은 O(p2) 플롭스 내에 Yule-Walker 방정식의 해를 구합니다.

참고 문헌

[1] Jackson, L. B. Digital Filters and Signal Processing. 2nd Edition. Boston: Kluwer Academic Publishers, 1989, pp. 255–257.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | | |