-1

私は Python で DSP を作ろうとしています。私はこのサイトのような初心者ですhttps://mbed.org/cookbook/FIR-Filte 1. Python で係数を探しますが、FIR バンドパスを使用して係数を見つける方法ハミングウィンドウ、例を挙げてもらえますか? 2.ハミングウィンドウを使用してFIRバンドパスでpythonを使用してDSPに係数を実装する方法(ラズベリーパイ(最初のオプション)またはArduinoでDSPを実装したい)

私は英語が苦手です、私が話していることを理解していただければ幸いです、ありがとう

4

1 に答える 1

0

FIR フィルターの設計には、いくつかの手法とアプローチがあります。ただし、f_c Hz (サンプリング レート sr Hz) を中心とする n_pts ポイントを持つ単純なバンドパス フィルターが必要な場合は、次のようにします。

import numpy as np
import scipy.signal
fir_coeff = np.hanning(n_pts)*np.cos(2.*np.pi*f_c/sr*np.arange(n_pts))
fir_coeff /= np.sum(np.hanning(n_pts))
filtered_signal = scipy.signal.lfilter(fir_coeff, 1.0, signal)

これは妥当なバンドパス フィルターで、Q は約 n_pts/(sr/f_c) です。フィルタ長 n_pts を増やすことで、Q を増やします (より狭いバンドパス フィルタにします)。

低電力ハードウェアにフィルターを実装しようとしている場合は、FIR の代わりに IIR フィルターを使用する方がはるかに優れていることに注意してください (それらが問題に適している場合)。したがって、同様のフィルターを次のように実装できます。

# Q = n_pts/(sr/f_c) or defined some other way
w_c = 2*pi*f_c/sr
beta = np.cos(w_c)
BW = w_c / Q
alpha = (1. - np.sin(BW))/np.cos(BW)
G = (1. - alpha)/2.
filtered_signal = scipy.signal.lfilter([G, 0, -G], [1, -beta*(1+alpha), alpha], signal)

適度に狭いフィルター (n_pts = 33 程度) の場合、これは 1 桁速くなるはずです。

(式はhttp://www.ee.columbia.edu/~dpwe/e4810/lectures/L06-filters.pdfのスライド 14 に基づいています。これは DSP コースで学習するものです)。

于 2014-06-05T16:57:30.390 に答える