Files
ARSS/03. Rx Path/apply_adc_quantization.m
T

39 lines
1.4 KiB
Matlab

function quantized_data = apply_adc_quantization(adc_raw_data, n_bits, v_full_scale, mode)
% 입력:
% - adc_raw_data: HPF/LPF가 적용된 복소 비트 신호 (Voltage Scale)
% - n_bits: ADC 비트 수
% - v_full_scale: ADC Peak-to-Peak 전압 범위 (e.g., 2.0V)
% - mode: 'IQ' (Complex 출력) 또는 'Real' (Real 출력)
v_max = v_full_scale / 2;
lsb = v_full_scale / (2^n_bits);
if strcmpi(mode, 'IQ')
% --- Case 1: I/Q Demodulation (Complex) ---
% I채널과 Q채널 각각 독립적으로 Clipping 및 Quantization 진행
r_part = real(adc_raw_data);
i_part = imag(adc_raw_data);
r_part = max(min(r_part, v_max), -v_max);
i_part = max(min(i_part, v_max), -v_max);
q_r = round(r_part / lsb) * lsb;
q_i = round(i_part / lsb) * lsb;
quantized_data = q_r + 1j * q_i;
elseif strcmpi(mode, 'Real')
% --- Case 2: Real Demodulation ---
% 복소 신호의 실수부(I채널)만 취하여 ADC 처리
% 실제 하드웨어에서는 믹서에서 허수 성분이 아예 생성되지 않음
r_part = real(adc_raw_data);
r_part = max(min(r_part, v_max), -v_max);
q_r = round(r_part / lsb) * lsb;
% 결과는 실수(Real) 행렬
quantized_data = q_r;
else
error('모드는 IQ 또는 Real 중 하나를 선택해야 합니다.');
end
end