ライブラリ "DSP_MultirateLinearphase" の使用例.

Dependencies:   mbed DSP_MultirateLinearphase

Revision:
0:84e2360c7442
Child:
2:4fab7f655600
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 25 06:19:22 2020 +0000
@@ -0,0 +1,57 @@
+//--------------------------------------------------------------------------
+//  NUCLEO-F446RE で,アナログ信号の入出力の際に,出力の標本化周波数を,
+//  入力の標本化周波数の4倍にするクラス MultirateLiPh の使用例
+//
+//  MultirateLiPh クラスは出力の補間フィルタに直線位相 FIR フィルタを使用
+//
+//  処理の内容:AD 変換器からの入力をそのまま DA 変換器に出力する
+//
+//  2020/05/25, Copyright (c) 2020 MIKAMI, Naoki
+//--------------------------------------------------------------------------
+
+#include "MultirateLiPh.hpp"    // マルチレート処理用
+
+// 補間フィルタの係数として,デフォルト以外の係数を使う場合の例:
+//      以下の #define 文のいずれかを有効にする
+//      "coefficients.hpp" のインクルードを有効にする
+//#define FIR_INTERPOLATOR_ORDER96    // 96 次のフィルタで補間を行う場合
+//#define FIR_INTERPOLATOR_ORDER4     // 補間を行わない場合
+//#include "coefficients.hpp"     // デフォルト以外の補間用フィルタの係数
+
+using namespace Mikami;
+#pragma diag_suppress 870   // マルチバイト文字使用の警告抑制のため
+
+const int FS_ = 10;         // 入力の標本化周波数: 10 kHz
+
+// 出力標本化周波数を4倍にするオブジェクト
+MultirateLiPh myAdDa_;
+
+// 以下の us_ の数値はデフォルトの補完フィルタを使った場合
+//int us_ = 50;   // OK
+//int us_ = 90;   // OK
+//int us_ = 99;   // NG
+//int us_ = 95;   // NG
+//int us_ = 92;   // NG
+int us_ = 91;   // OK
+
+// ソフトウェア割込みに対する割込みサービス・ルーチン
+void SwiIsr()
+{
+    float sn = myAdDa_.Input();
+    //---------------------------------------------------------
+    // 実際には,ここにディジタルフィルタなどの処理を記述する
+    wait_us(us_);   // 信号処理に許される実行時間を見積もるため
+                    // 実際の信号処理では,この関数は不要
+    //---------------------------------------------------------
+    myAdDa_.Output(sn);
+}
+
+int main()
+{
+    printf("\r\nADC の入力をそのまま DAC に出力する際にマルチレート処理を利用する例\r\n");
+    printf("wait: %d [μs]\r\n", us_);
+
+    myAdDa_.Start(FS_, SwiIsr); // 標本化を開始する
+
+    while (true) {}
+}
\ No newline at end of file