⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_qam.m

📁 非常好的M_QAM调制解调程序
💻 M
📖 第 1 页 / 共 5 页
字号:
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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -