changeset 10020:76606d2d6982 octave-forge

convenc: help text to texinfo and basic input checking
author carandraug
date Fri, 13 Apr 2012 09:28:27 +0000
parents 89feb3313c24
children 463587e9bc17
files main/comm/inst/convenc.m
diffstat 1 files changed, 48 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/main/comm/inst/convenc.m	Fri Apr 13 09:08:01 2012 +0000
+++ b/main/comm/inst/convenc.m	Fri Apr 13 09:28:27 2012 +0000
@@ -13,38 +13,53 @@
 ## You should have received a copy of the GNU General Public License along with
 ## this program; if not, see <http://www.gnu.org/licenses/>.
 
-% -- Function File: convenv(m, G, k)
-%    Compute the output of an (n, k, L) convolutional encoder with vector input
-%    m and matrix of generator polynomials G.
-%
-%   The input vector m can be of arbitrary length.   G is a matrix with n rows
-%   and k*(L+1) columns.  The rows of G are the generator polynomials for each
-%   of the n output bits (per k input bits).
-%
-%   The output is a vector whose length is n*floor([length(m)+k*(L+1)-1]/k).
-%   With two inputs, k is assumed to be equal to 1.
-%
-%   Example 1: Compute the output from a (2, 1, 2)  convolutional encoder
-%   with generator polynomials g1 = [ 1 1 1 ] and g2 = [ 1 0 1 ]
-%   when the input message is m = [ 1 1 0 1 1 1 0 0 1 0 0 0 ]
-%
-%   x = convenc(m, [g1; g2])
-%   x = 1101010001100111111011000000
-%
-%   Example 2: Compute the output from a (3, 2, 1) conv encoder with
-%   generator polynomials g1 = [ 1 0 1 1 ], g2 = [ 1 1 0 1 ] and
-%   g3 = [ 1 0 1 0 ] when the input is m = [ 0   1   1   0   0   0   1   1 ]
-%
-%   x = convenc(m, [g1; g2; g3], 2)
-%   x = 111 111 110 101
-%
-%   Note: This function is not compatible with Matlab's convenc()
+## -*- texinfo -*-
+## @deftypefn {Function File} {@var{x} =} convenc (@var{m}, @var{G}, @var{k})
+## Compute output of an (n, @var{k}, L) convolutional encoder with vector input
+## @var{m} and matrix of generator polynomials @var{G}.
+##
+## The input vector @var{m} can be of arbitrary length. @var{G} is a matrix with n rows
+## and @var{k}*(L+1) columns. The rows of @var{G} are the generator polynomials for each
+## of the n output bits (per @var{k} input bits).
+##
+## The output is a vector whose length is n*floor([length(@var{m})+@var{k}*(L+1)-1]/@var{k}).
+## If unspecified, @var{k} defaults to 1.
+##
+## Example 1: Compute the output from a (2, 1, 2) convolutional encoder
+## @example
+## @group
+## m  = [ 1 1 0 1 1 1 0 0 1 0 0 0];
+## g1 = [1 1 1];
+## g2 = [1 0 1];
+## convenc (m, [g1; g2])
+##      @result{} [1 1 0 1 0 1 0 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0]
+## @end group
+## @end example
+##
+## Example 2: Compute the output from a (3, 2, 1) convolutional encoder
+## @example
+## @group
+## m  = [0 1 1 0 0 0 1 1 ];
+## g1 = [1 0 1 1];
+## g2 = [1 1 0 1];
+## g3 = [1 0 1 0];
+## convenc (m, [g1; g2; g3], 2)
+##      @result{} [1 1 1 1 1 1 1 1 0 1 0 1]
+## @end group
+## @end example
+##
+## @strong{Caution:}: this function is not compatible with @sc{matlab}'s convenc().
+## @end deftypefn
 
-function x = convenc(m, G, k=1)
-	% Use conv2 to do repeated 1d convolutions of m with each row of G. 
-	% rem is used to transform the standard convolution result to one
-	% which uses modulo-2 addition.  Only cols with index a mult. of k 
-	% are in the actual enc. output
+function x = convenc (m, G, k = 1)
+  if (nargin < 2 || nargin > 3)
+    print_usage;
+  endif
 
-	x = rem(conv2(1, m(:)', G),2)(:,!rem(1:numel(m),k))(:)';
-end
+  # Use conv2 to do repeated 1d convolutions of m with each row of G. 
+  # rem is used to transform the standard convolution result to one
+  # which uses modulo-2 addition.  Only cols with index a mult. of k 
+  # are in the actual enc. output
+
+  x = rem(conv2(1, m(:)', G),2)(:,!rem(1:numel(m),k))(:)';
+endfunction