faster than Nyquist OFDM implementation
22 views (last 30 days)
Show older comments
for almost a month I have been trying to replicate the performance of this paper "https://ieeexplore.ieee.org/document/10225298", it MIMO-FTN implementation my focus is on the OFDM-SISO-FTN. I tried implementing my concern is that I implemented H_isi and phi (noise covariance ) in the wrong way , can you give me your feed back on the code :
my code :
N = 128; % FFT size
G = 30; % Cyclic prefix length
% FTN parameters
rolloff = 0.3; % RRC roll-off factor
zeta =0.9; % FTN time compression factor (0 < zeta < 1) - Set to < 1 for true FTN
filter_span =12; % Filter span in symbols
sps = 10; % Samples per symbol for pulse shaping
sps_ftn = round(sps*zeta); % Effective samples per symbol (FTN acceleration)
%% Step 1: Generate random bits and BPSK modulation
% Generate random bits for all antennas
bit_streams = randi([0 1], N, Nt); % N x Nt
% BPSK modulation (0 -> -1, 1 -> +1)
S = 2 * bit_streams - 1; % N x Nt
%% Step 2: implement Precoding,
x_cp_p = zeros(N+G, Nt);
% process data steam
x_cp_p = A_cp * F_H * P * S;
%% Step 3: PULSE SHAPING
tx_upsampled = zeros(((length(x_cp_p))-1)*sps_ftn + 1,Nt ); %upsample T=tau*T0;
tx_upsampled(1:sps_ftn:end,Nt) = x_cp_p;
% Apply the FTN shaping filter to the transmitted signal
Tx_shaped = conv(tx_upsampled, rrc_filter);
tx_signal = Tx_shaped;
%% Generate ISI matrix properly (using first loop) ????
ac = conv(rrc_filter,rrc_filter);
ac_center = (length(ac) + 1) / 2;
% Generate ISI matrix H (NxN) with multipath effects
H_ISI = zeros(N+G, N+G);
for i = 1:N+G
for j = 1:N+G
val = 0;
for l = 0:L-1
dist = i - (j + l);
ac_idx = round(ac_center + dist * sps_ftn);
if ac_idx >= 1 && ac_idx <= length(ac)
val = val + h_channel(l+1) * ac(ac_idx);
end
end
H_ISI(i, j) = val;
end
end
%% Compute noise covariance using pulse autocorrelation (R_n) ????
phi = zeros(N, 1); % Initialize the noise covariance matrix
for n = 0:N-1
sum_val = 0;
for i = 0:N-1
for j = 0:N-1
lag = i - j;
ac_idx = ac_center + lag;
if ac_idx >= 1 && ac_idx <= length(ac)
sum_val = sum_val + ac(ac_idx) * exp((1i * 2*pi * lag * n )/ N); % Use N0/2 for proper scaling
end
end
end
phi(n+1) = sum_val / N;
end
% Scalar noise power (diagonal covariance)
Noise_var=phi*N0;
Noise_var=diag(Noise_var);
2 Comments
sadeq ebrahimi
on 19 Nov 2025 at 7:43
Hello Ahmed I am also working on FTN could you give me your contacts to connect each other?
Dokman Djaaroun
on 4 Dec 2025 at 2:08
Hello Ahmed and Sadeq I am lokman I am also working on FTN this my email dokman27@gmail.com
Answers (0)
See Also
Categories
Find more on Waveform Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!