OFDM, The input CODE does not have the same format as the output of ENCODE

10 views (last 30 days)
Can someone please help me with this code. It implements OFDM and hamming code is used as the error correction scheme. % No.of Carriers: 64 % coding used: hamming 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=4;
n=7;
s1=size(data,2); % Size of input matrix
j=s1/k;
codedata= encode(data,n,k,'hamming/binary');
%Interleaving coded data
s2=size(codedata,2);
j=s2/4;
matrix=reshape(codedata,j,4);
intlvddata = matintrlv(matrix',2,2)'; % Interleave.
intlvddata=intlvddata';
Binary to decimal conversion
dec=bi2de(intlvddata','left-msb');
%16-QAM Modulation
M=16;
y = qammod(dec,M);
% scatterplot(y);
Pilot insertion
lendata=length(y);
pilt=3+3j;
nofpits=3;
k=1;
for i=(1:15:45)
pilt_data1(i)=pilt;
for j=(i+1:i+14);
pilt_data1(j)=y(k);
k=k+1;
end
end
pilt_data1=pilt_data1'; % size of pilt_data =52
pilt_data(1:45)=pilt_data1(1:45); % upsizing to 64
pilt_data(20:64)=pilt_data1(1:45); % upsizing to 64
for i=1:45
pilt_data(i+6)=pilt_data1(i);
end
IFFT
ifft_sig=ifft(pilt_data',64);
Adding Cyclic Extension
cext_data=zeros(80,1);
cext_data(1:16)=ifft_sig(49:64);
for i=1:64
cext_data(i+16)=ifft_sig(i);
end
Channel
% SNR
o=1;
for snr=0:2:50
ofdm_sig=awgn(cext_data,snr,'measured'); % Adding white Gaussian Noise
if(d==1)
if(snr==10)
figure;
index=1:80;
plot(index,cext_data,'b',index,ofdm_sig,'r'); %plot both signals
legend('Original Signal to be Transmitted','Signal with AWGN');
end
end
%Removing Cyclic Extension
for i=1:64
rxed_sig(i)=ofdm_sig(i+16);
end
FFT
ff_sig=fft(rxed_sig,64);
Pilot Synch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:52
synched_sig1(i)=ff_sig(i+6);
end
k=1;
for i=(1:13:52)
for j=(i+1:i+12);
synched_sig(k)=synched_sig1(j);
k=k+1;
end
end
% scatterplot(synched_sig)
Demodulation
dem_data= qamdemod(synched_sig,16);
Decimal to binary conversion
bin=de2bi(dem_data','left-msb');
bin=bin';
De-Interleaving
deintlvddata = matdeintrlv(bin,2,2); % De-Interleave
deintlvddata=deintlvddata';
deintlvddata=deintlvddata(:)';
%Decoding data
n=7;
k=4;
decodedata= decode(deintlvddata,n,k,'hamming/binary'); % decoding datausing veterbi decoder
rxed_data=decodedata;
Calculating BER
rxed_data=rxed_data(:)';
errors=0;
% rxed_data=rxed_data(1:96);
c=xor(data,rxed_data);
errors=nnz(c);
% for i=1:length(data)
%
%
% if rxed_data(i)~=data(i);
% errors=errors+1;
%
% end
% end
BER(si,o)=errors/length(data);
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;
figure
i=0:2:48;
semilogy(i,ber,'--or','linewidth',2);
title('BER vs SNR');
ylabel('BER');
xlabel('SNR (dB)');
legend('BER vs SNR');
grid on
The error shown is Warning: The input CODE does not have the same format as the output of ENCODE. Check your computation procedures for possible errors. > In decode at 125 In Untitled at 190 ??? Error using ==> xor Matrix dimensions must agree.
Error in ==> Untitled at 199 c=xor(data,rxed_data

Answers (1)

saladi neeraj
saladi neeraj on 25 Aug 2022
clc;
clear all;
close all;
%Generating and coding data
%t_data=randi(9600,1)';
t_data=randi([0 1],9600,1)'
x=1;
si=1;
%for BER rows
for d=1:100
data=t_data(x:x+95);
x=x+96;
k=4;
n=7;
s1=size(data,2); % Size of input matrix
j=s1/k;
codedata= encode(data,n,k,'hamming/binary');
%Interleaving coded data
s2=size(codedata,2);
j=s2/4;
matrix=reshape(codedata,j,4);
intlvddata = matintrlv(matrix',2,2)'; % Interleave.
intlvddata=intlvddata';
%Binary to decimal conversion
dec=bi2de(intlvddata','left-msb');
%16-QAM Modulation
M=16;
y = qammod(dec,M);
% scatterplot(y);
%Pilot insertion
lendata=length(y);
pilt=3+3j;
nofpits=3;
k=1;
for i=(1:15:45)
pilt_data1(i)=pilt;
for j=(i+1:i+14);
pilt_data1(j)=y(k);
k=k+1;
end
end
pilt_data1=pilt_data1'; % size of pilt_data =52
pilt_data(1:45)=pilt_data1(1:45); % upsizing to 64
pilt_data(20:64)=pilt_data1(1:45); % upsizing to 64
for i=1:45
pilt_data(i+6)=pilt_data1(i);
end
%IFFT
ifft_sig=ifft(pilt_data',64);
%Adding Cyclic Extension
cext_data=zeros(80,1);
cext_data(1:16)=ifft_sig(49:64);
for i=1:64
cext_data(i+16)=ifft_sig(i);
end
%Channel
% SNR
o=1;
for snr=0:2:50
ofdm_sig=awgn(cext_data,snr,'measured'); % Adding white Gaussian Noise
if(d==1)
if(snr==10)
figure;
index=1:80;
plot(index,cext_data,'b',index,ofdm_sig,'r'); %plot both signals
legend('Original Signal to be Transmitted','Signal with AWGN');
end
end
%Removing Cyclic Extension
for i=1:64
rxed_sig(i)=ofdm_sig(i+16);
end
%FFT
ff_sig=fft(rxed_sig,64);
%%%Pilot Synch%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:52
synched_sig1(i)=ff_sig(i+6);
end
k=1;
for i=(1:13:52)
for j=(i+1:i+12);
synched_sig(k)=synched_sig1(j);
k=k+1;
end
end
% scatterplot(synched_sig)
%Demodulation
dem_data= qamdemod(synched_sig,16);
% Decimal to binary conversion
bin=de2bi(dem_data','left-msb');
bin=bin';
% De-Interleaving
deintlvddata = matdeintrlv(bin,2,2); % De-Interleave
deintlvddata=deintlvddata';
deintlvddata=deintlvddata(:)';
%Decoding data
n=7;
k=4;
decodedata= decode(deintlvddata,n,k,'hamming/binary'); % decoding datausing veterbi decoder
rxed_data=decodedata;
% Calculating BER
rxed_data=rxed_data(:)';
errors=0;
rxed_data=rxed_data(1:96);
c=xor(data,rxed_data);
errors=nnz(c);
for i=1:length(data)
if rxed_data(i)~=data(i);
errors=errors+1;
end
end
BER(si,o)=errors/length(data);
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;
figure
i=0:2:48;
semilogy(i,ber,'--or','linewidth',2);
title('BER vs SNR');
ylabel('BER');
xlabel('SNR (dB)');
legend('BER vs SNR');
grid on

Community Treasure Hunt

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

Start Hunting!