40 lines
1.4 KiB
Matlab
40 lines
1.4 KiB
Matlab
function [range_profile, range_axis] = process_range_fft_lpf(adc_raw_data, RadarParams)
|
|
% 입력:
|
|
% - adc_raw_data: [NumRx, NumTx, NumChirps, N_samples]
|
|
% - RadarParams: 메인 파라미터 구조체
|
|
fs_adc = RadarParams.Waveform.fs_adc;
|
|
Slope = RadarParams.Waveform.Slope;
|
|
fc_lpf_Hz = RadarParams.Rxpath.fc_lpf;
|
|
|
|
[~, ~, ~, N_samples] = size(adc_raw_data);
|
|
c = RadarParams.Basic.c;
|
|
|
|
% 1. Main.m에서 생성된 윈도우 함수 적용
|
|
win = RadarParams.SP.RDM.window_range;
|
|
if length(win) ~= N_samples
|
|
error('Window length mismatch: expected %d, got %d', N_samples, length(win));
|
|
end
|
|
win_data = adc_raw_data .* reshape(win, [1, 1, 1, N_samples]);
|
|
|
|
% 2. Range-FFT 수행
|
|
range_fft = fft(win_data, N_samples, 4);
|
|
|
|
% 3. 주파수 및 거리 축 계산
|
|
df = fs_adc / N_samples;
|
|
freq_axis = (0 : N_samples-1) * df;
|
|
full_range_axis = (freq_axis * c) / (2 * Slope);
|
|
|
|
% 4. Ideal LPF 컷오프 인덱스 산출
|
|
cutoff_idx = floor(fc_lpf_Hz / df);
|
|
|
|
% 인덱스가 유효 범위를 넘지 않도록 방어 코드
|
|
half_idx = floor(N_samples/2);
|
|
final_idx = min(cutoff_idx, half_idx);
|
|
|
|
% 5. [핵심 수정] 데이터 잘라내기 (Truncation)
|
|
% 1번 인덱스부터 final_idx까지만 추출하여 메모리 점유율을 줄임
|
|
range_profile = range_fft(:, :, :, 1:final_idx);
|
|
range_axis = full_range_axis(1:final_idx);
|
|
|
|
|
|
end |