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