summaryrefslogtreecommitdiff
path: root/viterbi_generator/tests/utils/make_increment.m
diff options
context:
space:
mode:
Diffstat (limited to 'viterbi_generator/tests/utils/make_increment.m')
-rw-r--r--viterbi_generator/tests/utils/make_increment.m70
1 files changed, 70 insertions, 0 deletions
diff --git a/viterbi_generator/tests/utils/make_increment.m b/viterbi_generator/tests/utils/make_increment.m
new file mode 100644
index 0000000..91cc0ae
--- /dev/null
+++ b/viterbi_generator/tests/utils/make_increment.m
@@ -0,0 +1,70 @@
+function [ INCREMENT ] = make_increment(SYMBOLS,NEXT,Rhh)
+%
+% MAKE_INCREMENT:
+% This function returns a lookuptable containing the
+% metric increments related to moving from state n to m.
+% The data is arranged so that the increment accosiated
+% with a move from state n to m is located in
+% INCREMENT(n,m). To minimize computations only legal
+% transitions are considdered.
+%
+% SYNTAX: [ INCREMENT ] = make_increment(SYMBOLS,NEXT,Rhh)
+%
+% INPUT: SYMBOLS: The table of symbols corresponding the the state-
+% numbers.
+% NEXT: A transition table containing the next legal
+% states, as it is generated by the code make_next.
+% Rhh: The autocorrelation as estimated by mf.m.
+%
+% OUTPUT: INCREMENT:
+% The increment table as described above.
+%
+% SUB_FUNC: None
+%
+% WARNINGS: There is no syntax checking on input or output.
+%
+% TEST(S): By hand, against expected values.
+%
+% AUTOR: Jan H. Mikkelsen / Arne Norre Ekstrøm
+% EMAIL: hmi@kom.auc.dk / aneks@kom.auc.dk
+%
+% $Id: make_increment.m,v 1.6 1997/09/22 11:39:34 aneks Exp $
+
+% IN THIS PEACE OF CODE THE SYNTAX CHECKING IS MINIMAL
+% THIS HAS BEEN CHOSEN TO AVOID THE OVERHEAD. RECALL THAT
+% THIS CODE IS EXECUTED EACH TIME A BURST IS RECEIVED.
+
+% FIND THE NUMBER OF SYMBOLS THAT WE HAVE
+%
+[M,Lh]=size(SYMBOLS);
+
+% INITIALIZE THE INCREMENT MATRIX
+%
+INCREMENT=zeros(M);
+
+% RECALL THAT THE I SEQUENCE AS IT IS STORED IN STORED AS:
+% [ I(n-1) I(n-2) I(n-3) ... I(n-Lh) ]
+%
+% ALSO RECALL THAT Rhh IS STORED AS:
+% [ Rhh(1) Rhh(2) Rhh(3) ... Rhh(Lh) ]
+%
+% THE FORMULA TO USE IS:
+% INCREMENT(n,m)
+% =
+% real(conj(I(n))*(I(n-Lh)*Rhh(Lh)+I(n-Lh+1)*Rhh(Lh-1)+...+I(n-1)*Rhh(1))
+%
+% THEY CAN THUS BE MULTIPLIED DIRECTLY WITH EACH OTHER
+
+% LOOP OVER THE STATES, AS FOUND IN THE ROWS IN SYMBOLS.
+%
+for n=1:M,
+ % ONLY TWO LEGAL NEXT STATES EXIST, SO THE LOOP IS UNROLLED
+ %
+ m=NEXT(n,1);
+
+ INCREMENT(n,m)=real((conj(SYMBOLS(m,1))*SYMBOLS(n,:))*Rhh(2:Lh+1).');
+ m=NEXT(n,2);
+
+ INCREMENT(n,m)=real((conj(SYMBOLS(m,1))*SYMBOLS(n,:))*Rhh(2:Lh+1).');
+end
+
personal git repositories of Harald Welte. Your mileage may vary