www.gusucode.com > matlab编程QAM的调制解调完整仿真程序源码 > matlab编程QAM的调制解调完整仿真程序源码/M_QAM.m

    % =============================================%
% Programed by Rustam Efendi, STTTelkom Bandung.
% efendi_rustam@yahoo.com
% Open for correction or any comments.
% =============================================%

function varargout = M_QAM(varargin)
global SNR_max jml_itr BR kanal rolloff M snr orde Alpha t Bit Split_Od ...
    Split_Ev Lsymbol_Od Lsymbol_Ev ttt LshapedI LshapedQ  Yinphase Yquadrat ...
    Yqam Yqamrx DemodI DemodQ LdetI LdetQ recLsymbolI recLsymbolQ ...
    rxdibitI rxtribitI rxfourbitI rxdibitQ rxtribitQ rxfourbitQ ...
    quadratosc inphaseosc recbit RayL rrcfilter fad1 nsamp Yqamj Yqamrxj ...
    LcompI LcompQ Lsymbolods Lsymbolevs bit_frame bit_frame_split bagi_waktu ...
    Bit_Masukan fs Lsymbolod Lsymbolev QQQ III rolloff

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @M_QAM_OpeningFcn, ...
                   'gui_OutputFcn',  @M_QAM_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before M_QAM is made visible.
function M_QAM_OpeningFcn(hObject, eventdata, handles, varargin)
bg=imread('M_QAM.bmp');
axes(handles.axes1);
imshow(bg);

handles.output = hObject;
guidata(hObject, handles);


% --- Outputs from this function are returned to the command line.
function varargout = M_QAM_OutputFcn(hObject, eventdata, handles) 
% Get default command line output from handles structure
varargout{1} = handles.output;
atas(gcf)
clear all;


% --- popupmenu ---
function popupmenu1_Callback(hObject, eventdata, handles)
function popupmenu1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function popupmenu2_Callback(hObject, eventdata, handles)
function popupmenu2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function popupmenu3_Callback(hObject, eventdata, handles)
function popupmenu3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function popupmenu4_Callback(hObject, eventdata, handles)
function popupmenu4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function popupmenu5_Callback(hObject, eventdata, handles)
function popupmenu5_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function popupmenu6_Callback(hObject, eventdata, handles)
function popupmenu6_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% --- edit ---
function edit1_Callback(hObject, eventdata, handles)
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit3_Callback(hObject, eventdata, handles)
function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function edit4_Callback(hObject, eventdata, handles)
function edit4_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- pushbutton ---
function pushbutton1_Callback(hObject, eventdata, handles) % info
global t Bit bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
stairs(t,Bit), grid on; axis([0 bit_frame -0.1 1.1]); 
title('Input Bit'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2)
fs = length(Bit) - 1;
f_dom = fft(Bit);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Input Bit');xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end


function pushbutton2_Callback(hObject, eventdata, handles) % info I
global t Split_Od bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
stairs(t,Split_Od), grid on,axis([0 bit_frame -0.1 1.1]); 
title('Inphase Bit (Splitter Out)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Split_Od) - 1;
f_dom = fft(Split_Od);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Inphase Bit (Splitter Out)');xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton3_Callback(hObject, eventdata, handles) % info Q
global t Split_Ev bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1)
stairs(t,Split_Ev), grid on,axis([0 bit_frame -0.1 1.1]); 
title('Quadrature Bit (Splitter Out)'); xlabel('Time)'); ylabel('Amplitude (V)')
figure('Position',pos2)
fs = length(Split_Ev) - 1;
f_dom = fft(Split_Ev);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Quadrature Bit (Splitter Out)');xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton4_Callback(hObject, eventdata, handles) % l conv I
global t Lsymbol_Od orde bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
if orde == 1
    X = 4;
elseif orde == 2
    X = 8;
elseif orde == 3
    X = 16;
end
figure('Position',pos1) 
stairs(t,Lsymbol_Od), grid on,axis([0 bit_frame -X X]); 
title('Multilevel Inphase Signal'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Lsymbol_Od) - 1;
f_dom = fft(Lsymbol_Od);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Multilevel Inphase Signal'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton5_Callback(hObject, eventdata, handles) % l conv Q
global t Lsymbol_Ev orde bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
if orde == 1
    X = 4;
elseif orde == 2
    X = 8;
elseif orde == 3
    X = 16;
end
figure('Position',pos1) 
stairs(t,Lsymbol_Ev), grid on,axis([0 bit_frame -X X]); 
title('Multilevel Quadrature Signal'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Lsymbol_Ev) - 1;
f_dom = fft(Lsymbol_Ev);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Multilevel Quadrature Signal'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton6_Callback(hObject, eventdata, handles) % cos
global ttt inphaseosc bit_frame fs
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))./10)),inphaseosc(1:floor((length(ttt))./10))), grid on;
title('Carrier Signal of IF Quadrature Modulator'); xlabel('Time (s)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
f_dom = fft(inphaseosc);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Carrier Signal of IF Quadrature Modulator'); xlabel('Frequency (Hz)'); ylabel('Normalized Power (dBw)')
end;


function pushbutton7_Callback(hObject, eventdata, handles) % sin
global ttt quadratosc bit_frame fs
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))./10)),quadratosc(1:floor((length(ttt))./10))), grid on;
title('Carrier Signal of IF Inphase Modulator'); xlabel('Time (s)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
f_dom = fft(quadratosc);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Carrier Signal of IF Inphase Modulator'); xlabel('Frequency (Hz)'); ylabel('Normalized Power (dBw)')
end;


function pushbutton8_Callback(hObject, eventdata, handles) % fil I
global t ttt LshapedI orde bit_frame bagi_waktu Bit_Masukan
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
tt = ttt*Bit_Masukan;
figure('Position',pos1) 
plot(tt,LshapedI), grid on,axis([0 bit_frame min(LshapedI) max(LshapedI)]); %stairs
title('Multilevel Inphase Signal (Filter Out)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(LshapedI) - 1;
f_dom = fft(LshapedI);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Multilevel Inphase Signal (Filter Out)'); xlabel('Frequency');ylabel('Normalized Power (dBw)')
end;


function pushbutton9_Callback(hObject, eventdata, handles) % fil Q
global t ttt LshapedQ orde bit_frame bagi_waktu Bit_Masukan
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
tt = ttt*Bit_Masukan;
figure('Position',pos1) 
plot(tt,LshapedQ), grid on,axis([0 bit_frame min(LshapedQ) max(LshapedQ)]); %stairs
title('Multilevel Quadrature Signal (Filter Out)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(LshapedQ) - 1;
f_dom = fft(LshapedQ);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Multilevel Quadrature Signal (Filter Out)'); xlabel('Frequency');ylabel('Normalized Power (dBw)')
end;


function pushbutton10_Callback(hObject, eventdata, handles) % mix I
global ttt Yinphase bit_frame bagi_waktu
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))/bagi_waktu)),Yinphase(1:floor((length(ttt))/bagi_waktu))), grid on;
title('QAM Inphase Signal'); xlabel('Time (normalized)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Yinphase) - 1;
f_dom = fft(Yinphase);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('QAM Inphase Signal'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton11_Callback(hObject, eventdata, handles) % mix Q
global ttt Yquadrat bit_frame bagi_waktu
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))/bagi_waktu)),Yquadrat(1:floor((length(ttt))/bagi_waktu))), grid on;
title('QAM Quadrature Signal'); xlabel('Time (normalized)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Yquadrat) - 1;
f_dom = fft(Yquadrat);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('QAM Quadrature Signal'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton12_Callback(hObject, eventdata, handles) % adder
global ttt Yqam bit_frame bagi_waktu
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))/bagi_waktu)),Yqam(1:floor((length(ttt))/bagi_waktu))), grid on;
title('QAM Signal'); xlabel('Time (normalized)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Yqam) - 1;
f_dom = fft(Yqam);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('QAM Signal'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end;


function pushbutton13_Callback(hObject, eventdata, handles) % ray
global ttt kanal RayL bit_frame bagi_waktu
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
if kanal == 2
    [pos1 pos2]=posisi_grafik;
    figure('Position',pos1) 
    plot(ttt(1:floor((length(ttt))/bagi_waktu)),RayL(1:floor((length(ttt))/bagi_waktu))), grid on;
    title('QAM Signal at Rayleigh Channel'); xlabel('Time (normalized)'); ylabel('Amplitude (V)')
    figure('Position',pos2) 
    fs = length(RayL) - 1;
    f_dom = fft(RayL);
    f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
    ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
    plot(ty,f_dom); grid on;
    title('QAM Signal at Rayleigh Channel'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
else
    msgbox('No picture, because selected channel is AWGN.');
end
end;


function pushbutton14_Callback(hObject, eventdata, handles) % awgn
global ttt Yqamrx kanal bit_frame bagi_waktu
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
if kanal == 1
    [pos1 pos2]=posisi_grafik;
    figure('Position',pos1) 
    plot(ttt(1:floor((length(ttt))/bagi_waktu)),Yqamrx(1:floor((length(ttt))/bagi_waktu))), grid on;
    title('Sinyal QAM Keluaran Kanal AWGN'); xlabel('Time (ternormalisasi terhadap jumlah simbol)'); ylabel('Amplitude (V)')
    figure('Position',pos2) 
    fs = length(Yqamrx) - 1;
    f_dom = fft(Yqamrx);
    f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
    ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
    plot(ty,f_dom); grid on;
    title('Sinyal QAM Keluaran Kanal AWGN'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
else 
    [pos1 pos2]=posisi_grafik;
    figure('Position',pos1) 
    plot(ttt(1:floor((length(ttt))/bagi_waktu)),Yqamrx(1:floor((length(ttt))/bagi_waktu))), grid on;
    title('Sinyal QAM Keluaran Kanal Rayleigh + AWGN'); xlabel('Time (ternormalisasi terhadap jumlah simbol)'); ylabel('Amplitude (V)')
    figure('Position',pos2) 
    fs = length(Yqamrx) - 1;
    f_dom = fft(Yqamrx);
    f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
    ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
    plot(ty,f_dom); grid on;
    title('Sinyal QAM Keluaran Kanal Rayleigh + AWGN'); xlabel('Frequency'); ylabel('Normalized Power (dBw)')
end
end;


function pushbutton15_Callback(hObject, eventdata, handles) % sin
global ttt quadratosc bit_frame fs
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))./10)),quadratosc(1:floor((length(ttt))./10))), grid on;
title('Sinyal Carrier IF Inphase Demodulator'); xlabel('Time (s)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
f_dom = fft(quadratosc);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Sinyal Carrier IF Inphase Demodulator'); xlabel('Frequency (Hz)'); ylabel('Normalized Power (dBw)')
end;


function pushbutton16_Callback(hObject, eventdata, handles) % cos
global ttt inphaseosc bit_frame fs
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(ttt(1:floor((length(ttt))./10)),inphaseosc(1:floor((length(ttt))./10))), grid on;
title('Sinyal Carrier IF Quadrature Demodulator'); xlabel('Time (s)'); ylabel('Amplitude (V)')
figure('Position',pos2) 
f_dom = fft(inphaseosc);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Sinyal Carrier IF Quadrature Demodulator'); xlabel('Frequency (Hz)'); ylabel('Normalized Power (dBw)')
end;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


function pushbutton17_Callback(hObject, eventdata, handles) % mix I
global ttt DemodI orde bit_frame bagi_waktu Bit_Masukan
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
tt = ttt*Bit_Masukan;
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(tt,DemodI), grid on, axis([0 bit_frame min(DemodI) max(DemodI)]);
title('Inphase Signal (Mixing Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(DemodI) - 1;
f_dom = fft(DemodI);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Inphase Signal (Mixing Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton18_Callback(hObject, eventdata, handles) % mix Q
global ttt DemodQ orde bit_frame bagi_waktu Bit_Masukan
if isempty(ttt)==1
    msgbox('Push "Submit" !');
else
tt = ttt*Bit_Masukan;
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(tt,DemodQ), grid on, axis([0 bit_frame min(DemodQ) max(DemodQ)]);
title('Quadrature Signal (Mixing Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(DemodQ) - 1;
f_dom = fft(DemodQ);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Quadrature Signal (Mixing Output)'); xlabel('Frequency');ylabel('Frequency (dBw)')
end;


function pushbutton19_Callback(hObject, eventdata, handles) % fil I
global t ttt LdetI orde bit_frame bagi_waktu
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(t,LdetI), grid on, axis([0 bit_frame min(LdetI) max(LdetI)]);
title('Inphase Signal (Filter Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(LdetI) - 1;
f_dom = fft(LdetI);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Inphase Signal (Filter Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton20_Callback(hObject, eventdata, handles) % fil Q
global t ttt LdetQ orde bit_frame bagi_waktu
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
plot(t,LdetQ), grid on, axis([0 bit_frame min(LdetQ) max(LdetQ)]);
title('Quadrature Signal (Filter Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
figure('Position',pos2) 
fs = length(LdetQ) - 1;
f_dom = fft(LdetQ);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Quadrature Signal (Filter Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton21_Callback(hObject, eventdata, handles) % dec I
global t recLsymbolI orde bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
if orde == 1
    X = 4;
elseif orde == 2
    X = 8;
elseif orde == 3
    X = 16;
end
figure('Position',pos1) 
plot(t,recLsymbolI), grid on, axis([0 bit_frame -X X]);
title('Inphase Signal (Detector Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(recLsymbolI) - 1;
f_dom = fft(recLsymbolI);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Inphase Signal (Detector Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton22_Callback(hObject, eventdata, handles) % dec Q
global t recLsymbolQ orde bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
if orde == 1
    X = 4;
elseif orde == 2
    X = 8;
elseif orde == 3
    X = 16;
end
figure('Position',pos1) 
plot(t,recLsymbolQ), grid on, axis([0 bit_frame -X X]);
title('Quadrature Signal (Detector Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(recLsymbolQ) - 1;
f_dom = fft(recLsymbolQ);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Quadrature Signal (Detector Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton23_Callback(hObject, eventdata, handles) % l conv I
global t rxdibitI rxtribitI rxfourbitI orde bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
if orde == 1
    Y = rxdibitI;
elseif orde == 2
    Y = rxtribitI;
elseif orde == 3
    Y = rxfourbitI;
end
figure('Position',pos1) 
stairs(t,Y), grid on, axis([0 bit_frame -0.1 1.1]);
title('Inphase Signal (Level Converter Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(Y) - 1;
f_dom = fft(Y);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Inphase Signal (Level Converter Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton25_Callback(hObject, eventdata, handles) % l conv Q
global t rxdibitQ rxtribitQ rxfourbitQ orde bit_frame
if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
if orde == 1
    Z = rxdibitQ;
elseif orde == 2
    Z = rxtribitQ;
elseif orde == 3
    Z = rxfourbitQ;
end
figure('Position',pos1)
stairs(t,Z), grid on, axis([0 bit_frame -0.1 1.1]);
title('Quadrature Signal (Level Converter Output)'); xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2)
fs = length(Z) - 1;
f_dom = fft(Z);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Quadrature Signal (Level Converter Output)'); xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton26_Callback(hObject, eventdata, handles) % combiner
global t recbit bit_frame

if isempty(t)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
stairs(t,recbit), grid on, axis([0 bit_frame -0.1 1.1]); 
title('Data Out');xlabel('Time'); ylabel('Amplitude (V)')
figure('Position',pos2) 
fs = length(recbit) - 1;
f_dom = fft(recbit);
f_dom = 20*log10(abs((f_dom(1:length(f_dom)/2+1))./(max(abs(f_dom))) + 1e-30));
ty = [0:length(f_dom)-1]*fs/length(f_dom)/2;
plot(ty,f_dom); grid on;
title('Data Out');xlabel('Frequency'); ylabel('Frequency (dBw)')
end;


function pushbutton27_Callback(hObject, eventdata, handles) % restart
close all
M_QAM


function pushbutton28_Callback(hObject, eventdata, handles) % close
good_bye


function pushbutton29_Callback(hObject, eventdata, handles) % inputkan
global SNR_max jml_itr BR kanal rolloff M snr orde Alpha t Bit Split_Od ...
    Split_Ev Lsymbol_Od Lsymbol_Ev ttt LshapedI LshapedQ Yinphase Yquadrat ...
    Yqam Yqamrx DemodI DemodQ LdetI LdetQ recLsymbolI recLsymbolQ ...
    rxdibitI rxtribitI rxfourbitI rxdibitQ rxtribitQ rxfourbitQ ...
    quadratosc inphaseosc recbit RayL rrcfilter fad1 nsamp Yqamj Yqamrxj ...
    LcompI LcompQ Lsymbolods Lsymbolevs bit_frame bit_frame_split bagi_waktu ...
    Bit_Masukan fs  Lsymbolod Lsymbolev QQQ III rolloff

if get(handles.popupmenu1,'value')==1
elseif get(handles.popupmenu1,'value')==2
    BR = 1200;
elseif get(handles.popupmenu1,'value')==3
    BR = 9600;
elseif get(handles.popupmenu1,'value')==4
    BR = 19200;
end

if get(handles.popupmenu2,'value')==1
elseif get(handles.popupmenu2,'value')==2
    M = 16;
elseif get(handles.popupmenu2,'value')==3
    M = 64;
elseif get(handles.popupmenu2,'value')==4
    M = 256;
end

if get(handles.popupmenu3,'value')==1
elseif get(handles.popupmenu3,'value')==2
    rolloff = 0;
elseif get(handles.popupmenu3,'value')==3
    rolloff = 0.25;
elseif get(handles.popupmenu3,'value')==4
    rolloff = 0.5;
elseif get(handles.popupmenu3,'value')==5
    rolloff = 0.75;
elseif get(handles.popupmenu3,'value')==6
    rolloff = 1;
end

if get(handles.popupmenu4,'value')==1
elseif get(handles.popupmenu4,'value')==2
    kanal = 1;
elseif get(handles.popupmenu4,'value')==3
    kanal = 2;
end

if get(handles.popupmenu5,'value')==1
elseif get(handles.popupmenu5,'value')==2
    snr = 0;
elseif get(handles.popupmenu5,'value')==3
    snr = 5;
elseif get(handles.popupmenu5,'value')==4
    snr = 10;
elseif get(handles.popupmenu5,'value')==5
    snr = 15;
elseif get(handles.popupmenu5,'value')==6
    snr = 20;
elseif get(handles.popupmenu5,'value')==7
    snr = 25;
end


% =========================================================================
% =========================================================================
% =========================================================================
if  get(handles.popupmenu1,'value')==1 |...
    get(handles.popupmenu2,'value')==1 |...
    get(handles.popupmenu3,'value')==1 |...
    get(handles.popupmenu4,'value')==1 |...
    get(handles.popupmenu5,'value')==1
    msgbox('Unfilled Parameter !!!');
else

if BR == 1200
    bagi_waktu = 2;
elseif BR == 9600
    bagi_waktu = 4;
elseif BR == 19200
    bagi_waktu = 8;
end;

if     BR == 1200
    bit_frame = 25;
    bit_frame_split = 13 + 2;
elseif BR == 9600
    bit_frame = 195;
    bit_frame_split = 100 + 5;
elseif BR == 19200
    bit_frame = 385;
    bit_frame_split = 195 + 10;
end

if M == 16
    orde = 1;
elseif M == 64
    orde = 2;
elseif M == 256
    orde = 3;
end

Tb = 1/BR;     %perioda 1 bit
tau = 1.0e-6;
shift = round(tau/Tb);

Alpha = rolloff;
Bit_Masukan = BR*0.02;
Jumlah_Bit_Asli = Bit_Masukan;
if orde == 1
    Jumlah_Bit = floor(Jumlah_Bit_Asli/4)*4;
elseif orde == 2
    Jumlah_Bit = floor(Jumlah_Bit_Asli/6)*6;
elseif orde == 3
    Jumlah_Bit = floor(Jumlah_Bit_Asli/8)*8;
end

Bit_Asli            = randint(1,Jumlah_Bit);
tsampling   = 16;

% Mendapatkan A
for i = 1:tsampling
    A(i,:) = Bit_Asli;
end
A;
Bit      = reshape(A,1,length(Bit_Asli)*tsampling);

% Mendapatkan B
for i = 1:2*tsampling
    B(i,:) = Bit_Asli(1:2:length(Bit_Asli));
end
Split_Od = reshape(B,1,length(Bit_Asli)*tsampling);

% Mendapatkan C
for i = 1:2*tsampling
    C(i,:) = Bit_Asli(2:2:length(Bit_Asli));
end
Split_Ev = reshape(C,1,length(Bit_Asli)*tsampling);

t = linspace(0,length(Bit_Asli),length(Bit_Asli)*16);
splitod = Split_Od;
splitev = Split_Ev;
tbit = Jumlah_Bit;

%PARAMETERS
if orde == 1
	tdibit  = tbit/2;
	tsymbol = tbit/4;
elseif orde == 2
	ttribit = tbit/3;
	tsymbol = tbit/6;
elseif orde == 3
    tfourbit = tbit/4;
	tsymbol = tbit/8;
end

if orde == 1
	%DIBITS to 4 LEVEL SYMBOL CONVERTER
	%2-level dibit to 4-level symbol in Channel-I
	for i=1:2:tdibit
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1))
          Lsymbolod((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) = -3*ones(1,4*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0))
          Lsymbolod((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) = -1*ones(1,4*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0))
          Lsymbolod((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) =  1*ones(1,4*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1))
          Lsymbolod((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) =  3*ones(1,4*tsampling);
       end;
	end;
	clear i;
	%2-level dibit to 4-level symbol in Channel-Q
	for i=1:2:tdibit
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1))
          Lsymbolev((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) = -3*ones(1,4*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0))
          Lsymbolev((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) = -1*ones(1,4*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0))
          Lsymbolev((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) =  1*ones(1,4*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1))
          Lsymbolev((((i+1)/2)-1)*4*tsampling+1:((i+1)/2)*4*tsampling) =  3*ones(1,4*tsampling);
       end;
	end;
	clear i;
elseif orde == 2
	%TRIBITS to 8 LEVEL SYMBOL CONVERTER
	%2-level tribit to 8-level symbol in Channel-I
	for i=1:3:(tbit/2)
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -7*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -5*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -3*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -1*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  1*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0)) 
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  3*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  5*ones(1,6*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1))         
          Lsymbolod((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  7*ones(1,6*tsampling);
       end;
	end;
	clear i;
	%2-level tribit to 8-level symbol in Channel-Q
	for i=1:3:(tbit/2)
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -7*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0))       
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -5*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -3*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) = -1*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  1*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  3*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0))     
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  5*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  7*ones(1,6*tsampling);
       end;
	end;
	clear i;
elseif orde == 3
    %fourbitS to 4 LEVEL SYMBOL CONVERTER
	%2-level fourbit to 4-level symbol in Channel-I
	for i=1:4:(tbit/2)
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -15*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -13*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -11*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -9*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -7*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -5*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -3*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -1*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  1*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  3*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  5*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  7*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  9*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 11*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 13*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 15*ones(1,8*tsampling);
       end;
	end;
	clear i;
	%2-level fourbit to 4-level symbol in Channel-Q
	for i=1:4:(tbit/2)
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -15*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -13*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -11*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -9*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -7*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -5*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -3*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -1*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  1*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  3*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  5*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  7*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  9*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 11*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 13*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 15*ones(1,8*tsampling);
       end;
	end;
    clear i;
end
Lsymbol_Od = Lsymbolod;
Lsymbol_Ev = Lsymbolev;

% Proses Filtering ========================================================
Lsymbolods = Lsymbol_Od.';
y = Lsymbolods;
nsamp = 4;
rolloff = Alpha;
filtorder = 40; % Filter order
delay = filtorder/(nsamp*2); % Group delay (# of input samples)
rrcfilter = rcosine(1,nsamp,'fir/sqrt',rolloff,delay); % Create a square root raised cosine filter. 'fir/sqrt'
ytx = rcosflt(y,1,nsamp,'filter',rrcfilter); % Upsample and apply square root raised cosine filter.
LshapedI = ytx.';

Lsymbolevs = Lsymbol_Ev.';
y = Lsymbolevs;
nsamp = 4;
rolloff = Alpha;
filtorder = 40; % Filter order
delay = filtorder/(nsamp*2); % Group delay (# of input samples)
rrcfilter = rcosine(1,nsamp,'fir/sqrt',rolloff,delay); % Create a square root raised cosine filter.
ytx = rcosflt(y,1,nsamp,'filter',rrcfilter); % Upsample and apply square root raised cosine filter.
LshapedQ = ytx.';

%PEMBANGKITAN FREKUENSI CARRIER
fc      = 100;
fs      = length(LshapedI)-1;
ttt = [0:(length(LshapedI)-1)]'./(length(LshapedI)-1);
inphaseosc = cos(2*pi*fc*ttt);
quadratosc = sin(2*pi*fc*ttt);
%INPHASE MODULATION
Yinphase = LshapedI.*inphaseosc.';
%QUADRATURE MODULATION
Yquadrat = LshapedQ.*quadratosc.';

Yqamj = LshapedI + LshapedQ.*j;
Yqam = Yinphase + Yquadrat;

% ==== Kanal ==============================================================
[Yqamrxj RayLj fad1j] = kanale(Yqamj,snr,kanal,shift);
[Yqamrx RayL fad1] = kanale(Yqam,snr,kanal,shift);
% Yqamrx = Yqam;
% ==== End of kanal =======================================================

if     orde == 1
    A = 2;
elseif orde == 2
    A = 3;
elseif orde == 3
    A = 4;
end
for i=1:1:tsymbol
   LshapedIc(i) = LshapedI(A*tsampling*(2*i-1));
   LshapedQc(i) = LshapedQ(A*tsampling*(2*i-1));
end;
    
% ==== Demod ==============================================================
DemodI = sqrt(2)*Yqamrx.*inphaseosc.';
DemodQ = sqrt(2)*Yqamrx.*quadratosc.';

% Filter received signal using square root raised cosine filter.
ytxI = DemodI.';
yrxI = rcosflt(ytxI,1,nsamp,'Fs/filter',rrcfilter);
yrxI = downsample(yrxI,nsamp); % Downsample.
yrxI = yrxI(2*delay+1:end-2*delay); % Account for delay.
LdetI = yrxI.';

% Filter received signal using square root raised cosine filter.
ytxQ = DemodQ.';
yrxQ = rcosflt(ytxQ,1,nsamp,'Fs/filter',rrcfilter);
yrxQ = downsample(yrxQ,nsamp); % Downsample.
yrxQ = yrxQ(2*delay+1:end-2*delay); % Account for delay.
LdetQ = yrxQ.';

if orde == 1
	%Decision-Circuit-I 4-level
	for i=1:1:tsymbol   
       LcompI(i) = LdetI(2*tsampling*(2*i-1));
       if (LcompI(i) >= 2) 
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) =  3*ones(1,4*tsampling);
       end;
       if ((LcompI(i) >= 0) & (LcompI(i) < 2))
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) =  1*ones(1,4*tsampling);
       end;
       if ((LcompI(i) >= -2) & (LcompI(i) < 0))
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) = -1*ones(1,4*tsampling);
       end;
       if (LcompI(i) < -2) 
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) = -3*ones(1,4*tsampling);
       end;
	end;
    %Decision-Circuit-Q 4-level
	for i=1:1:tsymbol   
       LcompQ(i) = LdetQ(2*tsampling*(2*i-1));
       if (LcompQ(i) >= 2) 
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) =  3*ones(1,4*tsampling);
       end;
       if ((LcompQ(i) >= 0) & (LcompQ(i) < 2))
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) =  1*ones(1,4*tsampling);
       end;
       if ((LcompQ(i) >= -2) & (LcompQ(i) < 0))
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) = -1*ones(1,4*tsampling);
       end;
       if (LcompQ(i) < -2) 
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) = -3*ones(1,4*tsampling);
       end;
	end;
    %4-level symbol to 2-level tribit in Channel-I
	for i=1:1:tsymbol
        III(i) = recLsymbolI(4*tsampling*(i-1)+1);
       if III(i) == -3
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if III(i) == -1
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == 1
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == 3
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
	end;
    clear i;
    %4-level symbol to 2-level tribit in Channel-Q
	for i=1:1:tsymbol
        QQQ(i) = recLsymbolQ(4*tsampling*(i-1)+1);
       if QQQ(i) == -3
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if QQQ(i) == -1
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == 1
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == 3
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
	end;
	clear i;
elseif orde == 2  
	%Decision-Circuit-I 8-level
	for i=1:1:tsymbol   
       LcompI(i) = LdetI(3*tsampling*(2*i-1));
       if (LcompI(i) < -6) 
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -7*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= -6) & (LcompI(i) < -4))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -5*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= -4) & (LcompI(i) < -2))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -3*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= -2) & (LcompI(i) < 0))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -1*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 0) & (LcompI(i) < 2))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  1*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 2) & (LcompI(i) < 4))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  3*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 4) & (LcompI(i) < 6))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  5*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 6))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  7*ones(1,6*tsampling);
       end;
	end;
    %Decision-Circuit-Q 8-level
	for i=1:1:tsymbol   
       LcompQ(i) = LdetQ(3*tsampling*(2*i-1));
       if (LcompQ(i) < -6) 
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) = -7*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= -6) & (LcompQ(i) < -4))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) = -5*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= -4) & (LcompQ(i) < -2))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) = -3*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= -2) & (LcompQ(i) < 0))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) = -1*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= 0) & (LcompQ(i) < 2))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) =  1*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= 2) & (LcompQ(i) < 4))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) =  3*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= 4) & (LcompQ(i) < 6))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) =  5*ones(1,6*tsampling);
       end;
       if ((LcompQ(i) >= 6))
          recLsymbolQ(((i-1)*6*tsampling+1):(i*6*tsampling)) =  7*ones(1,6*tsampling);
       end;
	end;
	%8-level symbol to 2-level tribit in Channel-I
	for i=1:1:tsymbol
        III(i) = recLsymbolI(6*tsampling*(i-1)+1);
       if III(i) == -7
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if III(i) == -5
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == -3
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == -1
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if III(i) == 1
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if III(i) == 3
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == 5
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == 7
          rxtribitI((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitI((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitI((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
	end;
	clear i; 
    %8-level symbol to 2-level tribit in Channel-Q
	for i=1:1:tsymbol
        QQQ(i) = recLsymbolQ(6*tsampling*(i-1)+1);
       if QQQ(i) == -7
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if QQQ(i) == -5
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == -3
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == -1
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if QQQ(i) == 1
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if QQQ(i) == 3
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == 5
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == 7
          rxtribitQ((6*i-6)*tsampling+1:(6*i-4)*tsampling) = zeros(1,2*tsampling);
          rxtribitQ((6*i-4)*tsampling+1:(6*i-2)*tsampling) = ones(1,2*tsampling);
          rxtribitQ((6*i-2)*tsampling+1:(6*i-0)*tsampling) = ones(1,2*tsampling);
       end;
	end;
	clear i; 
elseif orde == 3
	%Decision-Circuit-I 16-level
	for i=1:1:tsymbol   
       LcompI(i) = LdetI(4*tsampling*(2*i-1));
       if (LcompI(i) < -14) 
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) = -15*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -14) & (LcompI(i) < -12))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) = -13*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -12) & (LcompI(i) < -10))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) = -11*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -10) & (LcompI(i) < -8))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -9*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -8) & (LcompI(i) < -6))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -7*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -6) & (LcompI(i) < -4))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -5*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -4) & (LcompI(i) < -2))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -3*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= -2) & (LcompI(i) < 0))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -1*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 0) & (LcompI(i) < 2)) 
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =   1*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 2) & (LcompI(i) < 4))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =   3*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 4) & (LcompI(i) < 6))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =   5*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 6) & (LcompI(i) < 8))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =   7*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 8) & (LcompI(i) < 10))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =   9*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 10) & (LcompI(i) < 12))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  11*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 12) & (LcompI(i) < 14))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  13*ones(1,8*tsampling);
       end;
       if ((LcompI(i) >= 14))
          recLsymbolI(((i-1)*8*tsampling+1):(i*8*tsampling)) =  15*ones(1,8*tsampling);
       end;
	end;
    %Decision-Circuit-Q 16-level
	for i=1:1:tsymbol   
       LcompQ(i) = LdetQ(4*tsampling*(2*i-1));
       if (LcompQ(i) < -14) 
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) = -15*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -14) & (LcompQ(i) < -12))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) = -13*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -12) & (LcompQ(i) < -10))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) = -11*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -10) & (LcompQ(i) < -8))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -9*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -8) & (LcompQ(i) < -6))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -7*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -6) & (LcompQ(i) < -4))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -5*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -4) & (LcompQ(i) < -2))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -3*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= -2) & (LcompQ(i) < 0))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  -1*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 0) & (LcompQ(i) < 2))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =   1*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 2) & (LcompQ(i) < 4))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =   3*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 4) & (LcompQ(i) < 6))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =   5*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 6) & (LcompQ(i) < 8))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =   7*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 8) & (LcompQ(i) < 10))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =   9*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 10) & (LcompQ(i) < 12))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  11*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 12) & (LcompQ(i) < 14))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  13*ones(1,8*tsampling);
       end;
       if ((LcompQ(i) >= 14))
          recLsymbolQ(((i-1)*8*tsampling+1):(i*8*tsampling)) =  15*ones(1,8*tsampling);
       end;
	end;
	%16-level symbol to 2-level fourbit in Channel-I
	for i=1:1:tsymbol
        III(i) = recLsymbolI(8*tsampling*(i-1)+1);
        if III(i) == -15
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == -13
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == -11
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == -9
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == -7
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == -5
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == -3
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == -1
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == 1
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == 3
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == 5
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == 7
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == 9
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if III(i) == 11
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == 13
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if III(i) == 15
            rxfourbitI((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitI((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitI((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
	end;
    %16-level symbol to 2-level fourbit in Channel-Q
	for i=1:1:tsymbol
        QQQ(i) = recLsymbolQ(8*tsampling*(i-1)+1);
        if QQQ(i) == -15
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == -13
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == -11
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == -9
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == -7
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == -5
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == -3
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == -1
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == 1
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == 3
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == 5
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == 7
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == 9
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
        if QQQ(i) == 11
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == 13
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = zeros(1,2*tsampling);
        end;
        if QQQ(i) == 15
            rxfourbitQ((8*i-8)*tsampling+1:(8*i-6)*tsampling) = zeros(1,2*tsampling);
            rxfourbitQ((8*i-6)*tsampling+1:(8*i-4)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-4)*tsampling+1:(8*i-2)*tsampling) = ones(1,2*tsampling);
            rxfourbitQ((8*i-2)*tsampling+1:(8*i-0)*tsampling) = ones(1,2*tsampling);
        end;
    end;
end

if orde == 1
    Y = rxdibitI;
    Z = rxdibitQ;
elseif orde == 2
    Y = rxtribitI;
    Z = rxtribitQ;   
elseif orde == 3
    Y = rxfourbitI;
    Z = rxfourbitQ; 
end

if orde == 1
    rxI = rxdibitI;
    rxQ = rxdibitQ;
elseif orde == 2
    rxI = rxtribitI;
    rxQ = rxtribitQ;
elseif orde == 3
    rxI = rxfourbitI;
    rxQ = rxfourbitQ;
end

%RECOVERED DIBIT TO RECOVERED BIT CONVERTER
for i=1:1:(Jumlah_Bit/2)
    recbit((2*i-2)*tsampling+1:(2*i-1)*tsampling) = rxI(2*(i-1)*tsampling+1:(2*i-1)*tsampling);
    recbit((2*i-1)*tsampling+1:(2*i-0)*tsampling) = rxQ(2*(i-1)*tsampling+1:(2*i-1)*tsampling);
end;
% ==== End of Demod =======================================================

% Error Bit ===============================================================
Bit_Asli;
Det_Bit (1:length(Bit_Asli)) = recbit(8:tsampling:length(recbit));
Jml_Bit_Salah = sum(Bit_Asli~=Det_Bit);
Bit_Err = sum(abs(Det_Bit-Bit_Asli))/length(Bit_Asli);
P_e = Jml_Bit_Salah/Bit_Masukan;


set(handles.edit2,'string',Bit_Masukan);
set(handles.edit3,'string',Jml_Bit_Salah);
set(handles.edit4,'string',P_e);

% =========================================================================
% =========================================================================
% =========================================================================
end

function pushbutton30_Callback(hObject, eventdata, handles) % BER EbNo
global BR
if isempty(BR)==1
    msgbox('Push "Submit" !');
else
    Grafik
end;

function pushbutton31_Callback(hObject, eventdata, handles) % respon impuls
global rrcfilter rolloff
if isempty(rrcfilter)==1
    msgbox('Push "Submit" !');
else
[pos1 pos2]=posisi_grafik;
figure('Position',pos1) 
impz(rrcfilter,1);
title('Impuls Response of Modulator/DeModulator Filter');
figure('Position',pos2) 
impz(rrcfilter,1);
title('Impuls Response of DeModulator Filter');
figure
nsamp = 4;
filtorder = 40;
h = firrcos(filtorder,0.5,rolloff,nsamp,'rolloff');
freqz(h,1);
title('Magnitude and Phase of Filter Response');
end;


function pushbutton32_Callback(hObject, eventdata, handles) % konstelasi
global Lsymbol_Od Lsymbol_Ev M LdetQ LdetI
[pos1 pos2]=posisi_mata_kon;
if isempty(LdetQ)==1
    msgbox('Push "Submit" !');
else
if     M == 16
    bb = 64; aa = bb/2;
elseif M == 64
    bb = 96; aa = bb/2;
elseif M == 256
    bb = 128; aa = bb/2;
end;
Lo_k=Lsymbol_Od(32:bb:end);
Le_k=Lsymbol_Ev(32:bb:end);
Lo_t=LdetI(32:bb:end);
Le_t=LdetQ(32:bb:end);
la = ceil(max([Lo_k Le_k Lo_t Le_t])) + 0.3;
figure('Position',pos1) 
plot(Lo_k,Le_k,'kx',Lo_k,Le_k,'ko')
grid on, axis ([-la la -la la]);
title('Tx Signal Constellation');xlabel('Inphase (V)');ylabel('Quadrature (V)');
figure('Position',pos2) 
plot(Lo_t,Le_t,'kx',Lo_t,Le_t,'ko')
grid on, axis ([-la la -la la]);
title('Rx Signal Constellation');xlabel('Inphase (V)');ylabel('Quadrature (V)');
end;


function pushbutton33_Callback(hObject, eventdata, handles) % pola mata
global Yqamj Yqamrxj nsamp
if isempty(nsamp)==1
    msgbox('Push "Submit" !');
else
eyediagram(Yqamrxj,nsamp);
subplot(2,1,1); grid;
title('Eye Pattern of InPhase Input DeModulator')
subplot(2,1,2); grid;
title('Eye Pattern of Quadrature Input DeModulator')
eyediagram(Yqamj,nsamp);
subplot(2,1,1); grid;
title('Eye Pattern of InPhase Output Modulator')
subplot(2,1,2); grid;
title('Eye Pattern of Quadrature Output Modulator')
end;