Sunteți pe pagina 1din 2

% 8-QAM Using MATLAB R2017a

% Final Exam By Domingo F. Pana Jr.

clc;
clear all;
close all;

%Reading the input image


Input_Image = imread('PANA.JPG');

%Separating the Red, Green, and Blue Channels


Red = Input_Image(:,:,1);
Green = Input_Image(:,:,2);
Blue = Input_Image(:,:,3);

%Converting the RGB Channels to Binary data


N = size(Input_Image,1)*size(Input_Image,2);

rshp_Red = reshape(Red,N,1);
rshp_Green = reshape(Green,N,1);
rshp_Blue = reshape(Blue,N,1);

bin_Red = de2bi(rshp_Red,'left-msb');
bin_Green = de2bi(rshp_Green,'left-msb');
bin_Blue = de2bi(rshp_Blue,'left-msb');

Input_Red = reshape(bin_Red',size(bin_Red,1)*size(bin_Red,2),1);
Input_Green = reshape(bin_Green',size(bin_Green,1)*size(bin_Green,2),1);
Input_Blue = reshape(bin_Blue',size(bin_Blue,1)*size(bin_Blue,2),1);

len=length(Input_Red);

% Modulation of the RGB Channels using 'qammod' function and Gray coding
Input_Red = double(Input_Red);
Input_Green = double(Input_Green);
Input_Blue = double(Input_Blue);

modR = qammod(Input_Red,8,'Gray','InputType','bit');
modG = qammod(Input_Green,8,'Gray','InputType','bit');
modB = qammod(Input_Blue,8,'Gray','InputType','bit');

modR1 = ifft(modR);
modG1 = ifft(modG);
modB1 = ifft(modB);

% Adding White Gaussian Noise to the RGB Channels


for (SNR=-3:20)% SNR in dB
modnoiseR = awgn(modR1,SNR,'measured');
modnoiseG = awgn(modG1,SNR,'measured');
modnoiseB = awgn(modB1,SNR,'measured');

% Receiving and Demodulation of the RGB Channels using 'qamdemod' function


and Gray coding
receivedR = fft(modnoiseR);
receivedG = fft(modnoiseG);
receivedB = fft(modnoiseB);

demodR = qamdemod(receivedR,8,'Gray','OutputType','bit');
demodG = qamdemod(receivedG,8,'Gray','OutputType','bit');
demodB = qamdemod(receivedB,8,'Gray','OutputType','bit');

demod8bitR = uint8(demodR);
demod8bitG = uint8(demodG);
demod8bitB = uint8(demodB);

demod8bitR = demod8bitR(1:len);
demod8bitG = demod8bitG(1:len);
demod8bitB = demod8bitB(1:len);

Output_ReshapeR = reshape(demod8bitR,8,N)';
Output_ReshapeG = reshape(demod8bitG,8,N)';
Output_ReshapeB = reshape(demod8bitB,8,N)';

%Converting the demodulated binary data to decimal


binout_Red = bi2de(Output_ReshapeR,'left-msb');
binout_Green = bi2de(Output_ReshapeG,'left-msb');
binout_Blue = bi2de(Output_ReshapeB,'left-msb');

%Output Image Data of the RGB Channels


OutputR = reshape(binout_Red(1:N),size(Input_Image,1),size(Input_Image,2));
OutputG = reshape(binout_Green(1:N),size(Input_Image,1),size(Input_Image,2));
OutputB = reshape(binout_Blue(1:N),size(Input_Image,1),size(Input_Image,2));

%Combining the RGB Channels into a single image


ImgRGB = cat(3,OutputR,OutputG,OutputB);
figure;
imshow(ImgRGB);
title('8QAM Received Image');

% Bit Error and Error Rate Counter Per SNR


Bit_Error_Rate = biterr(Input_Red,demodR)/len
ErrorCount=zeros(1,length(Input_Red));
for i=1:length(Input_Red)
if(Input_Red(i)==demodR(i))
ErrorCount(i)=0;
else
ErrorCount(i)=1;
end
end
Error_Count = sum(ErrorCount)
end

S-ar putea să vă placă și