summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/viterbi/viterbi.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src/lib/viterbi/viterbi.c')
-rw-r--r--gnuradio-core/src/lib/viterbi/viterbi.c56
1 files changed, 28 insertions, 28 deletions
diff --git a/gnuradio-core/src/lib/viterbi/viterbi.c b/gnuradio-core/src/lib/viterbi/viterbi.c
index 9f5c1e72a9..fc88866035 100644
--- a/gnuradio-core/src/lib/viterbi/viterbi.c
+++ b/gnuradio-core/src/lib/viterbi/viterbi.c
@@ -1,26 +1,26 @@
/*
* Copyright 1995 Phil Karn, KA9Q
* Copyright 2008 Free Software Foundation, Inc.
- *
+ *
* This file is part of GNU Radio
- *
+ *
* GNU Radio 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, or (at your option)
* any later version.
- *
+ *
* GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
-/*
+/*
* Viterbi decoder for K=7 rate=1/2 convolutional code
* Some modifications from original Karn code by Matt Ettus
*/
@@ -94,7 +94,7 @@ encode(unsigned char *symbols,
unsigned char encstate)
{
int i;
-
+
while(nbytes-- != 0){
for(i=7;i>=0;i--){
encstate = (encstate << 1) | ((*data >> i) & 1);
@@ -103,7 +103,7 @@ encode(unsigned char *symbols,
}
data++;
}
-
+
return encstate;
}
@@ -120,16 +120,16 @@ viterbi(unsigned long *metric, /* Final path metric (returned value) */
long bestmetric;
int beststate,i;
struct viterbi_state state0[64],state1[64],*state,*next;
-
+
state = state0;
next = state1;
-
+
/* Initialize starting metrics to prefer 0 state */
state[0].metric = 0;
for(i=1;i<64;i++)
state[i].metric = -999999;
state[0].path = 0;
-
+
for(bitcnt = 0;bitcnt < nbits;bitcnt++){
/* Read input symbol pair and compute all possible branch
* metrics
@@ -173,7 +173,7 @@ viterbi(unsigned long *metric, /* Final path metric (returned value) */
BUTTERFLY(29,0);
BUTTERFLY(30,2);
BUTTERFLY(31,3);
-
+
/* Swap current and next states */
if(bitcnt & 1){
state = state0;
@@ -205,7 +205,7 @@ viterbi(unsigned long *metric, /* Final path metric (returned value) */
#endif
*data++ = state[beststate].path >> 24;
}
-
+
}
/* Output remaining bits from 0 state */
// ETTUS Find best state instead
@@ -219,7 +219,7 @@ viterbi(unsigned long *metric, /* Final path metric (returned value) */
}
if((i = bitcnt % 8) != 6)
state[beststate].path <<= 6-i;
-
+
*data++ = state[beststate].path >> 24;
*data++ = state[beststate].path >> 16;
*data++ = state[beststate].path >> 8;
@@ -245,7 +245,7 @@ viterbi_butterfly8(unsigned char *symbols, int mettab[2][256], struct viterbi_st
{
unsigned int bitcnt;
int mets[4];
-
+
struct viterbi_state *state, *next;
state = state0;
next = state1;
@@ -257,8 +257,8 @@ viterbi_butterfly8(unsigned char *symbols, int mettab[2][256], struct viterbi_st
mets[2] = mettab[1][symbols[0]] + mettab[0][symbols[1]];
mets[3] = mettab[1][symbols[0]] + mettab[1][symbols[1]];
symbols += 2;
-
- // These macro calls were generated by genbut.c
+
+ // These macro calls were generated by genbut.c
BUTTERFLY(0,0);BUTTERFLY(1,1);BUTTERFLY(2,3);BUTTERFLY(3,2);
BUTTERFLY(4,3);BUTTERFLY(5,2);BUTTERFLY(6,0);BUTTERFLY(7,1);
BUTTERFLY(8,0);BUTTERFLY(9,1);BUTTERFLY(10,3);BUTTERFLY(11,2);
@@ -267,7 +267,7 @@ viterbi_butterfly8(unsigned char *symbols, int mettab[2][256], struct viterbi_st
BUTTERFLY(20,1);BUTTERFLY(21,0);BUTTERFLY(22,2);BUTTERFLY(23,3);
BUTTERFLY(24,2);BUTTERFLY(25,3);BUTTERFLY(26,1);BUTTERFLY(27,0);
BUTTERFLY(28,1);BUTTERFLY(29,0);BUTTERFLY(30,2);BUTTERFLY(31,3);
-
+
// Swap current and next states
if(bitcnt & 1){
state = state0;
@@ -284,19 +284,19 @@ viterbi_butterfly2(unsigned char *symbols, int mettab[2][256], struct viterbi_st
{
//unsigned int bitcnt;
int mets[4];
-
+
struct viterbi_state *state, *next;
state = state0;
next = state1;
// Operate on 4 symbols (2 bits) at a time
-
+
// Read input symbol pair and compute all possible branch metrics
mets[0] = mettab[0][symbols[0]] + mettab[0][symbols[1]];
mets[1] = mettab[0][symbols[0]] + mettab[1][symbols[1]];
mets[2] = mettab[1][symbols[0]] + mettab[0][symbols[1]];
mets[3] = mettab[1][symbols[0]] + mettab[1][symbols[1]];
-
- // These macro calls were generated by genbut.c
+
+ // These macro calls were generated by genbut.c
BUTTERFLY(0,0);BUTTERFLY(1,1);BUTTERFLY(2,3);BUTTERFLY(3,2);
BUTTERFLY(4,3);BUTTERFLY(5,2);BUTTERFLY(6,0);BUTTERFLY(7,1);
BUTTERFLY(8,0);BUTTERFLY(9,1);BUTTERFLY(10,3);BUTTERFLY(11,2);
@@ -305,17 +305,17 @@ viterbi_butterfly2(unsigned char *symbols, int mettab[2][256], struct viterbi_st
BUTTERFLY(20,1);BUTTERFLY(21,0);BUTTERFLY(22,2);BUTTERFLY(23,3);
BUTTERFLY(24,2);BUTTERFLY(25,3);BUTTERFLY(26,1);BUTTERFLY(27,0);
BUTTERFLY(28,1);BUTTERFLY(29,0);BUTTERFLY(30,2);BUTTERFLY(31,3);
-
+
state = state1;
next = state0;
-
+
// Read input symbol pair and compute all possible branch metrics
mets[0] = mettab[0][symbols[2]] + mettab[0][symbols[3]];
mets[1] = mettab[0][symbols[2]] + mettab[1][symbols[3]];
mets[2] = mettab[1][symbols[2]] + mettab[0][symbols[3]];
mets[3] = mettab[1][symbols[2]] + mettab[1][symbols[3]];
-
- // These macro calls were generated by genbut.c
+
+ // These macro calls were generated by genbut.c
BUTTERFLY(0,0);BUTTERFLY(1,1);BUTTERFLY(2,3);BUTTERFLY(3,2);
BUTTERFLY(4,3);BUTTERFLY(5,2);BUTTERFLY(6,0);BUTTERFLY(7,1);
BUTTERFLY(8,0);BUTTERFLY(9,1);BUTTERFLY(10,3);BUTTERFLY(11,2);
@@ -328,13 +328,13 @@ viterbi_butterfly2(unsigned char *symbols, int mettab[2][256], struct viterbi_st
unsigned char
viterbi_get_output(struct viterbi_state *state, unsigned char *outbuf) {
- // Produce output every 8 bits once path memory is full
+ // Produce output every 8 bits once path memory is full
// if((bitcnt % 8) == 5 && bitcnt > 32) {
-
+
// Find current best path
unsigned int i,beststate;
int bestmetric;
-
+
bestmetric = state[0].metric;
beststate = 0;
for(i=1;i<64;i++)