36 lines
1.4 KiB
Matlab
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 |