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

Dependencies:   mbed DSP_MultirateLinearphase

Revision:
3:d52ea58bea85
Parent:
2:4fab7f655600
Child:
4:d679eeac4937
--- a/main.cpp	Tue May 26 12:22:48 2020 +0000
+++ b/main.cpp	Tue Jun 16 09:49:23 2020 +0000
@@ -6,43 +6,46 @@
 //
 //  処理の内容:AD 変換器からの入力をそのまま DA 変換器に出力する
 //
-//  2020/05/26, Copyright (c) 2020 MIKAMI, Naoki
+//  2020/06/16, Copyright (c) 2020 MIKAMI, Naoki
 //--------------------------------------------------------------------------
 
 #include "MultirateLiPh.hpp"    // マルチレート処理用
 
 // 補間フィルタの係数として,デフォルト以外の係数を使う場合の例:
 //      以下の #define 文のいずれかを有効にする
-//      "coefficients.hpp" のインクルードを有効にする
-//#define FIR_INTERPOLATOR_ORDER96    // 96 次のフィルタで補間を行う場合
+#define FIR_INTERPOLATOR_ORDER96    // 96 次のフィルタで補間を行う場合
 //#define FIR_INTERPOLATOR_ORDER4     // 補間を行わない場合
-//#include "coefficients.hpp"     // デフォルト以外の補間用フィルタの係数
+#include "coefficients.hpp"     // デフォルトの補間用フィルタの係数を使う場合は不要
 
 using namespace Mikami;
 #pragma diag_suppress 870   // マルチバイト文字使用の警告抑制のため
 
 const int FS_ = 10;         // 入力の標本化周波数: 10 kHz
 
-// 出力標本化周波数を4倍にするオブジェクト
-MultirateLiPh myAdDa_;
+// 出力標本化周波数を4倍にするオブジェクト(デフォルトの補間フィルタ係数を使う場合)
+MultirateLiPh myAdDa_(FS_);
+// 次の行はデフォルト以外の補間用フィルタ係数を使う場合
+//MultirateLiPh myAdDa_(FS_, ORDER_, HK1_, HK2_, HK3_);
 
-// 以下の us_ の数値はデフォルトの補間フィルタを使った場合
+// 信号処理に割り当てられる処理時間を見積もるために使用
+// 標本化周波数が 10 kHz の場合
 //int us_ = 50;   // OK
-//int us_ = 90;   // OK
+int us_ = 90;   // 72 次: OK, 96 次: OK
 //int us_ = 99;   // NG
 //int us_ = 95;   // NG
 //int us_ = 92;   // NG
-int us_ = 91;   // OK
+//int us_ = 91;   // 72 次: OK, 96 次: NG
 
 // ソフトウェア割込みに対する割込みサービス・ルーチン
 void SwiIsr()
 {
     float sn = myAdDa_.Input();
-    //---------------------------------------------------------
+    //-----------------------------------------------------------------
     // 実際には,ここにディジタルフィルタなどの処理を記述する
     wait_us(us_);   // 信号処理に許される実行時間を見積もるため
+                    // ここの処理時間が長すぎる場合はおかしな出力波形になる
                     // 実際の信号処理では,この関数は不要
-    //---------------------------------------------------------
+    //-----------------------------------------------------------------
     myAdDa_.Output(sn);
 }
 
@@ -51,7 +54,7 @@
     printf("\r\nADC の入力をそのまま DAC に出力する際にマルチレート処理を利用する例\r\n");
     printf("wait: %d [μs]\r\n", us_);
 
-    myAdDa_.Start(FS_, SwiIsr); // 標本化を開始する
+    myAdDa_.Start(SwiIsr);  // 標本化を開始する
 
     while (true) {}
 }
\ No newline at end of file