45 lines
1.8 KiB
Matlab
45 lines
1.8 KiB
Matlab
function [rd_map, doppler_axis] = process_doppler_fft(range_profile, RadarParams)
|
|
% 입력:
|
|
% - range_profile: [NumRx, NumTx, NumChirps, NumRangeBins]
|
|
% - RadarParams: 메인 파라미터 구조체
|
|
NumChirps = RadarParams.Waveform.NumChirps;
|
|
window_type = RadarParams.SP.RDM.window_type_doppler;
|
|
|
|
[~, ~, ~, ~] = size(range_profile);
|
|
% 중심 주파수에서의 파장
|
|
lambda = RadarParams.Waveform.lambda_c; % = c/fc
|
|
|
|
% 1. 처프 간 반복 주기 (PRI, Pulse Repetition Interval)
|
|
T_pri = RadarParams.Waveform.PRI;
|
|
|
|
% 2. Doppler-FFT용 윈도우 함수 (사용자 선택 가능)
|
|
% 도플러 방향(3번째 차원)으로 사이드로브를 억제합니다.
|
|
if strcmpi(window_type, 'none')
|
|
win_doppler = ones(1, NumChirps);
|
|
elseif strcmpi(window_type, 'hamming')
|
|
win_doppler = hamming(NumChirps)';
|
|
elseif strcmpi(window_type, 'blackman')
|
|
win_doppler = blackman(NumChirps)';
|
|
elseif strcmpi(window_type, 'hann')
|
|
win_doppler = hann(NumChirps)';
|
|
else % default: 'chebwin'
|
|
win_doppler = chebwin(NumChirps, 60)'; % 60dB 사이드로브 억제
|
|
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 |