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

Dependencies:   mbed DSP_MultirateLinearphase

Committer:
MikamiUitOpen
Date:
Tue May 26 12:22:48 2020 +0000
Revision:
2:4fab7f655600
Parent:
0:84e2360c7442
Child:
3:d52ea58bea85
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:84e2360c7442 1 //--------------------------------------------------------------------------
MikamiUitOpen 0:84e2360c7442 2 // NUCLEO-F446RE で,アナログ信号の入出力の際に,出力の標本化周波数を,
MikamiUitOpen 0:84e2360c7442 3 // 入力の標本化周波数の4倍にするクラス MultirateLiPh の使用例
MikamiUitOpen 0:84e2360c7442 4 //
MikamiUitOpen 0:84e2360c7442 5 // MultirateLiPh クラスは出力の補間フィルタに直線位相 FIR フィルタを使用
MikamiUitOpen 0:84e2360c7442 6 //
MikamiUitOpen 0:84e2360c7442 7 // 処理の内容:AD 変換器からの入力をそのまま DA 変換器に出力する
MikamiUitOpen 0:84e2360c7442 8 //
MikamiUitOpen 2:4fab7f655600 9 // 2020/05/26, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:84e2360c7442 10 //--------------------------------------------------------------------------
MikamiUitOpen 0:84e2360c7442 11
MikamiUitOpen 0:84e2360c7442 12 #include "MultirateLiPh.hpp" // マルチレート処理用
MikamiUitOpen 0:84e2360c7442 13
MikamiUitOpen 0:84e2360c7442 14 // 補間フィルタの係数として,デフォルト以外の係数を使う場合の例:
MikamiUitOpen 0:84e2360c7442 15 // 以下の #define 文のいずれかを有効にする
MikamiUitOpen 0:84e2360c7442 16 // "coefficients.hpp" のインクルードを有効にする
MikamiUitOpen 0:84e2360c7442 17 //#define FIR_INTERPOLATOR_ORDER96 // 96 次のフィルタで補間を行う場合
MikamiUitOpen 0:84e2360c7442 18 //#define FIR_INTERPOLATOR_ORDER4 // 補間を行わない場合
MikamiUitOpen 0:84e2360c7442 19 //#include "coefficients.hpp" // デフォルト以外の補間用フィルタの係数
MikamiUitOpen 0:84e2360c7442 20
MikamiUitOpen 0:84e2360c7442 21 using namespace Mikami;
MikamiUitOpen 0:84e2360c7442 22 #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため
MikamiUitOpen 0:84e2360c7442 23
MikamiUitOpen 0:84e2360c7442 24 const int FS_ = 10; // 入力の標本化周波数: 10 kHz
MikamiUitOpen 0:84e2360c7442 25
MikamiUitOpen 0:84e2360c7442 26 // 出力標本化周波数を4倍にするオブジェクト
MikamiUitOpen 0:84e2360c7442 27 MultirateLiPh myAdDa_;
MikamiUitOpen 0:84e2360c7442 28
MikamiUitOpen 2:4fab7f655600 29 // 以下の us_ の数値はデフォルトの補間フィルタを使った場合
MikamiUitOpen 0:84e2360c7442 30 //int us_ = 50; // OK
MikamiUitOpen 0:84e2360c7442 31 //int us_ = 90; // OK
MikamiUitOpen 0:84e2360c7442 32 //int us_ = 99; // NG
MikamiUitOpen 0:84e2360c7442 33 //int us_ = 95; // NG
MikamiUitOpen 0:84e2360c7442 34 //int us_ = 92; // NG
MikamiUitOpen 0:84e2360c7442 35 int us_ = 91; // OK
MikamiUitOpen 0:84e2360c7442 36
MikamiUitOpen 0:84e2360c7442 37 // ソフトウェア割込みに対する割込みサービス・ルーチン
MikamiUitOpen 0:84e2360c7442 38 void SwiIsr()
MikamiUitOpen 0:84e2360c7442 39 {
MikamiUitOpen 0:84e2360c7442 40 float sn = myAdDa_.Input();
MikamiUitOpen 0:84e2360c7442 41 //---------------------------------------------------------
MikamiUitOpen 0:84e2360c7442 42 // 実際には,ここにディジタルフィルタなどの処理を記述する
MikamiUitOpen 0:84e2360c7442 43 wait_us(us_); // 信号処理に許される実行時間を見積もるため
MikamiUitOpen 0:84e2360c7442 44 // 実際の信号処理では,この関数は不要
MikamiUitOpen 0:84e2360c7442 45 //---------------------------------------------------------
MikamiUitOpen 0:84e2360c7442 46 myAdDa_.Output(sn);
MikamiUitOpen 0:84e2360c7442 47 }
MikamiUitOpen 0:84e2360c7442 48
MikamiUitOpen 0:84e2360c7442 49 int main()
MikamiUitOpen 0:84e2360c7442 50 {
MikamiUitOpen 0:84e2360c7442 51 printf("\r\nADC の入力をそのまま DAC に出力する際にマルチレート処理を利用する例\r\n");
MikamiUitOpen 0:84e2360c7442 52 printf("wait: %d [μs]\r\n", us_);
MikamiUitOpen 0:84e2360c7442 53
MikamiUitOpen 0:84e2360c7442 54 myAdDa_.Start(FS_, SwiIsr); // 標本化を開始する
MikamiUitOpen 0:84e2360c7442 55
MikamiUitOpen 0:84e2360c7442 56 while (true) {}
MikamiUitOpen 0:84e2360c7442 57 }