4

離散時間信号 (サンプリング ステップ = 0.001 秒) を使用して、時間-周波数信号を描画するために検索します。私は Python とライブラリ Scipy.signal を使用しています。行列を返す関数 cwt(data, wavelet, widths) を使用して、複雑な morlet ウェーブレット (または gabor ウェーブレット) で連続ウェーブレット変換を行います。残念ながら、この使用法に関するドキュメントはあまりありません。私が見つけた最高のものは次のとおりです:-これはMatlab用です(同じスケールタイムの結果を見つけようとしています)が、当然同じ機能にアクセスできません-そして、これはウェーブレットパラメーターの詳細なしで、連続ウェーブレット変換とは何かを説明します.

最初のステップ: スケール変換信号を取得します。疑わしいことに、配列の「幅」を可能な異なるスケールの配列に直接関連付けました。スケールじゃないとパラメータの幅が分からないからです。おそらく、「それは現在のウェーブレットの幅です」と言うでしょう! しかし、今でも、幅とスケールをどのようにリンクしているかはわかりません…ScipyのMorletのドキュメントでは、リンクは次のようになります: "s: Scaling factor, windowed from -s*2*pi to +s*2 *pi" ということで、 width = 4*pi*scale (幅 = ウィンドウの幅) と考えました。しかし、ウェーブレットを描画すると、スケールが大きくなり、ウェーブレットの視覚的な幅が狭くなります...

私の2番目の問題は、頻度と同等のものを見つけて描くことです。文献には、Fa = Fc / (s*delta) という式があります。ここで、Fa は最終的な周波数、Fc はウェーブレットの中心周波数 (Hz)、s はスケール、delta はサンプリング周期です。したがって、スケール (幅とのリンクが見つかった場合) とデルタ (=0.001 秒) については問題ありませんが、ウェーブレットの中心周波数ではより複雑になります。scipy のドキュメントでは、次のことがわかります。「このウェーブレット [morlet ウェーブレット] の基本周波数 (Hz) は、f = 2*s*w*r / M で与えられます。ここで、r はサンプリング レートです [s はここではスケーリング係数、ウィンドウ化されています。 -s*2*pi から +s*2*pi まで。デフォルトは 1 です。w 幅; M はウェーブレットの長さ]。中心周波数だと思いますよね?

ありがとうございました

ここで、cwt() の私の remanied コード:

def MyCWT(data, wavelet, scales):

output = zeros([len(scales), len(data)], dtype=complex)

for ind, scale in enumerate(scales):

    window = scale*4*pi*10#Number of points to define correctly the wavelet
    waveletLength = min(window, len(data))#Number of points of the wavelet
    wavelet_data = wavelet(waveletLength, s=scale)#Need to precise w parameter???

    #To see the wavelets:
    plot(wavelet_data)
    xlabel('time (10^-3 sec)')
    ylabel('amplitude')
    title('Morlet Wavelet for scale='+str(scale)+'\nwidth='+str(window))
    show()

    #Concolution to calculate the current line for the current scale:
    z = convolve(data, wavelet_data, mode='same')

    i = 0
    for complexVal in z:
        output[ind][i] = complex(complexVal.real, complexVal.imag)         
        i+=1

return output
4

1 に答える 1