UOMOP
N-level Quantization(양자화) 본문
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만을 바꿔주면서 양자화를 진행했다.
'Wireless Comm. > Matlab' 카테고리의 다른 글
주파수 응답 특성 확인 using Matlab (0) | 2022.01.19 |
---|---|
Fourier Series using Matlab (0) | 2022.01.19 |
표본화(Sampling)과 양자화(Quantizaton) (0) | 2022.01.18 |
FSK BER using Matlab(Simulink) (0) | 2022.01.18 |
QAM BER using Matlab(Simulink) (0) | 2022.01.17 |
Comments