faster than Nyquist OFDM implementation

조회 수: 22 (최근 30일)
ahmed
ahmed 2025년 4월 30일
댓글: Dokman Djaaroun 2025년 12월 4일 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
sadeq ebrahimi
sadeq ebrahimi 2025년 11월 19일 7:43
Hello Ahmed I am also working on FTN could you give me your contacts to connect each other?
Dokman Djaaroun
Dokman Djaaroun 2025년 12월 4일 2:08

Hello Ahmed and Sadeq I am lokman I am also working on FTN this my email dokman27@gmail.com

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Waveform Generation에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by