%naivecode.m: Try a naive encoding scheme mesLen=1000; %message length bits=(sign(rand(1,mesLen)-.5)+1)/2; %binary message to send %index into constl = 1+ bits(i) + 2*bits(i+1) constl=[-3 1 -1 3]; k=1; pam4mes=zeros(1,length(bits)/2); for i=1:2:length(bits) pam4mes(k)=constl(1+bits(i)+2*bits(i+1)); %switch to a PAM4 constellation k=k+1; end v=.5; %noise variance %pass the signal through a noisy channel noisyPam=sqrt(v)*randn(1,length(pam4mes))+pam4mes; %quantize the received signal recSig=quantalph(noisyPam,[-3,-1,1,3]); k=1; recBits=zeros(1,2*length(recSig)); %decode the signal using the naive code for i=1:length(recSig) if recSig(i)==3 recBits(k)=1; recBits(k+1)=1; elseif recSig(i)==1 recBits(k)=1; recBits(k+1)=0; elseif recSig(i)==-1 recBits(k)=0; recBits(k+1)=1; elseif recSig(i)==-3 recBits(k)=0; recBits(k+1)=0; end k=k+2; end %calculate the percentage error percErrs=sum((recBits~=bits))/length(recBits)