suddhi
Newbie level 1
- Joined
- Sep 20, 2014
- Messages
- 1
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1
- Activity points
- 5
Hi,I took 64 subcarriers outof which 52 are used.I find channel response.Now channel output is cconv of fading channel output and transmitted output.I stucked at this point.Here is my code.can any one please help me
Code:
clc
close all
clear all
nFFTSize = 64;
% for each symbol bits a1 to a52 are assigned to subcarrier
% index [-26 to -1 1 to 26]
subcarrierIndex = [11:26];
nBit = 2500;
input = round(rand(1,nBit));
nBitPerSymbol = length(subcarrierIndex);
nSymbol = ceil(nBit/nBitPerSymbol);
ipMod = 2*input - 1;
ipMod = [ipMod zeros(1,nBitPerSymbol*nSymbol-nBit)];%zreros(48)
% size(ipMod)
ipMod = reshape(ipMod,nSymbol,nBitPerSymbol);
size(ipMod)
tx1=[];
for ii = 1:nSymbol
inputiFFT = zeros(1,nFFTSize);
% assigning bits to subcarriers
inputiFFT(subcarrierIndex+nFFTSize/2+1) = ipMod(ii,:);
inputiFFT = fftshift(inputiFFT);
outputiFFT = ifft(inputiFFT,nFFTSize);
% adding cyclic prefix of 16 samples
outputiFFT_with_CP = [outputiFFT(49:64) outputiFFT];
tx1=[tx1 outputiFFT_with_CP];
end
%% 2nd user
subcarrierIndex = [-26:-1 1:26];
nBit = 2500;
input = round(rand(1,nBit));
nBitPerSymbol = 52;
nSymbol = ceil(nBit/nBitPerSymbol);
ipMod = 2*input - 1;
ipMod = [ipMod zeros(1,nBitPerSymbol*nSymbol-nBit)];
ipMod = reshape(ipMod,nSymbol,nBitPerSymbol);
tx2=[];
for ii = 1:nSymbol
inputiFFT = zeros(1,nFFTSize);
% assigning bits a1 to a52 to subcarriers [-20:-10 -5:-1, 1 to 20]
inputiFFT(subcarrierIndex+nFFTSize/2+1) = ipMod(ii,:)
inputiFFT = fftshift(inputiFFT);
outputiFFT = ifft(inputiFFT,nFFTSize);
% adding cyclic prefix of 16 samples
outputiFFT_with_CP1 = [outputiFFT(49:64) outputiFFT];
tx2=[tx2 outputiFFT_with_CP1];
end
figure,
fsMHz = 1;
[Pxx1,W] = pwelch(tx1 ,[],[],512,1);
[Pxx2,W] = pwelch(tx2 ,[],[],512,1);
pxx=[fftshift(Pxx1);fftshift(Pxx2)];
% plot([-2048:2047]*fsMHz/4096,10*log10(pxx));
figure(1);
plot(10*log10(pxx));
xlabel('frequency, MHz')
ylabel('power spectral density');
% % % channel models
for i=1:5
ch(i) = exp(-i/5);
end
for j=1:5
ch_norm(j) = ch(j)/norm(ch);
ch_norm(j) = ch_norm(j)*(randn(1)-i*randn(1))
end
%%% fade variable
N=10000;%Number of correlated Rayleigh samples to be generated
fd=100;%doppler frequency
fs=10000;%sampling frequency
fm=fd/fs;%normalized doppler frequency
km=floor(fm*N);%A point nerear to doppler frequency
%filter F_M(k) to shape gaussian random process
F_M(1) = 0;
for k=2:km
F_M(k)= sqrt(1/(2*(sqrt(1-((k-1)/(N*fm)).^2))));
end
F_M(km+1)= sqrt((km/2)*((pi/2) - atan((km-1)/(sqrt((2*km)-1)))));
for k=km+2:N-km
F_M(k)=0;
end
F_M(N-km+1)=sqrt((km/2)*((pi/2) - atan((km-1)/(sqrt((2*km)-1)))));
for k= N-km+2:N
F_M(k)= sqrt(1/(2*(sqrt(1-((N-k+1)/(N*fm)).^2))));
end
for k=1:100
F_M(k)=F_M(k)*(randn(1)-i*randn(1));
end
f_m=ifft(F_M,N);
abs_f_m=abs(f_m);
% f_m_db=20*log(abs_f_m);
figure(1)
hist(abs_f_m,100);
figure(2);
% hist(real(f_m),100);
figure(3)
% plot(1:10000,f_m_db);
%%% fading channel=time invariant channel*fade variable
for j=1:5
for k=1:N
r_channel(k,j)=real(ch_norm(j))*real(f_m(k));
i_channel(k,j)=imag(ch_norm(j))*imag(f_m(k));
end
end
fade_channel=r_channel+i*i_channel;
figure(4)
plot(1:10000,fade_channel);
y=abs(r_channel).^2
z=abs(i_channel).^2
mag=sqrt(y+z);
var=mean(mean(mag));
sigma=sqrt(var);
v=sigma*(randn(1)+i*randn(1));
for j=1:49
sigma=sqrt(var);
for k=1:68
v(j,k)=sigma*(randn(1)+i*randn(1));
end
% y1(j,1:68)=cconv(fade_channel(j,1:5),outputiFFT_wi th_CP(j,1:68))+v(j,1:68);
% y2(j,1:68)=cconv(fade_channel(j,1:5),outputiFFT_wi th_CP1(j,1:68))+v(j,1:68);
y1(j,1:68)=cconv(fade_channel(1,1:5),outputiFFT_wi th_CP(j,1:68));
y2(j,1:68)=cconv(fade_channel(1,1:5),outputiFFT_wi th_CP1(j,1:68));
% y1(j,k)=cconv(outputiFFT_with_CP(j,k),v(j,k));
% y2(j,k)=cconv(outputiFFT_with_CP1(j,k),v(j,k));
end
fsMHz = 1;
[Pxx1,W] = pwelch(y1 ,[],[],512,1);
[Pxx2,W] = pwelch(y2 ,[],[],512,1);
pxx=[fftshift(Pxx1);fftshift(Pxx2)];
% plot([-2048:2047]*fsMHz/4096,10*log10(pxx));
figure;
plot(10*log10(pxx));
xlabel('frequency, MHz')
ylabel('power spectral density');
title('noise added signal');
% TX=[tx1;tx2];
% plot(y1);
%% channel estimation in receiver
% for snr=1:5:40
% for j=1:
% % var=10^(-snr/10);
%
% sigma=sqrt(var);
% for k=1:80
% v(j,k)=sigma*(randn(1)+i*randn(1));
% end
% y(j,1:80)=cconv(fade_channel(j,1:5),tx2(j,1:80),80 )+v(j,1:80);
% end
% end
% plot(y)
Last edited by a moderator: