matthiasm@8: function y=logsum(x,d) matthiasm@8: %LOGSUM logsum(x,d)=log(sum(exp(x),d)) matthiasm@8: % d gives dimension to sum along matthiasm@8: matthiasm@8: % Copyright (C) Mike Brookes 1998 matthiasm@8: % matthiasm@8: % Last modified Mon Oct 12 15:47:25 1998 matthiasm@8: % matthiasm@8: % VOICEBOX is a MATLAB toolbox for speech processing. Home page is at matthiasm@8: % http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html matthiasm@8: % matthiasm@8: matthiasm@8: if nargin==1 matthiasm@8: d=[find(size(x)-1) 1]; matthiasm@8: d=d(1); matthiasm@8: end matthiasm@8: n=size(x,d); matthiasm@8: if n<=1, y=x; return; end matthiasm@8: s=size(x); matthiasm@8: p=[d:ndims(x) 1:d-1]; matthiasm@8: z=reshape(permute(x,p),n,prod(s)/n); matthiasm@8: matthiasm@8: y=max(z); matthiasm@8: y=y+log(sum(exp(z-y(ones(n,1),:)))); matthiasm@8: matthiasm@8: s(d)=1; matthiasm@8: y=ipermute(reshape(y,s(p)),p); matthiasm@8: