こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

matlabでのwavwlet解析について

matlabでのwavwlet解析を行いたいと思っているのですが、うまくできません。
式的には以下でいいと思うのですが、
wavelet = ifft[fft(g(t))*fft(fai(t)]
g(t):信号、fai(t):複素モアレー関数。

複素モアレー関数をどうやってmatlabで関数にすればいいいのかわかりません。複素モアレー関数には変数としてt',a(1/aが周波数に相当)の二つがあると思うのですが'Function'を使って関数にする場合どうやってすればいいのでしょうか?

投稿日時 - 2006-12-28 14:28:40

QNo.2630682

暇なときに回答ください

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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 でも使えば.

投稿日時 - 2006-12-29 15:46:42

補足

回答有難うございます。
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);

投稿日時 - 2006-12-30 17:32:09

あなたにオススメの質問