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

📄 bmod.m

📁 交全面的给出了好几种调制解调方案的matlab代码,又ASK,BPSK,FSK,QAM等的源代码 对通信领域的研究人员很有帮助
💻 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 + -