% 입력 변수에서 chirpIdx 제거, t와 fs 추가 function tx_matrix = apply_mimo_mode(x_amp, t, Timing, NumTx, mimoMode, fs) N_samples = length(x_amp); tx_matrix = zeros(NumTx, N_samples); T_chirp = Timing.IdleTime + Timing.RampEndTime; SamplesPerChirp = round(T_chirp * fs); % [핵심]: 각 샘플이 몇 번째 처프(1, 2, 3...)에 해당하는지 배열로 계산 chirp_indices = floor((0:N_samples-1) / SamplesPerChirp) + 1; switch upper(mimoMode) case 'TDM' % 처프 인덱스에 따라 1,2,3,1,2,3 번갈아가며 안테나 켬 active_tx_seq = mod(chirp_indices - 1, NumTx) + 1; for tx = 1:NumTx % 활성화된 안테나 번호와 일치하는 구간만 신호 통과 tx_matrix(tx, :) = x_amp .* (active_tx_seq == tx); end case 'DDMA' % 모든 처프에서 켜지지만 처프 번호에 따라 위상이 누적해서 틀어짐 for tx = 1:NumTx phase_shift_seq = 2 * pi * (tx - 1) * (chirp_indices - 1) / NumTx; tx_matrix(tx, :) = x_amp .* exp(1j * phase_shift_seq); end otherwise error('지원하지 않는 MIMO 모드입니다. TDM 또는 DDMA를 선택하세요.'); end end