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
|