주요 콘텐츠

quantiz

양자화 인덱스와 양자화된 출력값 생성

설명

index = quantiz(sig,partition)은 입력값 partition에 지정된 스칼라 양자화 분할을 사용하여 입력 신호 sig의 양자화 수준을 반환합니다.

[index,quants] = quantiz(sig,partition,codebook)은 스칼라 양자화의 각 분할에 대한 값을 규정하는 codebook을 지정합니다. codebook은 벡터이며 길이가 partition 길이보다 1만큼 더 커야 합니다. 이 함수는 또한 sig의 스칼라 양자화가 포함된 quants를 반환합니다. 이 값은 양자화 수준과 코드북에 규정된 값에 따라 달라집니다.

예제

[index,quants,distor] = quantiz(sig,partition,codebook)은 양자화 데이터의 평균제곱 왜곡의 추정값을 반환합니다.

예제

예제

모두 축소

quantiz 함수가 분할과 코드북을 사용하여 실수형 벡터 samp를 요소가 -1, 0.5, 2 또는 3인 새 벡터 quantized에 매핑하는 방법을 보여줍니다.

샘플 데이터를 생성하고 partitioncodebook 벡터를 지정합니다. 서로 다른 간격의 고유한 끝점을 벡터의 요소 값으로 정의하여 partition 벡터를 지정합니다. partition 벡터에 정의된 각 간격에 대한 요소 값을 사용하여 codebook 벡터를 지정합니다. codebook 벡터는 partition 벡터보다 한 개 요소만큼 더 길어야 합니다.

samp = [-2.4, -1, 0, 0.2, 0.8, 1.2, 2,3, 3.5, 5];
partition = [0, 1, 3];
codebook = [-1, 0.5, 2, 3]; 

데이터 샘플을 양자화합니다. 입력 샘플 데이터, 양자화 인덱스, 입력 데이터의 대응하는 양자화된 출력값을 표시합니다.

[index,quantized] = quantiz(samp,partition,codebook);
[samp; index; quantized]'
ans = 10×3

   -2.4000         0   -1.0000
   -1.0000         0   -1.0000
         0         0   -1.0000
    0.2000    1.0000    0.5000
    0.8000    1.0000    0.5000
    1.2000    2.0000    2.0000
    2.0000    2.0000    2.0000
    3.0000    2.0000    2.0000
    3.5000    3.0000    3.0000
    5.0000    3.0000    3.0000

이 예제에서는 스칼라 양자화의 성질을 설명하기 위해 사인파를 양자화하는 방법을 보여줍니다. 사인 곡선을 구성하는 x 기호와 양자화된 신호를 구성하는 점을 대조하기 위해 원래 신호와 양자화된 신호를 플로팅합니다. 각 점의 수직 좌표는 벡터 코드북의 값입니다.

t로 정의된 시간에 샘플링된 사인파를 생성합니다. 서로 다른 간격의 고유한 끝점을 벡터의 요소 값으로 정의하여 partition 입력값을 지정합니다. partition 벡터에 정의된 각 간격에 대한 요소 값으로 codebook 입력값을 지정합니다. 코드북 벡터는 분할 벡터보다 한 개 요소만큼 더 길어야 합니다.

t = [0:.1:2*pi];
sig = sin(t);
partition = [-1:.2:1];
codebook = [-1.2:.2:1];

샘플링된 사인파에 대해 양자화를 수행합니다.

[index,quants] = quantiz(sig,partition,codebook);

양자화된 사인파와 샘플링된 사인파를 플로팅합니다.

plot(t,sig,'x',t,quants,'.')
title('Quantization of Sine Wave')
xlabel('Time')
ylabel('Amplitude')
legend('Original sampled sine wave','Quantized sine wave');
axis([-.2 7 -1.2 1.2])

Figure contains an axes object. The axes object with title Quantization of Sine Wave, xlabel Time, ylabel Amplitude contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Original sampled sine wave, Quantized sine wave.

양호한 양자화 방식을 사용하여 대규모 신호 세트의 파라미터를 테스트하고 선택하는 작업은 지루할 수 있습니다. 분할 및 코드북 파라미터를 쉽게 생성하는 한 가지 방법은 훈련 데이터 세트에 따라 이를 최적화하는 것입니다. 훈련 데이터는 양자화할 신호의 특성을 잘 나타내야 합니다.

이 예제에서는 lloyds 함수를 사용하여 로이드(Lloyd) 알고리즘에 따라 분할과 코드북을 최적화합니다. 이 코드는 대략적인 초기 추측에서 시작하여 정현파 신호의 한 주기에 대한 분할과 코드북을 최적화합니다. 그런 다음 이 예제에서는 초기 partitioncodebook 입력값을 사용하고 최적화된 partitionOptcodebookOpt 입력값을 사용하여 양자화된 데이터를 생성하기 위해 quantiz 함수를 두 번 실행합니다. 이 예제에서는 초기 양자화와 최적화된 양자화의 왜곡도 비교합니다.

사인파 신호의 변수와 초기 양자화 파라미터를 정의합니다. lloyds 함수를 사용하여 분할과 코드북을 최적화합니다.

t = 0:.1:2*pi;
sig = sin(t);
partition = -1:.2:1;
codebook = -1.2:.2:1;
[partitionOpt,codebookOpt] = lloyds(sig,codebook);

초기 상태와 최적화된 상태에서의 분할과 코드북 벡터를 사용하여 양자화된 신호를 생성합니다. quantiz 함수는 평균제곱 왜곡을 자동으로 계산하여 세 번째 출력 인수로 반환합니다. 양자화의 평균제곱 왜곡을 초기 상태와 최적화된 상태에서의 입력 인수와 비교하여 최적화된 양자화 값을 사용할 때 왜곡이 얼마나 적게 발생하는지 확인합니다.

[index,quants,distor] = quantiz(sig,partition,codebook);
[indexOpt,quantOpt,distorOpt] = ...
    quantiz(sig,partitionOpt,codebookOpt);
[distor, distorOpt]
ans = 1×2

    0.0148    0.0022

샘플링된 사인파, 양자화된 사인파, 최적화된 양자화된 사인파를 플로팅합니다.

plot(t,sig,'x',t,quants,'.',t,quantOpt,'s')
title('Quantization of Sine Wave')
xlabel('Time')
ylabel('Amplitude')
legend('Original sampled sine wave', ...
    'Quantized sine wave', ...
    'Optimized quantized sine wave');
axis([-.2 7 -1.2 1.2])

Figure contains an axes object. The axes object with title Quantization of Sine Wave, xlabel Time, ylabel Amplitude contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Original sampled sine wave, Quantized sine wave, Optimized quantized sine wave.

입력 인수

모두 축소

입력 신호로, 벡터로 지정됩니다. 이 입력값은 이 함수가 양자화를 수행할 샘플링된 신호를 지정합니다.

데이터형: double

각기 다른 범위의 고유한 끝점으로, 행 벡터로 지정됩니다. 이 입력값은 실수 집합 내에서 여러 개의 연속적이고 중첩되지 않는 값들의 범위를 정의합니다. 이 입력에 있는 값은 순오름차순이어야 합니다. 이 벡터의 길이는 분할 구간 수보다 1만큼 작아야 합니다.

예: [0, 1, 3]은 입력 행 벡터를 {X: X0}, {X: 0 < X1}, {X: 1 < X3}, {X: 3 < X}의 4개 세트로 분할합니다.

데이터형: double

각 분할의 양자화 값으로, 행 벡터로 지정됩니다. 이 입력값은 스칼라 양자화의 각 분할에 공통된 값을 규정합니다. 이 벡터의 길이는 분할 구간 수와 같아야 합니다. 즉, 이 벡터의 길이는 partition 입력의 길이보다 1만큼 더 커야 합니다.

데이터형: double

출력 인수

모두 축소

입력 신호의 양자화 인덱스로, 음이 아닌 행 벡터로 반환됩니다. 이 출력값은 각 입력값이 어느 분할 구간에 매핑되는지 결정합니다. index의 각 요소는 [0, N–1] 범위에 있는 N개 정수 중 하나입니다.

partition 입력의 길이가 N인 경우 indexK번째 요소가 다음과 같은 벡터입니다.

  • sig(K) ≤ partition(1)인 경우 0

  • partition(M) < sig(K) ≤ partition(M+1)인 경우 M

  • partition(N) ≤ sig(K)인 경우 N

양자화기의 출력값으로, 입력 신호의 양자화 값을 포함하며 행 벡터로 반환됩니다. quants의 크기는 입력 인수 sig의 크기와 일치합니다. codebook이 입력 인수로 지정되지 않은 경우 코드북 값을 벡터로 정의할 수 있으며 이때 그 길이는 partition의 길이보다 1만큼 더 커야 합니다.

quantscodebookindex 입력값을 기반으로 계산되며 quants(i) = codebook(index(i) + 1)로 지정됩니다. 여기서 i는 [1, length(sig)] 범위 내의 정수입니다.

양자화된 신호의 평균제곱 왜곡으로, 양의 스칼라로 반환됩니다. 적절한 분할과 코드북 값을 선택하여 이러한 왜곡을 줄일 수 있습니다. 분할 및 코드북 값을 최적화하는 방법에 대한 자세한 내용은 lloyds 함수를 참조하십시오.

버전 내역

R2006a 이전에 개발됨

참고 항목

함수

도움말 항목