- 締切済み
matlabでのwavwlet解析について
matlabでのwavwlet解析を行いたいと思っているのですが、うまくできません。 式的には以下でいいと思うのですが、 wavelet = ifft[fft(g(t))*fft(fai(t)] g(t):信号、fai(t):複素モアレー関数。 複素モアレー関数をどうやってmatlabで関数にすればいいいのかわかりません。複素モアレー関数には変数としてt',a(1/aが周波数に相当)の二つがあると思うのですが'Function'を使って関数にする場合どうやってすればいいのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- m0r1_2006
- ベストアンサー率36% (169/464)
回答No.1
fft(fai(t)) の部分を関数で書きましょう. 複素morlet のフーリエ変換 psi_hat を数式で計算して. %%%% 周波数方向の上限下限 [wmin, wmax] %%%% 周波数刻み dw Omega = wmin:dw:wmax; %% 周波数空間全体 function [Z] = fftcmorlet(a, Omega) %%%% スケール a Omega = wmin:dw:wmax %% 周波数空間全体 Z = psi_hat(a*Omega); %% 複素morlet のフーリエ変換 psi_hat Z = Z / norm(Z); %% L2 ノルムの正規化 wavelet toolbox でも使えば.
補足
回答有難うございます。 functionを使わずに作ってみたんですけど、出てくる結果がなんか違うようなんですよね。もしwaveletに詳しいのであれば助言お願いします。 clear all d = 0.1; %% 周波数刻み w = 0.1:d:10;%%%周波数 a = 1./w;%%%スケール N = 100; t =(1/d)*(0.1:N)/N; g = sin(2*pi*3*t-5); %%信号(例) g = meshgrid(g); %%cmorlet関数が二次元の行列であるため行列に変換 fftg = fft2(g,N,N); %%%二次元のフーリエ変換。 [ww,aa] = meshgrid(w,a); Z = sqrt(aa).*exp(2*pi*ww.*aa-((2*pi)^2)/2-(1/2)*(ww.*aa).^2);%%%%cmorlet関数 F = fftg.*Z; ifftF = ifft2(F,N,N); ifftFmag = abs(ifftF); [tt,aa] = meshgrid(t,a); surf(tt,aa,ifftFmag);