This project is based on generation of OFDM using Convolutional coding. Modulation technique used on this method is 16-QAM Modulation. Output of this project is shown above also SNR is calculated.
% OFDM Code
% No.of Carriers: 64
% coding used: Convolutional coding
% Single frame size: 96 bits
% Total no. of Frames: 100
% Modulation: 16-QAM
% No. of Pilots: 4
% Cylic Extension: 25%(16)
close all
clear all
clc
%%
% Generating and coding data
t_data=randint(9600,1)';
x=1;
si=1; %for BER rows
%%
for d=1:100
data=t_data(x:x+95);
x=x+96;
k=3;
n=6;
s1=size(data,2); % Size of input matrix
j=s1/k;
%%
% Convolutionally encoding data
constlen=7;
codegen = [171 133]; % Polynomial
trellis = poly2trellis(constlen, codegen);
codedata = convenc(data, trellis);
%%
%%BCH encoding of Data
h=fec.bchenc(7,4);
codedata1 = encode(h,data');
codedata1=codedata';
%%
%Interleaving coded data
s2=length(codedata);
j=s2/4;
matrix=reshape(codedata,j,4);
intlvddata = matintrlv(matrix',2,2)'; % Interleave.
intlvddata=intlvddata';
matrix1=reshape(codedata1,length(codedata1)/4,4);
intlvddata1 = matintrlv(matrix1',2,2)';
intlvddata1=intlvddata1';
%%
% Binary to decimal conversion
dec=bi2de(intlvddata','left-msb');
dec1=bi2de(intlvddata1','left-msb');
%%
%16-QAM Modulation
M=16;
y = qammod(dec,M);
y1 =qammod(dec1,M);
%%
% Pilot insertion
lendata=length(y);
lendata1=length(y1);
pilt=3+3j;
nofpits=4;
k=1;
for i=(1:13:52)
pilt_data1(i)=pilt;
for j=(i+1:i+12)
pilt_data1(j)=y(k);
pilt_data2(j)=y1(k);
k=k+1;
end
end
pilt_data1=pilt_data1';% size of pilt_data =52
pilt_data2=pilt_data2';
pilt_data(1:52)=pilt_data1(1:52); % upsizing to 64
pilt_data3(1:52)=pilt_data2(1:52);
pilt_data(13:64)=pilt_data1(1:52); % upsizing to 64
pilt_data3(13:64)=pilt_data2(1:52);
for i=1:52
pilt_data(i+6)=pilt_data1(i);
pilt_data3(i+6)=pilt_data2(i);
end
%%
% IFFT
ifft_sig=ifft(pilt_data',64);
ifft_sig1=ifft(pilt_data3',64);
%%
% Adding Cyclic Extension
cext_data=zeros(80,1);
cext_data(1:16)=ifft_sig(49:64);
cext_data1(1:16)=ifft_sig1(49:64);
for i=1:64
cext_data(i+16)=ifft_sig(i);
cext_data1(i+16)=ifft_sig1(i);
end
%%
% Channel
% SNR
o=1;
for snr=0:2:50
ofdm_sig=awgn(cext_data,snr,'measured'); % Adding white Gaussian Noise
ofdm_sig1=awgn(cext_data1,snr,'measured');
%%
% RECEIVER
%%
%Removing Cyclic Extension
for i=1:64
rxed_sig(i)=ofdm_sig(i+16);
rxed_sig1(i)=ofdm_sig1(i+16);
end
%%
% FFT
ff_sig=fft(rxed_sig,64);
ff_sig1=fft(rxed_sig1,64);
%%
% Pilot Synch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:52
synched_sig1(i)=ff_sig(i+6);
synched_sig2(i)=ff_sig1(i+6);
end
k=1;
for i=(1:13:52)
for j=(i+1:i+12);
synched_sig(k)=synched_sig1(j);
synched_sig3(k)=synched_sig2(j);
k=k+1;
end
end
%%
% Demodulation
dem_data= qamdemod(synched_sig,16);
dem_data1=qamdemod(synched_sig3,16);
%%
% Decimal to binary conversion
bin=de2bi(dem_data','left-msb');
bin=bin';
bin1=de2bi(dem_data','left-msb');
bin1=bin1';
%%
% De-Interleaving
deintlvddata = matdeintrlv(bin,2,2); % De-Interleave
deintlvddata=deintlvddata';
deintlvddata=deintlvddata(:)';
deintlvddata1 = matdeintrlv(bin1,2,2);
deintlvddata1 = deintlvddata1';
deintlvddata1=deintlvddata1(:)';
%%
%Decoding data
n=6;
k=3;
decodedata =vitdec(deintlvddata,trellis,5,'trunc','hard'); % decoding datausing veterbi decoder
rxed_data=decodedata;
%%
%Decoding of bch data
h1= fec.bchdec(h);
decodedata1 = decode(h1,deintlvddata1(1:189)');
decodedata1 = decodedata1';
rxed_data1=decodedata1;
%%
% Calculating BER
rxed_data=rxed_data(:)';
errors=0;
rxed_data1=rxed_data1(:)';
errors1=0;
c=xor(data,rxed_data);
c1=xor(data,rxed_data1(1:length(data)));
errors=nnz(c);
errors1=nnz(c);
BER(si,o)=errors/length(data);
BER1(si,o)=errors1/length(data);
papr(o)= max(abs(ofdm_sig).^2)/mean(abs(ofdm_sig).^2);
papr1(o)= max(abs(ofdm_sig1).^2)/mean(abs(ofdm_sig1).^2);
o=o+1;
end % SNR loop ends here
si=si+1;
end % main data loop
%%
% Time averaging for optimum results
for col=1:25; %%%change if SNR loop Changed
ber(1,col)=0;
for row=1:100;
ber(1,col)=ber(1,col)+BER(row,col);
end
end
ber=ber./100;
for col=1:25; %%%change if SNR loop Changed
ber1(1,col)=0;
for row=1:100;
ber1(1,col)=ber1(1,col)+BER1(row,col);
end
end
ber1=ber1./100;
%%
figure(1);
index=1:80;
pause(2)
plot(index,cext_data,'b',index,ofdm_sig,'r'); %plot both signals
legend('Original Signal to be Transmitted','Signal with AWGN');
title('In the Channel trilles encoded')
pause(2)
figure(2)
plot(index,cext_data1,'b',index,ofdm_sig1,'r'); %plot both signals
legend('Original Signal to be Transmitted','Signal with AWGN');
title('In the Channel BCH encoded')
pause(2)
figure(3)
i=0:2:48;
semilogy(i,ber);
title('BER vs SNR of trilles encoded signal');
ylabel('BER');
xlabel('SNR (dB)');
grid on
figure(4)
i=0:2:48;
semilogy(i,ber1);
title('BER vs SNR of bch encoded signal');
ylabel('BER');
xlabel('SNR (dB)');
grid on
% No.of Carriers: 64
% coding used: Convolutional coding
% Single frame size: 96 bits
% Total no. of Frames: 100
% Modulation: 16-QAM
% No. of Pilots: 4
% Cylic Extension: 25%(16)
close all
clear all
clc
%%
% Generating and coding data
t_data=randint(9600,1)';
x=1;
si=1; %for BER rows
%%
for d=1:100
data=t_data(x:x+95);
x=x+96;
k=3;
n=6;
s1=size(data,2); % Size of input matrix
j=s1/k;
%%
% Convolutionally encoding data
constlen=7;
codegen = [171 133]; % Polynomial
trellis = poly2trellis(constlen, codegen);
codedata = convenc(data, trellis);
%%
%%BCH encoding of Data
h=fec.bchenc(7,4);
codedata1 = encode(h,data');
codedata1=codedata';
%%
%Interleaving coded data
s2=length(codedata);
j=s2/4;
matrix=reshape(codedata,j,4);
intlvddata = matintrlv(matrix',2,2)'; % Interleave.
intlvddata=intlvddata';
matrix1=reshape(codedata1,length(codedata1)/4,4);
intlvddata1 = matintrlv(matrix1',2,2)';
intlvddata1=intlvddata1';
%%
% Binary to decimal conversion
dec=bi2de(intlvddata','left-msb');
dec1=bi2de(intlvddata1','left-msb');
%%
%16-QAM Modulation
M=16;
y = qammod(dec,M);
y1 =qammod(dec1,M);
%%
% Pilot insertion
lendata=length(y);
lendata1=length(y1);
pilt=3+3j;
nofpits=4;
k=1;
for i=(1:13:52)
pilt_data1(i)=pilt;
for j=(i+1:i+12)
pilt_data1(j)=y(k);
pilt_data2(j)=y1(k);
k=k+1;
end
end
pilt_data1=pilt_data1';% size of pilt_data =52
pilt_data2=pilt_data2';
pilt_data(1:52)=pilt_data1(1:52); % upsizing to 64
pilt_data3(1:52)=pilt_data2(1:52);
pilt_data(13:64)=pilt_data1(1:52); % upsizing to 64
pilt_data3(13:64)=pilt_data2(1:52);
for i=1:52
pilt_data(i+6)=pilt_data1(i);
pilt_data3(i+6)=pilt_data2(i);
end
%%
% IFFT
ifft_sig=ifft(pilt_data',64);
ifft_sig1=ifft(pilt_data3',64);
%%
% Adding Cyclic Extension
cext_data=zeros(80,1);
cext_data(1:16)=ifft_sig(49:64);
cext_data1(1:16)=ifft_sig1(49:64);
for i=1:64
cext_data(i+16)=ifft_sig(i);
cext_data1(i+16)=ifft_sig1(i);
end
%%
% Channel
% SNR
o=1;
for snr=0:2:50
ofdm_sig=awgn(cext_data,snr,'measured'); % Adding white Gaussian Noise
ofdm_sig1=awgn(cext_data1,snr,'measured');
%%
% RECEIVER
%%
%Removing Cyclic Extension
for i=1:64
rxed_sig(i)=ofdm_sig(i+16);
rxed_sig1(i)=ofdm_sig1(i+16);
end
%%
% FFT
ff_sig=fft(rxed_sig,64);
ff_sig1=fft(rxed_sig1,64);
%%
% Pilot Synch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:52
synched_sig1(i)=ff_sig(i+6);
synched_sig2(i)=ff_sig1(i+6);
end
k=1;
for i=(1:13:52)
for j=(i+1:i+12);
synched_sig(k)=synched_sig1(j);
synched_sig3(k)=synched_sig2(j);
k=k+1;
end
end
%%
% Demodulation
dem_data= qamdemod(synched_sig,16);
dem_data1=qamdemod(synched_sig3,16);
%%
% Decimal to binary conversion
bin=de2bi(dem_data','left-msb');
bin=bin';
bin1=de2bi(dem_data','left-msb');
bin1=bin1';
%%
% De-Interleaving
deintlvddata = matdeintrlv(bin,2,2); % De-Interleave
deintlvddata=deintlvddata';
deintlvddata=deintlvddata(:)';
deintlvddata1 = matdeintrlv(bin1,2,2);
deintlvddata1 = deintlvddata1';
deintlvddata1=deintlvddata1(:)';
%%
%Decoding data
n=6;
k=3;
decodedata =vitdec(deintlvddata,trellis,5,'trunc','hard'); % decoding datausing veterbi decoder
rxed_data=decodedata;
%%
%Decoding of bch data
h1= fec.bchdec(h);
decodedata1 = decode(h1,deintlvddata1(1:189)');
decodedata1 = decodedata1';
rxed_data1=decodedata1;
%%
% Calculating BER
rxed_data=rxed_data(:)';
errors=0;
rxed_data1=rxed_data1(:)';
errors1=0;
c=xor(data,rxed_data);
c1=xor(data,rxed_data1(1:length(data)));
errors=nnz(c);
errors1=nnz(c);
BER(si,o)=errors/length(data);
BER1(si,o)=errors1/length(data);
papr(o)= max(abs(ofdm_sig).^2)/mean(abs(ofdm_sig).^2);
papr1(o)= max(abs(ofdm_sig1).^2)/mean(abs(ofdm_sig1).^2);
o=o+1;
end % SNR loop ends here
si=si+1;
end % main data loop
%%
% Time averaging for optimum results
for col=1:25; %%%change if SNR loop Changed
ber(1,col)=0;
for row=1:100;
ber(1,col)=ber(1,col)+BER(row,col);
end
end
ber=ber./100;
for col=1:25; %%%change if SNR loop Changed
ber1(1,col)=0;
for row=1:100;
ber1(1,col)=ber1(1,col)+BER1(row,col);
end
end
ber1=ber1./100;
%%
figure(1);
index=1:80;
pause(2)
plot(index,cext_data,'b',index,ofdm_sig,'r'); %plot both signals
legend('Original Signal to be Transmitted','Signal with AWGN');
title('In the Channel trilles encoded')
pause(2)
figure(2)
plot(index,cext_data1,'b',index,ofdm_sig1,'r'); %plot both signals
legend('Original Signal to be Transmitted','Signal with AWGN');
title('In the Channel BCH encoded')
pause(2)
figure(3)
i=0:2:48;
semilogy(i,ber);
title('BER vs SNR of trilles encoded signal');
ylabel('BER');
xlabel('SNR (dB)');
grid on
figure(4)
i=0:2:48;
semilogy(i,ber1);
title('BER vs SNR of bch encoded signal');
ylabel('BER');
xlabel('SNR (dB)');
grid on
Contact:
Mr. Roshan P. Helonde
Mobile: +91-7276355704
WhatsApp: +91-7276355704
Email: roshanphelonde@rediffmail.com