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

📄 my_convecd.m

📁 卷积编码的matlab的S函数程序,对使用simulink者有很大帮助,程序已验证.
💻 M
字号:
function my_convencode(block)
setup(block);
function setup(block)
  block.NumInputPorts  = 1;
  block.NumOutputPorts = 1;
  block.SetPreCompInpPortInfoToDynamic;
  block.SetPreCompOutPortInfoToDynamic;
  
  block.NumDialogPrms     = 2;
  block.DialogPrmsTunable = {'Tunable','Tunable'};
  
  block.InputPort(1).Dimensions        = size(block.DialogPrm(2).Data,2)/block.DialogPrm(1).Data;
  block.InputPort(1).DirectFeedthrough = false;
  block.OutputPort(1).Dimensions       = size(block.DialogPrm(2).Data,1);
  block.SampleTimes = [-1 0];%not sure
  
  block.RegBlockMethod('CheckParameters', @CheckPrms);
  block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);
  block.RegBlockMethod('InitializeConditions', @InitializeConditions);
  block.RegBlockMethod('Outputs', @Outputs);
  block.RegBlockMethod('Update', @Update);
function CheckPrms(block)
  L = block.DialogPrm(1).Data;
  G = block.DialogPrm(2).Data;%G is n rows and k*L column
  if rem(size(G,2),L)~=0
   error('Error,size of G and L do not agree.');
  end
function DoPostPropSetup(block)
  L=block.DialogPrm(1).Data; 
  G = block.DialogPrm(2).Data;
  block.NumDworks = L-1;
  x='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for i=1:L-1
  block.Dwork(i).Name = x(i);
  block.Dwork(i).Dimensions      = size(G,2)/L;
  block.Dwork(i).DatatypeID      = 0;      % double
  block.Dwork(i).Complexity      = 'Real'; % real
  block.Dwork(i).UsedAsDiscState = true;
end
function InitializeConditions(block)
 for i=1:block.DialogPrm(1).Data-1
     block.Dwork(i).Data =zeros(1,size(block.DialogPrm(2).Data,2)/block.DialogPrm(1).Data);
 end
function Outputs(block)
L = block.DialogPrm(1).Data;
G = block.DialogPrm(2).Data;
k=size(G,2)/L; 
u1=block.InputPort(1).Data;
u=u1(k:-1:1);
n=size(G,1);
for i=1:L-1
   u=[u,block.Dwork(i).Data];
end
uu=reshape(u,k*L,1);
block.OutputPort(1).Data = reshape(rem(G*uu,2),1,n);
function Update(block)
L = block.DialogPrm(1).Data;
G = block.DialogPrm(2).Data;
k=size(G,2)/L;
for i=1:L-2
 block.Dwork(L-i).Data= block.Dwork(L-i-1).Data;
end
  block.Dwork(1).Data = block.InputPort(1).Data(k:-1:1);

⌨️ 快捷键说明

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