ライブラリ "DSP_MultirateLinearphase" の使用例.
Dependencies: mbed DSP_MultirateLinearphase
main.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2020-12-20
- Revision:
- 11:fd030cd609ad
- Parent:
- 10:d8a0c3bbab09
- Child:
- 12:ef52fea50d5e
File content as of revision 11:fd030cd609ad:
//-------------------------------------------------------------------------- // NUCLEO-F446RE で,アナログ信号の入出力の際に,出力の標本化周波数を, // 入力の標本化周波数の4倍にするクラス MultirateLiPh の使用例 // // MultirateLiPh クラスは出力の補間フィルタに直線位相 FIR フィルタを使用 // // 処理の内容:AD 変換器からの入力をそのまま DA 変換器に出力する // // 2020/12/20, Copyright (c) 2020 MIKAMI, Naoki //-------------------------------------------------------------------------- #include "MultirateLiPh.hpp" // マルチレート処理用 // 補間フィルタの係数として,デフォルト以外の係数を使う場合の例: // 以下の #define 文のいずれかを有効にする //#define FIR_INTERPOLATOR_ORDER94 // 94 次のフィルタで補間を行う場合 //#define FIR_INTERPOLATOR_ORDER2 // 補間を行わない場合 #include "coefficients.hpp" // デフォルトの補間用フィルタの係数を使う場合は不要 using namespace Mikami; #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため const float FS_ = 10; // 入力の標本化周波数: 10 kHz // 出力標本化周波数を4倍にするオブジェクト(デフォルトの補間フィルタ係数を使う場合) MultirateLiPh myAdDa_(FS_); // 次の行はデフォルト以外の補間用フィルタ係数を使う場合 //MultirateLiPh myAdDa_(FS_, ORDER_, HK1_, HK2_, HK3_); // 信号処理に割り当てられる処理時間を見積るために使用 // 標本化周波数が 10 kHz の場合 //int us_ = 50; // OK int us_ = 90; // 70 次: OK, 94 次: OK //int us_ = 91; // 70 次: OK, 94 次: NG //int us_ = 92; // 70 次: NG, 94 次: NG // ソフトウェア割込みに対する割込みサービス・ルーチン 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(&SwiIsr); // 標本化を開始する while (true) {} }