UOMOP

N-level Quantization(양자화) 본문

Wireless Comm./Matlab

N-level Quantization(양자화)

Happy PinGu 2022. 1. 18. 18:52
16-level Quantization
clear all close all
 
A = 5;
f1 = 60;
w = 2*pi*f1;
 
fs = f1 *100;
Ts = 1/fs;
t = 0:Ts:5/f1;
 
vin_t = A*cos(2*pi*f1*t);
 
h = 5.1;
l = -5.1;
n = 16;
step = (h - l) / n;
 
a = [l : step : h - step];
b = a+step;
s = [l + step/2 : step : h - step/2];
 
for i = 1 : length(vin_t)
    for k = 1:length(a)
        
    if (vin_t(i) >= a(n+1-k) && vin_t(i) <= b(n+1-k))
        
        vin_q(i) = s(n+1-k);  
        
    end
    end
end
 
    figure(1)
    grid;
    stem(t, vin_q)
    title('16 level quantization');


32-level Quantization
clear all close all
 
A = 5;
f1 = 60;
w = 2*pi*f1;
 
fs = f1 *100;
Ts = 1/fs;
t = 0:Ts:5/f1;
 
vin_t = A*cos(2*pi*f1*t);
 
h = 5.1;
l = -5.1;
n = 32;
step = (h - l) / n;
 
a = [l : step : h - step];
b = a+step;
s = [l + step/2 : step : h - step/2];
 
for i = 1 : length(vin_t)
    for k = 1:length(a)
        
    if (vin_t(i) >= a(n+1-k) && vin_t(i) <= b(n+1-k))
        
        vin_q(i) = s(n+1-k);  
        
    end
    end
end
 
    figure(1)
    grid;
    stem(t, vin_q)
    title('32 level quantization');

 


 신호의 최저값과 최고값, 양자화 레벨만 입력하면 양자화가 되도록 코딩을 했다. 변수 'step'은 1level의 크기를 정의했으며, a와 b는 중간 값으로 양자화 되는 범위를 설정 해주기 위해 변수 선언을 하였다.

 예를 들어 [-1 ~ 1] 사이에 크기를 가지는 신호가 4레벨로 양자화 되는 경우로 먼저 일반화를 진행하였다.
신호는 [-0.75, -0.25, 0.25, 0.75]로 레벨이 나눠지게 된다. 신호가 -1에서 -0.5 사이일 경우에는 그 값이 -0.75로 바뀌어야한다. -1쪽을 a라고 설정하고, -0.5쪽을 b로 설정하였다. 또한, a와 b는 1level만큼 차이가 나야한다. 이 과정을 위해 h = 1; l = -1; n = 4; step = (h - l) / n; 로 코딩을 하였다.

 이후 a, b를 배열로 만들고 if문을 이용하여 두 값 사이에 있다면 새로운 배열인 s에 할당되도록 하였다. 이 과정을 for문을 이용하여 1부터 입력신호의 최대 길이까지 반복해주었다.

이 같은 방법으로 일반화해준 다음, 변수 h, l, n만을 바꿔주면서 양자화를 진행했다.
Comments