2

1000 個のセンサー読み取り値 (サンプリング レート = 10Hz) のリストがあります。

sensor = [100,100,200,...,100]

ウィンドウ関数 (つまり、カイザー ウィンドウ) を使用して、このリストのサブセットのスペクトル分析を取得する必要があります。

したがって、 FFTがこのデータの複数のサブサンプラー (100 の結果としましょう) で計算され、50 の読み取り値の変位ウィンドウ(各制限で 25 の読み取り値が重複) で計算され、20 の結果が得られるリストを取得したいと考えています。周波数領域で。

次に、3 つのバンド (1 ~ 2Hz、2 ~ 4Hz、4 ~ 8Hz としましょう) にバンドパス重み付け関数を適用します。

最終結果は2D listである必要があります。最初の次元は「バンド」であり、2 番目の次元はそのバンドの振幅 (実部) の値を表します。

bands = [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],[1,...],[1,...]]

誰でも私を助けることができますか?

編集済み:わかりました、問題を分割しましょう:

1) list=[1,2,3,4,5,6,7,8] が与えられた場合。この種の 2D リストを作成するにはどうすればよいですか: list2D = [[1,2,3,4],[3,4,5,6],[5,6,7,8]]? これは、変位ウィンドウを作成する最初の問題です。

2) この list2D の各要素 (1 番目の次元) について: ウィンドウ関数 (中間値を「考慮」する FFT) と一緒に FFT 分析を行うにはどうすればよいですか?

3) 各 FFT 結果について、スペクトルの実部からの離散結果が周波数間隔の平均値に変換されるようなバンドパス フィルターを作成するにはどうすればよいですか?

4

1 に答える 1

4

パート 1) と 2) については、次の例をご覧ください。

import numpy as np
import scipy as sci
from scipy.signal import blackman
from scipy.signal import hanning

a = np.array([1,2,3,4,5,6,7,8])


b = np.empty([2, int(len(a)/2)], dtype=complex)
b[0,:] = a[0:int(len(a)/2)]
b[1,:] = a[(int(len(a)/2)-1):-1]

res = np.empty([2, int(len(a)/2)], dtype=complex)

# create blackman window
w = blackman(int(len(a)/2))
# you could also use a hanning window:
# w = hanning(int(len(a)/2))

for i in range(2):
    res[i,:] = sci.fftpack.fft(b[i,:] * w)

これはあなたが望んでいたものですか?パート 3) については、何が必要なのかよくわかりません。

于 2014-05-26T20:19:28.790 に答える