39 lines
1.5 KiB
Matlab
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 |