質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1598閲覧

swanを用いたウェーブレット変換に関して

teriaa

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/04/27 13:10

https://qiita.com/yukiB/items/59f8484e72bb0471ad47
このサイトを参考に線形チャ-プ信号を対象にswanを用いてwavelet変換を行ったのですが、結果が図のようになりました。実行結果を見たところ5s付近になっても低い周波数の波形が少し含まれているように表現されているのですがなぜでしょうか。
試しにpywaveletsでwavelet変換をしてみたところ、そのようなことは起きませんでした。pywaveletsとswanにはどのような違いがあるかなども教えていただけたら幸いです。

python

1コード 2import numpy as np 3import matplotlib.pyplot as plt 4from swan import pycwt 5 6dt = 0.01 7t = np.arange(0, 5, dt) 8y = np.sin(2 * np.pi *(1 / 2 * t**2 + t)) 9plt.plot(t, y) 10plt.show() 11 12Fs = 1/0.01 13omega0 = 8 14# (1) Freqを指定してcwt 15freqs=np.arange(0.1,20,0.050) 16r=pycwt.cwt_f(y,freqs,Fs,pycwt.Morlet(omega0)) 17rr=np.abs(r) 18 19plt.rcParams['figure.figsize'] = (20, 6) 20fig = plt.figure() 21ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2]) 22ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1) 23ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6]) 24 25ax1.plot(t, y, 'k') 26 27img = ax2.imshow(np.flipud(rr), extent=[0, 5, freqs[0], freqs[-1]], 28 aspect='auto', interpolation='nearest') 29 30fig.colorbar(img, cax=ax3) 31 32plt.show()

swanによる結果

pywaveletsによる結果

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/04/27 22:32 編集

> 5s付近になっても低い周波数の波形が少し含まれているように表現されているのですがなぜでしょうか。 https://www.ms.u-tokyo.ac.jp/lmsr/pdf/2019-11.pdf の5ページの最後の行から6ページにかけての「cone of influence (COI)」の説明に書かれてるように、左右の端に近いところは不正確になります https://jp.mathworks.com/help/wavelet/ug/boundary-effects-and-the-cone-of-influence.html の最初の図では、色を変えて表示してるので分かりやすいと思います 周波数が低いと、不正確な範囲が広くなります その不正確になる範囲内なのではないですかね > pywaveletsでwavelet変換をしてみたところ、そのようなことは起きませんでした。 詳細確認してませんが、左右の端(入力データの始点と終点)よりも外のデータの扱いが違うのかも
jbpb0

2022/04/28 00:36 編集

不正確になる範囲内なのかを確認したければ、 https://jp.mathworks.com/help/wavelet/ug/boundary-effects-and-the-cone-of-influence.html のページの真ん中あたりの「predtimes」の計算式と、そのちょっと下の「predtimes」をプロットしてるところを参考にしてみてください pythonではなくてmatlabのコードですが、簡単なことしかやってないので、よく見たらやってることは分かると思います 【追記】 不正確になる範囲は、使ってるウェーブレットの長さで変わります 上記で紹介した「predtimes」の計算式は、上記Webページで使ってるウェーブレットの条件に合わせてあるので、自分が使ってるウェーブレットの条件に合わせて「cf = 6/(2*pi)」のところを変える必要があります
jbpb0

2022/04/28 06:45 編集

> pywaveletsでwavelet変換をしてみたところ、そのようなことは起きませんでした。 omega0 = 8 ↓ 変更 omega0 = 0.75 くらいにしたら、質問に掲載されてるpywaveletsでの結果の画像の見た目に近くなりました (見た目の比較だけで、数値での比較はしてませんけど)
teriaa

2022/04/28 07:03

いろいろご丁寧にありがとうございます。 omega0に関してなのですが、これは使用するマザーウェーブレットを指定している変数という認識でよろしいでしょうか。代入する値を変えることでマザーウェーブレットにどのような変化が起こるのでしょうか。
jbpb0

2022/04/28 22:34 編集

解析してる波長に対するマザーウェーブレットの長さを決めてます 「omega0」をいろいろ変えながら、下記を実行してみてください xx = np.arange(-10.0, 10.0, 0.001) yy = pycwt.Morlet(omega0).psi(xx) plt.plot(xx, yy.real, xx, yy.imag) plt.show() 上記を実行して表示されるグラフから、「omega0 = 8」の場合のマザーウェーブレットの長さは、振幅がある程度小さくなってるところまで含めたら波長の40倍くらいあることが分かります たとえば2Hzの波長は0.5秒なので、その場合のマザーウェーブレットの長さは 0.5*40=20秒(±10秒) くらいになり、入力データの長さ5秒の全体に影響が広がってしまいます
jbpb0

2022/04/28 12:18 編集

下記を実行して、「pywavelets」のマザーウェーブレットの長さも確認してみてください ただし、「wavelet_type = 'cmor1.5-1.0'」は、質問者さんが実行した条件に合わせて変えてください wavelet_type = 'cmor1.5-1.0' yyy, xxx = pywt.integrate_wavelet(pywt.ContinuousWavelet(wavelet_type), precision=10) plt.plot(xxx, yyy.real, xxx, yyy.imag) plt.show()
teriaa

2022/04/29 05:48

マザーウェーブレットがどうなっているかの描画まで詳しく教えていただき、本当にありがとうございます。
guest

回答1

0

ベストアンサー

pywaveletsでwavelet変換をしてみたところ、そのようなことは起きませんでした。

 

python

1omega0 = 8

↓ 変更

python

1omega0 = 0.75

くらいにしたら、質問に掲載されてるpywaveletsでの結果の画像の見た目に近くなりました
(見た目の比較だけで、数値での比較はしてませんけど)

投稿2022/05/09 07:05

編集2022/05/09 07:08
jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問