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

39 lines
1.5 KiB
Matlab

function filtered_data = apply_analog_hpf(adc_raw_data, fs_adc, fc_hpf_Hz)
% 입력:
% - adc_raw_data: [NumRx, NumTx, NumChirps, N_samples] 복소 데이터
% - fs_adc: ADC 샘플링 주파수 (Hz)
% - fc_hpf_Hz: HPF 차단 주파수 (Cut-off Frequency, Hz)
[NumRx, NumTx, NumChirps, N_samples] = size(adc_raw_data);
filtered_data = zeros(size(adc_raw_data));
% 1. 1차 아날로그 HPF 설계 (S-plane -> Z-plane 변환)
% Analog Transfer Function: H(s) = s / (s + omega_c)
omega_c = 2 * pi * fc_hpf_Hz;
% 쌍선형 변환(Bilinear Transform)을 이용한 디지털 필터 계수 산출
% [b, a] = butter(1, fc_hpf_Hz / (fs_adc/2), 'high'); % 또는 아래와 같이 직접 계산
T = 1 / fs_adc;
alpha = 2 / T;
b0 = alpha / (alpha + omega_c);
b1 = -alpha / (alpha + omega_c);
a1 = (omega_c - alpha) / (alpha + omega_c);
b = [b0, b1];
a = [1, a1];
% 2. 모든 채널 및 처프에 대해 필터 적용
for rx = 1:NumRx
for tx = 1:NumTx
for m = 1:NumChirps
% 각 샘플 시퀀스 추출
raw_sig = squeeze(adc_raw_data(rx, tx, m, :));
% 필터 적용 (초기 과도 응답을 최소화하기 위해 'filtfilt' 대신 'filter' 사용)
% 실시간 시스템의 특성을 모사하기 위해 인과적(Causal) 필터인 filter 함수 사용
filtered_data(rx, tx, m, :) = filter(b, a, raw_sig);
end
end
end
end