📄 bmod.m
字号:
function []=bmod(action);
%
% BBI 2000
global x y Kmod Kbase fs fb fc fc1 fc2 rd Kmd B w CNR Kch msg b a...
H442 T eta yr yn y0 k H1 H74 H92 Kerror Kecc H101 H112 H122 NN KK
if nargin<1;action='initialized';end;
if strcmp(action,'initialized');
figure('Num','off','Units','pix','pos',[5 29 792 530],'color',[1 1 1]);
uicontrol('Style','Frame','Units','Normal','Position',[.82 0 .2 1],'Back',[.8 .8 .8]);
H1=uicontrol('Style','Popup','Units','Normal','Position',[.82 .93 .15 .05],'String',str2mat('BPSK',...
'FSK','ASK','QPSK','QDPSK','16QAM'),...
'Back',[1 1 1],'Callback','bmod method;');
H2=uicontrol('Style','Popup','Units','Normal','Position',[.84 .86 .15 .05],'String',str2mat('Baseband Shaping',...
'Baseband'),'back',[1 1 1],'Callback','bmod base;');
H3=uicontrol('Style','Popup','Units','Normal','Position',[.84 .79 .15 .05],'String',str2mat('Ref digit=0',...
'Ref digit=1'),'back',[1 1 1],'Call','bomd refd;');
H411=uicontrol('Style','Text','Units','Normal','Position',[.822 .725 .09 .04],'String','B(MHz):','back',[.8 .8 .8]);
H422=uicontrol('Style','Edit','Units','Normal','Position',[.91 .73 .08 .04],'Back',[1 1 1],'String','1.5','Call','bmod bandwidth;');
H41=uicontrol('Style','Text','Units','Normal','Position',[.822 .645 .09 .04],'String','Rb(Mb/s):','Back',[.8 .8 .8]);
H42=uicontrol('Style','Edit','Units','Normal','Position',[.91 .65 .08 .04],'Back',[1 1 1],'String','1','Call','bmod fd;');
H51=uicontrol('Style','Text','Units','Normal','Position',[.822 .575 .09 .04],'String','fc(MHz):','Back',[.8 .8 .8]);
H52=uicontrol('Style','Edit','Units','Normal','Position',[.91 .58 .08 .04],'Back',[1 1 1],'String','2','Call','bmod fc;');
H61=uicontrol('Style','Text','Units','Normal','Position',[.822 .515 .09 .04],'String','fc2(MHz):','Back',[.8 .8 .8]);
H62=uicontrol('Style','Edit','Units','Normal','Position',[.91 .52 .08 .04],'Back',[1 1 1],'String','2.5','Call','bmod fc2;');
H71=uicontrol('Style','Text','Units','Normal','Position',[.822 .445 .09 .04],'String','fc(MHz):','Back',[.8 .8 .8]);
H72=uicontrol('Style','Edit','Units','Normal','Position',[.91 .45 .08 .04],'Back',[1 1 1],'String','32','Call','bmod fs;');
H75=uicontrol('Style','Checkbox','Units','Normal','Pos',[.825 .4 .168 .04],'String','Cimmunication Channel',...
'value',1,'Back',[.8 .8 .8],'Call','bmod channel;');
H73=uicontrol('Style','Text','Units','Normal','Position',[.822 .345 .09 .04],'String','C/N(dB):','Back',[.8 .8 .8]);
H74=uicontrol('Style','Edit','Units','Normal','Position',[.91 .35 .08 .04],'Back',[1 1 1],'String','5','Call','bmod CNR;');
H101=uicontrol('Style','Popup','Units','Normal','Position',[.825 .28 .18 .05],'String',str2mat('No Eerror Control Coding',...
'Reed-Solomon','Hamming','BCH'),'Back',[1 1 1],'Callback','bmod ECC;');
H111=uicontrol('Style','Text','Units','Normal','Position',[.822 .225 .09 .04],'String','C/N(dB):','Back',[.8 .8 .8]);
H112=uicontrol('Style','Edit','Units','Normal','Position',[.91 .23 .08 .04],'Back',[1 1 1],'String','63','Call','bmod nn;');
H121=uicontrol('Style','Text','Units','Normal','Position',[.822 .165 .09 .04],'String','k:','Back',[.8 .8 .8]);
H122=uicontrol('Style','Edit','Units','Normal','Position',[.91 .17 .08 .04],'Back',[1 1 1],'String','47','Call','bmod kk;');
H8=uicontrol('Style','Push','Units','Normal','Position',[.84 .11 .15 .04],'String','MOD/DEMOD','Call','bmod demod;');
H91=uicontrol('Style','Text','Units','Normal','Position',[.84 .06 .15 .04],'String','Message','Back',[.8 .8 .8]);
H92=uicontrol('Style','Edit','Units','Normal','Position',[.822 .03 .178 .04],'Back',[1 1 .2],'String','CHN','Call','bmod message;');
%----------------------------------------------------------------------
Kmod=1;Kbase=2;fs=32;fb=1;fc=2;rd=0;fc2=2.5;
Kmd=1;B=1.5*fb;CNR=5;Kch=1;msg='CHN';eta=fb/B;
T=[2 2 2 2 1 1 .5;1.5 1.5 1.5 1.5 .75 .75 .375];
w=[fc-.5*B fc+.5*B]/(fs/2);Kerror=0;Kecc=1;NN=63;KK=47;
elseif strcmp(action,'method');
Kmod=get(gco,'value');Kmd=1;
if Kmod==3;
w=(fc+fc2)/2;B=(fc2-fc)+T(Kbase)*fb;
w=[w-.5*B w+.5*B]/(fs/2);
else;
B=T(Kbase,Kmod)*fb;w=[fc-.5*B fc+.5*B]/(fs/2);
end;set(H422,'string',num2str(B));
elseif strcmp(action,'base');
Kbase=get(gco,'value');Kbase=3-Kbase;Kmd=1;
if Kmod==3;
w=(fc+fc2)/2;B=(fc2-fc)+T(Kbase)*fb;
w=[w-.5*B w+.5*B]/(fs/2);
else;
B=T(Kbase,Kmod)*fb;w=[fc-.5*B fc+.5*B]/(fs/2);
end;set(H422,'string',num2str(B));
elseif strcmp(action,'refd');
K=get(gco,'value');rd=K-1;Kmd=1;
elseif strcmp(action,'bandwidth');
B=get(gco,'string');B=str2num(B);Kmd=1;
if Kmod==3;w=[w-.5*B w+.5*B]/(fs/2);
else;w=[fc-.5*B fc+.5*B]/(fs/2);
end;
elseif strcmp(action,'fb');
fb=get(gco,'string');fb=str2num(fb);Kmd=1;
elseif strcmp(action,'fc');
fc=get(gco,'string');fc=str2num(fc);Kmd=1;
elseif strcmp(action,'fc2');
fc2=get(gco,'string');fc2=str2num(fc2);Kmd=1;
elseif strcmp(action,'fs');
fs=get(gco,'string');fs=str2num(fs);Kmd=1;
elseif strcmp(action,'message');
msg=get(gco,'string');x=str2num(msg);Kmd=1;
elseif strcmp(action,'demod');
Kmd=-Kmd;
elseif strcmp(action,'CNR');
K=get(gco,'string');CNR=str2num(K);if Kch==1;Kmd=1;end;
elseif strcmp(action,'channel');
Kch=get(gco,'value');Kmd=1;
elseif strcmp(action,'ECC');
Kecc=get(gco,'value');Kmd=1;
if Kecc==4;KK=45;set(H122,'string',num2str(KK));end;
elseif strcmp(action,'nn');
NN=get(gco,'string');NN=str2num(NN);Kmd=1;
elseif strcmp(action,'kk');
KK=get(gco,'string');KK=str2num(KK);Kmd=1;
if Kecc==1|Kecc==3;
Kecc=2;set(H101,'value',2);
end;
end;
x=str2cod(msg);n1=0;
%------------------------------------------
if Kecc==2; % Error Control Coding
x=encode(x,NN,KK,'rs')';
elseif Kecc==3;
m=log(NN+1)/log(2);KK=NN-m;
x=encode(x,NN,KK,'hamming')';set(H122,'string',num2str(KK));
elseif Kecc==4;
x=encode(x,NN,KK,'bch')';
end;n1=rem(length(x),8);
if n1>0;x=[x zeros(1,8-n1)];end;
%------------------------------------------
if Kmd==1&Kerror==0; %Modulate
if Kmod<=2;
y=bpsk(x,Kmod,Kbase,fs,fb,fc,rd);
elseif Kmod==3;
y=fsk(x,Kbase,fs,fb,fc,fc2);
elseif Kmod==4;
y=ask(x,Kbase,fs,fb,fc);
elseif Kmod==5|Kmod==6;
y=qpsk(x,Kmod,Kbase,fs,fb,fc);
elseif Kmod==7;
y=qam(x,Kbase,fs,fb,fc);
end;y0=y;yr=y;eta=fb/B;N=length(y);k=1;
if w(1)<eps;w(1)=eps; end; if w(2)>1;w(2)=1;end;
if Kch==1;
[b,a]=cheby1(2,.1,w);y=filtfilt(b,a,y); %Tx Bandpass Filter
yn=randn(1,N); yn1=filtfilt(b,a,yn);
k=sqrt(1e-07/(sum(yn1.*yn1)/N));
yn=k*yn; Pn=k*k*sum(yn1.*yn1);
y1=filtfilt(b,a,y); Pc=sum(y1.*y1);
k=sqrt(Pn/Pc*10^(CNR/10)); y=k*y;y=y+yn;
yr=filtfilt(b,a,y); % Rx Bandpass Filter
end;
bmod1(x,y/k,Kmod,Kbase,fs,fb,fc,rd);
bmod2(x,y,Kmod,fs,fb,fc,k*y0);
elseif Kmd==-1; %Demodulate;
if Kmod<=2; [xn,x1]=bpskdet(yr,Kmod,fs,fb,fc,rd);
elseif Kmod==3; [xn,x1]=fskdet(yr,fs,fb,fc,fc2);
elseif Kmod==4; [xn,x1]=askdet(yr,fs,fb,fc);
elseif Kmod==5|Kmod==6;[xn,x1]=qpskdet(yr,Kmod,fs,fb,fc);
elseif Kmod==7; [xn,x1]=qamdet(yr,fs.fb,fc);
end;
%---------------------------------
m2=length(x);I=find(x==xn);m1=length(I);
if n1>0;xn=xn(1:length(xn)-8+n1);end;
if Kecc==2; %Error Control Coding
xn=decode(xn,NN,KK,'rs')';
elseif Kecc==3;
xn=decode(xn,NN,KK,'hamming')';
elseif Kecc==4;
xn=decode(xn,NN,KK,'bch')';
end;
bmod3(xn,x1,Kmod,fs,fb,msg,[m1 m2]);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -