You are not logged in.
We modified the code in wl_example_siso_ofdm_txrx.m as given below
1) transmitter side
% Insert the data and pilot values; other subcarriers will remain at 0
ifft_in_mat(SC_IND_DATA, :) = tx_syms_mat;
ifft_in_mat(SC_IND_PILOTS, :) = pilots_mat;
totalSubcarriers = 256 ;% M.
numSymbols = N_SC;% N.
Q = totalSubcarriers/numSymbols;
subcarrierMapping = 'LFDMA';% Subcarrier mapping scheme.
X=fft(ifft_in_mat, N_SC, 1);
Y = zeros(totalSubcarriers,N_OFDM_SYMS);
%%%%%%%%%%%%%%%% Mapping%%%%%%%%%%%%%%%%.
if subcarrierMapping == 'IFDMA'
Y(1:Q:totalSubcarriers,:) = X;
elseif subcarrierMapping == 'LFDMA'
Y(1:numSymbols,:) = X;
end
M=totalSubcarriers;
%Perform the IFFT
tx_payload_mat = ifft(Y, M, 1);
2) at receiver side
% Take the FFT
syms = fft(payload_mat_noCP, M, 1);
% Equalize (zero-forcing, just divide by complex chan estimates)
syms_f_mat = syms(1:N_SC,:) ./ repmat(rx_H_est.', 1, N_OFDM_SYMS);
if subcarrierMapping == 'IFDMA'
Demap = syms_f_mat(1:Q:M,:);
elseif subcarrierMapping == 'LFDMA'
Demap = syms_f_mat(1:N_SC,:);
end
syms_eq_mat = ifft(Demap);
The problem is that rx_H_est value is 0 at indices 1, 28 to 38. In case of OFDM as there is no IFFT block after FDE there is no problem but in SC-FDMA as we need to perform IFFT after FDE the infinity values in syms_f_mat, Demap cause NaN values in syms_eq_mat. Can anybody help me with this problem?
Last edited by shriramtej (2018-Aug-23 02:01:03)
Offline
The problem is that rx_H_est value is 0 at indices 1, 28 to 38
The WARPLab OFDM example code uses a preamble similar to 802.11a. This preamble only defines non-zero training symbols in subcarriers which carry data/pilot symbols. The DC subcarrier (MATLAB index 1) and the higher-frequency subcarriers (indexes 28:38) are all zero in the training symbols and payload. If you modify the payload to use these subcarriers you must also modify the training symbols to have non-zero values so your Rx code can estimate the corresponding channel coefficients.
Offline
If you modify the payload to use these subcarriers you must also modify the training symbols to have non-zero values so your Rx code can estimate the corresponding channel coefficients.
Thank you for the reply. I did modified lts_f values so that it has all non zero values like
lts_f = [1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 1 1 1 (1) 1 1 -1 -1 1 1 -1 1 -1 1 -1 (1) 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1];
but the results are very bad. Is there any condition for lts_f to satisfy while modifying it?
Offline
The DC (zero frequency) term should be 0. Does your signal actually occupy all 64 subcarriers? This would be unusual- the higher subcarriers are typically reserved to allow better spectral mask compliance.
Offline
Actually we need more subcarriers than 64. As shown in the image if N=64 then M would be greater than 64 say 256. As the code is for 64 subcarriers lets assume N=16 and M=64. So in this case we need 64 subcarriers
https://en.wikipedia.org/wiki/File:Scfdma.jpg
Last edited by shriramtej (2018-Aug-28 04:48:35)
Offline
I'm not familiar with SC-FMDA. In general you must provide training symbols with the same frequency content as the data symbols. In OFDM this means using a training symbol (LTS in 802.11) with known values in the same subcarriers as the data/pilot symbols. You will need to build something similar for your custom waveform.
Offline