Files
ARSS/04. Signal Processing/process_doppler_fft.m
T
KG-access 3c05d2be09 1. SNR 신호처리, Secondary surface 영향 고려하여 SNR 재계산
2. Coverage Figure 개선
3. 윈도우 생성 및 성능 계산 함수 추가
2026-03-06 06:48:07 +09:00

36 lines
1.4 KiB
Matlab

function [rd_map, doppler_axis] = process_doppler_fft(range_profile, RadarParams)
% 입력:
% - range_profile: [NumRx, NumTx, NumChirps, NumRangeBins]
% - RadarParams: 메인 파라미터 구조체
NumChirps = RadarParams.Waveform.NumChirps;
[~, ~, ~, ~] = size(range_profile);
% 중심 주파수에서의 파장
lambda = RadarParams.Waveform.lambda_c; % = c/fc
% 1. 처프 간 반복 주기 (PRI, Pulse Repetition Interval)
T_pri = RadarParams.Waveform.PRI;
% 2. Main.m에서 생성된 Doppler-FFT용 윈도우 함수 적용
win_doppler = RadarParams.SP.RDM.window_doppler;
if length(win_doppler) ~= NumChirps
error('Doppler window length mismatch: expected %d, got %d', NumChirps, length(win_doppler));
end
win_data = range_profile .* reshape(win_doppler, [1, 1, NumChirps, 1]);
% 3. Doppler-FFT 수행 (3번째 차원: Chirp)
% 해상도를 위해 NFFT를 NumChirps보다 크게 잡을 수도 있습니다.
rd_fft = fft(win_data, NumChirps, 3);
% 4. fftshift 적용 (속도 0을 중심으로 정렬)
% [-, 0, +] 순서로 속도 축이 정렬됩니다.
rd_map = fftshift(rd_fft, 3);
% 5. 속도 축(Velocity Axis) 계산
% 최대 탐지 속도 Vmax = lambda / (4 * T_pri)
v_max = lambda / (4 * T_pri);
% 속도 해상도 dv = lambda / (2 * NumChirps * T_pri)
doppler_axis = linspace(-v_max, v_max, NumChirps);
end