レーザー ロック ボックスのローパス フィルターのコーナー周波数を低く設定できますか?
- Moku:Lab
- Moku:Go
-
Moku:Pro
Moku:Proに関するよくある質問 Moku:Pro波形発生器 Moku:Proタイム&周波数アナライザ Moku:Proロジックアナライザ/パターンジェネレーター Moku:Proレレーザーロックボックス Moku:Proロックインアンプ Moku:Proスペクトラムアナライザ Moku:Proデータロガー Moku:Pro任意波形発生器 Moku:Proマルチ機器モード Moku:Pro位相計 Moku:Pro FIRフィルタービルダー Moku:Pro PIDコントローラー Moku:Proオシロスコープ Moku:Pro周波数応答アナライザ Moku:Proデジタルフィルターボックス
- Python API
- MATLAB API
- 任意波形発生器
- データロガー
- デジタルフィルターボックス
- FIR フィルタ ビルダー
- 周波数応答アナライザー
- レーザーロックボックス
- ロックインアンプ
- オシロスコープ
- 位相計
- PIDコントローラー
- スペクトラムアナライザー
- 時間と周波数アナライザー
- 波形発生器
- ロジックアナライザ/パターンジェネレーター
- マルチ機器モード
- Mokuクラウドコンパイル
- Mokuに関するよくある質問
- LabVIEW API
Moku:Labレーザー ロック ボックスは、2 段の 2 次 IIR フィルターを使用します。iPad アプリでは、フィルターはデフォルトで 1 段または 2 段の 2 次フィルターのみになります。計算中のビット数が限られているため、コーナーは約 1 kHz に制限されます。コーナー周波数が低いフィルターを取得するには、1 Hz 以下で動作する 2 段の 1 次フィルターを手動でロードできます。
カスタム フィルターを手動で読み込むには、フィルター コンフィギュレーターでカスタム フィルター タイプを選択し、次のスクリーンショットに示すように、SD カード、クリップボード、またはマイ ファイル内の .txt ファイルからフィルター係数を読み込みます。

.txt ファイルには、次の形式の 2 行 6 列が必要です。
| s1 | 0.1 ... | b1.1 | b2.1 | a1.1 | a2.1 |
| s2 | 0.2 倍 | b1.2 | b2.2 | a1.2 | a2.2 |
s1 と s2 はステージ 1 とステージ 2 の全体的なゲインを表します。bx.1 から ax.1 はステージ 1 のフィルター係数を表し、bx.2 から ax.2 はステージ 2 のフィルター係数を表します。これらのフィルター係数は、Python scipy または Signal Processing Toolbox を使用した MATLAB によって生成できます。ここでは、.txt ファイルを生成する Python スクリプトを提供します。
輸入 ナンピー として いいえ
輸入 matplotlib.pyplot として プラス
から スキピー 輸入 信号
輸入 数学
定義 主要():
コーナー周波数 = 1 #で ヘルツ
フィルタータイプ = 1 #1 のために 初め 注文 2段階、 2 のために 2番 注文 1段
generate_filter_array(コーナー周波数、フィルタータイプ、 プロット = 間違い)
定義 フィルター配列を生成します(コーナー周波数、フィルター順序、プロット):
サンプルレート = 31.25e6
正規化されたコーナー = コーナー周波数 / (サンプルレート / 2)
もし フィルター順序 == 1:
b、 1つの = シグナル.バター(1, 正規化されたコーナー、 '低い'、 アナログ = 間違い)
1つの = np.append(a,0)
b = np.append(b,0)
gen_coe_array(b, 、 filter_order、str(コーナー周波数)+'Hz'+str(filter_order)+'order_filter')
もし プロット == 真実:
plot_fra(b,a,フィルター順序)
エリフ フィルター順序 == 2:
b、 1つの = シグナル.バター(2, 正規化されたコーナー、 '低い'、 アナログ = 間違い)
gen_coe_array(b,a,filter_order,str(コーナー周波数)+'Hz'+str(filter_order)+'order_filter')
もし プロット == 真実:
plot_fra(b,a,フィルター順序)
定義 plot_fra(b,a,順序):
w、 h = 信号.freqz(b, 、 働く = 2048*2048)
もし 注文 == 1:
h = np.multiply(h,h)
plt.semilogx(w*sample_rate/math.pi/2, 20 * np.log10(np.absolute(h)))
plt.title('バターワース フィルター 頻度 応答')
plt.xlabel('頻度 [Hz]')
plt.ylabel('振幅 [dB]')
plt.grid(which='両方', 軸='両方')
plt.show()
定義 gen_coe_array(b,a,順序,名前):
もし 注文 == 1:
係数配列 = [[1.0, b[0], b[1]、 0, a[1]、 0],
[1.0, b[0], b[1]、 0, a[1]、 0]]
エリフ 注文 == 2:
係数配列 = [[1.0, b[0], b[1]、 b[2]、 a[1]、 a[2]]、
[1.0, 1.0、 0.0, 0.0, 0.0, 0.0]]
np.savetxt(名前 +'.txt',係数配列, デリミタ = ',')
もし __名前__ == '__主要__':
主要()