Hi,
To start with OTFS(Orthogonal Time Frequency Space),we have to first define the parameters required like number of delay bins, doppler bins, modulation order and frequency. As real communication signal would have random bits, so we create random input data and map it to the QAM constellation. QAM can be applied through “qammod” functions. We reshape the QAM into a grid representing delay-Doppler domain. Then, perform ISFFT along both the delay bins and Doppler bins using “ifft” and “ifftshift” function. Finally, we can convert it into time domain and extract the inphase using “real” and quadrature using “imag” functions. Convert each of them to a txt file or csv file and use it in keysight ADS and other equipments. You can refer to the following documentations for any further reference:
You can refer to the following code for reference:
% OTFS Modulation Parameters
noSubcarr = 32; % Number of subcarriers (delay bins)
noofSymbols = 32; % Number of symbols (Doppler bins)
modOrder = 16; % 16-QAM
% Random data symbols for 16-QAM
data = randi([0 modOrder-1], noSubcarr * noofSymbols, 1);
qamSymbols = qammod(data, modOrder, 'UnitAveragePower', true);
% Reshape data into a delay-Doppler grid
dDGrid = reshape(qamSymbols, noSubcarr, noofSymbols);
% Perform Inverse Symplectic Finite Fourier Transform (ISFFT)
txWaveform = ifft(ifftshift(dDGrid, 1), [], 1);
txWaveform = fftshift(ifft(txWaveform, [], 2), 2);
I = real(txWaveform(:));
Q = imag(txWaveform(:));
writematrix([I, Q], 'OTFS_IQ_Data.txt', 'Delimiter', 'tab');
figure;
plot(I, Q, 'o');
title('OTFS Modulated Waveform');
xlabel('In-phase (I)');
ylabel('Quadrature (Q)');
grid on;
