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

9 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!