From 7ebd609b4f4139f4dac8627ac00678de89ef4575 Mon Sep 17 00:00:00 2001 From: Andreas Bogk Date: Thu, 15 Jan 2009 17:17:29 +0100 Subject: Viterbi generator by Piotr Krysik. --- viterbi_generator/tests/utils/make_increment.m | 70 ++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 viterbi_generator/tests/utils/make_increment.m (limited to 'viterbi_generator/tests/utils/make_increment.m') 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 + -- cgit v1.2.3