スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Scilabで連続ウェーブレット変換-5 (Matplotで表示を見やすく)

こんにちは。
今回は、表示を見やすくいじってみます。
データは前回と同じで、生成したデータを使っています。

//ウェーブレット関数
wname = 'cmor';

//サンプリング周波数
fs=100;

//時間軸生成
t = [0:1/fs:10];

//データ生成
x=sin((2*%pi.*(t)).*t);
x=x+x($:-1:1);

// スケーリング列
scales = 2^[1:1/10:6];
coef=cwt(x,scales,wname);

//ウェーブレット係数を画像に変換
cmap_n=512;
cmap=jetcolormap(cmap_n);
n2=int(abs(coef)/max(abs(coef))*(cmap_n-1)+1);

//表示
scf(0);clf;f=gcf();f.color_map=cmap;
ca=gca();
ca.axes_reverse(2)="on";
ca.tight_limits = "on";
Matplot(n2($:-1:1,:));

xlabel("Samples");
ylabel("Scale");

//scf();plot(t,x);


i.jpg

【前回からの変更点】
・ウェーブレット関数を「cmor」に変更
  cmorはComplex Morlet関数のことで、複素ウェーブレット関数です。
  複素ウェーブレット関数は、位相と振幅の情報を別々に得られるので、表示が見やすくなります。

・表示する方法をMatplotに変更
  前回までは、SWTの関数cwtplotを使っていましたが、今回はScilab標準の関数Matplotを使っています。
  そうすることで、表示をいじりやすくなります。
  
・Y軸が上下反転
  Y軸の上が高周波であるほうがわかりやすいので、上下反転するようにしています。

・カラーマップを「jet」に変更
  個人的にカラーマップはjetが好きです

・スケーリング列を2の冪数になるように生成
  スケーリング列を 2^[1:1/10:6] というように、2の冪数で生成しています。
  これは、好みの部分もありますが、ウェーブレット関数のオーバーラップが均等になり、
  冗長性が均一になる効果があります。
  実際の物理現象を理解するうえでも分かりやすい表示が得られやすいです。


7/6追記
上記のコードで表示した場合、縦軸にでている数値に意味はありません。
スケールと縦軸を一致させる例は次の記事でのせています。
スポンサーサイト

コメントの投稿

非公開コメント

はじめまして。

はじめまして。

私も最近、信号解析用ツールとしてScilabを用いたウェーブレット解析に取り組んでおりまして、このブログを参考にさせて頂いています。

そこで一つ質問があります。スケーリング列をこの記事で紹介されていたように冪数の列にした場合、スケールと周波数を対応させるscal2frqの入力はどのようにすればいいのでしょうか?

よろしくお願い致します。

質問ありがとうございます

scal2frqを使えば普通に周波数に変換できますよ。
また、scal2frqはベクトルを入力できますので、
下記のように一行で書くこともできます。


scal2frq(scales,wname,1/fs)

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

No title

sy_f8です。

質問です。
scilabでウェーブレット解析を行い縦軸が周波数、横軸が時間の図をだしました。
そして図の、ある周波数のところを数字で表示させたいのですがどのようなコマンドを使えばよいのでしょうか。

書き込みありがとうございます

>マザーウェーブレットを任意に登録し、連続ウェーブレット変換を行うことは可能でしょうか?

これはどうもできないみたいです。
私もその機能は必要だとは思うのですが、このツールボックスだけではできないようです。


>図の、ある周波数のところを数字で表示させたいのですがどのようなコマンドを使えばよいのでしょうか。

その内容で今記事を書いているところです。週末には更新できると思います。
全記事表示リンク

全ての記事を表示する

最新記事
最新コメント
最新トラックバック
カテゴリ
検索フォーム
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。