faster than Nyquist OFDM implementation

22 views (last 30 days)
ahmed
ahmed on 30 Apr 2025
Commented: Dokman Djaaroun on 4 Dec 2025 at 2:08
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 :
represents the channel matrix including the effects of ISI induced by FTN signaling and the multipath fading, and ηq is the sampled version of ηq(t). Specifically, the (k,m)-th entries of HISI can be calculated by:
g(t) is pulse shaping
​ to reduce the computation loading, whose n-th diagonal entry is calculated by
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
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
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

Sign in to comment.

Answers (0)

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!