Академический Документы
Профессиональный Документы
Культура Документы
m 1 of 4
clc;
clear;
close all;
no_scr=512;
no_sym =128;
cp=20;
M=16;
Nfft = 128;
Nps=4;
Np=Nfft/Nps; % Number of pilots
for k=1:Np
Xp((k-1)*Nps+1)= exp(j*pi*(k-1)^2/Np).'; % Pilot boosting with an even Np
%xp((k-1)*Nps+1)= exp(j*pi*(k-1)*k/Np); % Pilot boosting with an odd Np
end
% channel type
ch_type = 'awgn';
EbNo = 1:32;
SNR = EbNo+10*log10(nb_s);
x1=bi2de(reshape(data,nb_s,numel(data)/nb_s).','left-msb');
%test = reshape(data,nb_s,numel(data)/nb_s)
%test2 = test.'
% modulate data
x=qammod(x1,M,'gray');
%draw scatterplot(x)
Nfft = 128;
Nps=4;
xp= add_pilot(x,Nfft,Nps);
%xp==x
% Localized sub-mapp
x_lfdma=zeros(no_scr,1);
for i=1:no_sym
x_lfdma(i)=x_fft(i);
end
% time domain of data
x_ifft=ifft(x_lfdma,no_scr).';
pilot_loc = [];
[H_MMSE] = MMSE_CE(Y_lfdmade,Xp,pilot_loc,Nfft,Nps,H_eff);
channel_new= H_eff-H_MMSE;
% Perform channel equalization in the frequencydomain.
C = conj(channel_new)./(conj(channel_new).*channel_new+ 10^(-SNR(ii)/10));
Y= Y_lfdmade.*C;
% Convert the signal back to time domain.
y_ifft = ifft(Y,no_sym);
%qamdemodulation
y=qamdemod(y_ifft,M,'gray');
y_rev1=de2bi(y,'left-msb').';
y_rev2=reshape(y_rev1,numel(y_rev1),1);
%%%TESTING%%%
y_rev2==data;
%% matching data:
ABC=find(ans);
02/09/20 12:44 C:\Users\Amro\Desktop\SUST\F...\SCFDMA3.m 3 of 4
function xp=add_pilot(x,Nfft,Nps)
% number of subcarriers(M)
% number of ofdm symbols(N)
% http://www.wiley.com//legacy/wileychi/cho/
if nargin<3,
Nps=4;
end
Np=Nfft/Nps; % Number of pilots
xp=x; % an OFDM signal including pilot signal
for k=1:Np
xp((k-1)*Nps+1)= exp(j*pi*(k-1)^2/Np); % Pilot boosting with an even Np
%xp((k-1)*Nps+1)= exp(j*pi*(k-1)*k/Np); % Pilot boosting with an odd Np
end
end
% CAZAC (Constant Amplitude Zero AutoCorrelation) sequence --> pilot
Np=Nfft/Nps;
%snr = 10.^(SNR*0.1);
%k=1:Np;
L=1:4:128;
H_tilde = Y(1,L)./Xp(L); % LS estimate Eq.(6.12) or (6.8)
%testing o=Y(1,125)./Xp(125)
j2pi_tau_df = j*2*pi*tau_rms*df;
K1 = repmat([0:Nfft-1].',1,Np); K2 = repmat([0:Np-1],Nfft,1);
rf = 1./(1+j2pi_tau_df*Nps*(K1-K2)); % Eq.(6.17a) frequency-domain correlation
K3 = repmat([0:Np-1].',1,Np); K4 = repmat([0:Np-1],Np,1);
rf2 = 1./(1+j2pi_tau_df*Nps*(K3-K4)); % Eq.(6.17a)
Rhp = rf;
Rpp = rf2 + eye(length(H_tilde),length(H_tilde)); % Eq.(6.14)
H_MMSE = transpose(Rhp*inv(Rpp)*H_tilde.'); % MMSE estimate Eq.(6.15)
end