annotate userProgramsTim/mellin_trafo.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents
children
rev   line source
rmeddis@38 1 function out = mellin_trafo(inx,iny)
rmeddis@38 2
rmeddis@38 3 %This function computes the Mellin Transformation of a one-dimensional
rmeddis@38 4 %Signal in analytical terms given as
rmeddis@38 5 %
rmeddis@38 6 % S(p)=Integral from 0 to infty of s(t) t^(p-1)dt
rmeddis@38 7 % Which equals
rmeddis@38 8 % S(c) = Integral from -Infty to Infty s(t)*exp(j*c*log(t))d(log(t))
rmeddis@38 9 %
rmeddis@38 10 % taken from Irino and Patterson, Speech Communication 2002 Eq. (1) and (3)
rmeddis@38 11 % Tim Juergens, September 2011
rmeddis@38 12 %
rmeddis@38 13
rmeddis@38 14 %Resample the Signal onto a log(t) axis
rmeddis@38 15 minimalx=min(inx);
rmeddis@38 16 maximalx=max(inx);
rmeddis@38 17 logarithmicx= exp([log(minimalx):(log(maximalx)-log(minimalx))/length(inx):log(maximalx)]);
rmeddis@38 18 logarithmicy= interp1(inx,iny,logarithmicx,'linear','extrap');
rmeddis@38 19 %figure, semilogx(logarithmicx,logarithmicy);
rmeddis@38 20
rmeddis@38 21 %Absolute of the inverse Fourier-Transform of the resampled signal
rmeddis@38 22 out = abs(ifft(logarithmicy));
rmeddis@38 23 %figure, plot(out(1:40));
rmeddis@38 24
rmeddis@38 25
rmeddis@38 26 %%just to show that the mellin transform results in invariable patterns if
rmeddis@38 27 %%the formants are a constant ratio
rmeddis@38 28 % frequencies_short = [1:8:8000];
rmeddis@38 29 % frequencies_long = [1:10:10000];
rmeddis@38 30 % Intervals_long = 1./frequencies_long;
rmeddis@38 31 % Intervals_short = 1./frequencies_short;
rmeddis@38 32 % contoursin = sin(2*pi*0.00015.*frequencies_long).^2
rmeddis@38 33 % figure, plot(frequencies_long,contoursin), hold on, plot(frequencies_short,contoursin,'r')
rmeddis@38 34 % xlabel('Frequency (Hz)')
rmeddis@38 35 % ylabel('Rate (arb. units)')
rmeddis@38 36 % figure, semilogx(Intervals_long,contoursin), hold on, plot(Intervals_short,contoursin,'r')
rmeddis@38 37 % xlabel('Interval (s)')
rmeddis@38 38 % ylabel('Rate (arb. units)')
rmeddis@38 39 % m1 = mellin_trafo(Intervals_long,contoursin);
rmeddis@38 40 % m2 = mellin_trafo(Intervals_short,contoursin);
rmeddis@38 41 % figure, plot(m1(1:40)), hold on, plot(m2(1:40),'r');
rmeddis@38 42 % xlabel('Mellin variable c');
rmeddis@38 43 % ylabel('Magnitude');
rmeddis@38 44
rmeddis@38 45