Mercurial > forge
changeset 10019:89feb3313c24 octave-forge
convenc: new function for comm package by Anthony Richardson <ar63@evansville.edu> on octave-forge mailing list
author | carandraug |
---|---|
date | Fri, 13 Apr 2012 09:08:01 +0000 |
parents | 3ef588f9db51 |
children | 76606d2d6982 |
files | main/comm/NEWS main/comm/inst/convenc.m |
diffstat | 2 files changed, 54 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/main/comm/NEWS Thu Apr 12 21:22:47 2012 +0000 +++ b/main/comm/NEWS Fri Apr 13 09:08:01 2012 +0000 @@ -1,6 +1,10 @@ Summary of important user-visible changes for communications 1.1.1: ------------------------------------------------------------------- + ** The following functions are new: + + convenc + ** The function `reedmullerdec' had a bug fix introduced on the previous release @@ -10,4 +14,3 @@ ** Use of deprecated functions has been removed ** Package is no longer automatically loaded. -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main/comm/inst/convenc.m Fri Apr 13 09:08:01 2012 +0000 @@ -0,0 +1,50 @@ +## Copyright (C) 2012 Tony Richardson <richardson.tony@gmailcom> +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 3 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## 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() + +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 + + x = rem(conv2(1, m(:)', G),2)(:,!rem(1:numel(m),k))(:)'; +end