⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmt.m

📁 小波变换工具箱
💻 M
字号:
function [mellin,beta]=fmt(X,fmin,fmax,N);%FMT    Fast Fourier Mellin Transform.%       [MELLIN,BETA]=FMT(X,FMIN,FMAX,N) computes the Fast Mellin%       Transform of signal X.%%       X : signal in time (Nx=length(X)).%       FMIN,FMAX : respectively lower and upper frequency bounds of %        the analyzed signal. These parameters fix the equivalent %        frequency bandwidth (expressed in Hz). When unspecified, you%        have to enter them at the command line from the plot of the%        spectrum. FMIN and FMAX must be >0 and <=0.5.         %       N : number of analyzed voices. N must be even%				 (default : automatically determined).%       MELLIN : the N-points Mellin transform of signal S.%       BETA : the N-points Mellin variable.%%       Examples :   %        sig=altes(128,0.05,0.45); %	 [MELLIN,BETA]=fmt(sig,0.05,0.5,128);%        plot(BETA,real(MELLIN));%%       See also IFMT, FFT, IFFT.%       P. Goncalves 9-95 - O. Lemoine, June 1996. %       Copyright (c) 1995 Rice University - CNRS (France) 1996.%%       ------------------- CONFIDENTIAL PROGRAM -------------------- %       This program can not be used without the authorization of its%       author(s). For any comment or bug report, please send e-mail to %       f.auger@ieee.org if (nargin == 0), error('At least one parameter required');end;[xrow,xcol] = size(X);if (nargin==2), disp('FMIN will not be taken into account. Determine it with FMAX'); disp('     from the following plot of the spectrum.'); elseif nargin==3, N=[];elseif (nargin==4 & rem(N,2)~=0), error('N must be even');end;if (xcol==0)|(xcol>2), error('X must have one or two columns');endMt = length(X); Z  = hilbert(real(X));M  = (Mt+rem(Mt,2))/2;if nargin<=2,                                   % fmin,fmax,N unspecified STF = fft(fftshift(X)); Nstf=length(STF); sp = (abs(STF(1:Nstf/2))).^2; Maxsp=max(sp); f = linspace(0,0.5,Nstf/2+1) ; f = f(1:Nstf/2); plot(f,sp) ; grid; xlabel('Normalized frequency'); title('Analyzed signal energy spectrum'); indmin=min(find(sp>Maxsp/1000)); indmax=max(find(sp>Maxsp/1000)); fmindflt=max([0.001 0.05*fix(f(indmin)/0.05)]); fmaxdflt=0.05*ceil(f(indmax)/0.05); txtmin=['Lower frequency bound [',num2str(fmindflt),'] : ']; txtmax=['Upper frequency bound [',num2str(fmaxdflt),'] : ']; fmin = input(txtmin); fmax = input(txtmax); if fmin==[], fmin=fmindflt; end if fmax==[], fmax=fmaxdflt; endendif fmin >= fmax error('FMAX must be greater or equal to FMIN');elseif fmin<=0.0 | fmin>0.5, error('FMIN must be > 0 and <= 0.5');elseif fmax<=0.0 | fmax>0.5, error('FMAX must be > 0 and <= 0.5');endB = fmax-fmin;       		% Bandwidth of the signal XR = B/((fmin+fmax)/2);		% Relative bandwidth of XNq= ceil((B*Mt*(1+2/R)*log((1+R/2)/(1-R/2)))/2);Nmin = Nq-rem(Nq,2);Ndflt = 2^nextpow2(Nmin);if nargin<=2, Ntxt=['Number of frequency samples (>=',num2str(Nmin),') [',num2str(Ndflt),'] : ']; N = input(Ntxt);endif N~=[], if (N<Nmin),  dispstr=['Warning : the number of analyzed voices (N) should be >= ',num2str(Nmin)];  disp(dispstr); endelse N=Ndflt; end% Geometric sampling of the analyzed spectrumNo2 = N/2;k = (1:No2);q = (fmax/fmin)^(1/(No2-1));t = (1:Mt)-M-1;geo_f  = fmin*(exp((k-1).*log(q)));tfmatx = zeros(Mt,N);tfmatx = exp(-2*j*pi*t'*geo_f);ZS = Z.'*tfmatx; ZS(No2+1:N) = zeros(1,N-No2);% Mellin transform computation of the analyzed signalp = 0:(N-1);L = log(fmin)/log(q);mellin = N*log(q)*fftshift(ifft(ZS)).*exp(j*2*pi*L*(p/N-1/2));beta   = (p/N-1/2)./log(q);% NormalizationSP = fft(hilbert(real(X))); indmin = 1+round(fmin*(xrow-2));indmax = 1+round(fmax*(xrow-2));SPana = SP(indmin:indmax);nu = (indmin:indmax)'/N; SPp = SPana./nu;Normsig = sqrt(SPp'*SPana);mellin = mellin*Normsig/norm(mellin);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -