ライブラリ "DSP_MultirateLinearphase" の使用例.
Dependencies: mbed DSP_MultirateLinearphase
main.cpp@12:ef52fea50d5e, 2021-12-22 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Dec 22 08:01:53 2021 +0000
- Revision:
- 12:ef52fea50d5e
- Parent:
- 11:fd030cd609ad
13
Who changed what in which revision?
User | Revision | Line number | New 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 | 12:ef52fea50d5e | 9 | // 2021/12/22, Copyright (c) 2021 MIKAMI, Naoki |
MikamiUitOpen | 0:84e2360c7442 | 10 | //-------------------------------------------------------------------------- |
MikamiUitOpen | 0:84e2360c7442 | 11 | |
MikamiUitOpen | 0:84e2360c7442 | 12 | #include "MultirateLiPh.hpp" // マルチレート処理用 |
MikamiUitOpen | 0:84e2360c7442 | 13 | using namespace Mikami; |
MikamiUitOpen | 0:84e2360c7442 | 14 | #pragma diag_suppress 870 // マルチバイト文字使用の警告抑制のため |
MikamiUitOpen | 0:84e2360c7442 | 15 | |
MikamiUitOpen | 12:ef52fea50d5e | 16 | #define FIR_INTERPOLATOR_DEFAULT |
MikamiUitOpen | 12:ef52fea50d5e | 17 | // 補間フィルタの係数として,デフォルト以外の係数を使う場合の例: |
MikamiUitOpen | 12:ef52fea50d5e | 18 | // 16 行目の #define 文を無効にし,以下の #define 文のいずれかを有効にする |
MikamiUitOpen | 12:ef52fea50d5e | 19 | //#define FIR_INTERPOLATOR_ORDER94 // 94 次のフィルタで補間を行う場合 |
MikamiUitOpen | 12:ef52fea50d5e | 20 | //#define FIR_INTERPOLATOR_ORDER4 // 補間を行わない場合 |
MikamiUitOpen | 12:ef52fea50d5e | 21 | |
MikamiUitOpen | 6:fccf13e8e8a5 | 22 | const float FS_ = 10; // 入力の標本化周波数: 10 kHz |
MikamiUitOpen | 0:84e2360c7442 | 23 | |
MikamiUitOpen | 12:ef52fea50d5e | 24 | #ifdef FIR_INTERPOLATOR_DEFAULT |
MikamiUitOpen | 3:d52ea58bea85 | 25 | // 出力標本化周波数を4倍にするオブジェクト(デフォルトの補間フィルタ係数を使う場合) |
MikamiUitOpen | 3:d52ea58bea85 | 26 | MultirateLiPh myAdDa_(FS_); |
MikamiUitOpen | 12:ef52fea50d5e | 27 | #else |
MikamiUitOpen | 3:d52ea58bea85 | 28 | // 次の行はデフォルト以外の補間用フィルタ係数を使う場合 |
MikamiUitOpen | 12:ef52fea50d5e | 29 | #include "coefficients.hpp" // デフォルトの補間用フィルタの係数を使う場合は不要 |
MikamiUitOpen | 12:ef52fea50d5e | 30 | MultirateLiPh myAdDa_(FS_, ORDER_, HK1_, HK2_, HK3_); |
MikamiUitOpen | 12:ef52fea50d5e | 31 | #endif // FIR_INTERPOLATOR_DEFAULT |
MikamiUitOpen | 0:84e2360c7442 | 32 | |
MikamiUitOpen | 9:388a0203ac37 | 33 | // 信号処理に割り当てられる処理時間を見積るために使用 |
MikamiUitOpen | 3:d52ea58bea85 | 34 | // 標本化周波数が 10 kHz の場合 |
MikamiUitOpen | 0:84e2360c7442 | 35 | //int us_ = 50; // OK |
MikamiUitOpen | 9:388a0203ac37 | 36 | int us_ = 90; // 70 次: OK, 94 次: OK |
MikamiUitOpen | 9:388a0203ac37 | 37 | //int us_ = 91; // 70 次: OK, 94 次: NG |
MikamiUitOpen | 9:388a0203ac37 | 38 | //int us_ = 92; // 70 次: NG, 94 次: NG |
MikamiUitOpen | 0:84e2360c7442 | 39 | |
MikamiUitOpen | 0:84e2360c7442 | 40 | // ソフトウェア割込みに対する割込みサービス・ルーチン |
MikamiUitOpen | 0:84e2360c7442 | 41 | void SwiIsr() |
MikamiUitOpen | 0:84e2360c7442 | 42 | { |
MikamiUitOpen | 0:84e2360c7442 | 43 | float sn = myAdDa_.Input(); |
MikamiUitOpen | 3:d52ea58bea85 | 44 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:84e2360c7442 | 45 | // 実際には,ここにディジタルフィルタなどの処理を記述する |
MikamiUitOpen | 9:388a0203ac37 | 46 | wait_us(us_); // 信号処理に許される実行時間を見積るため |
MikamiUitOpen | 3:d52ea58bea85 | 47 | // ここの処理時間が長すぎる場合はおかしな出力波形になる |
MikamiUitOpen | 0:84e2360c7442 | 48 | // 実際の信号処理では,この関数は不要 |
MikamiUitOpen | 3:d52ea58bea85 | 49 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:84e2360c7442 | 50 | myAdDa_.Output(sn); |
MikamiUitOpen | 0:84e2360c7442 | 51 | } |
MikamiUitOpen | 0:84e2360c7442 | 52 | |
MikamiUitOpen | 0:84e2360c7442 | 53 | int main() |
MikamiUitOpen | 0:84e2360c7442 | 54 | { |
MikamiUitOpen | 0:84e2360c7442 | 55 | printf("\r\nADC の入力をそのまま DAC に出力する際にマルチレート処理を利用する例\r\n"); |
MikamiUitOpen | 0:84e2360c7442 | 56 | printf("wait: %d [μs]\r\n", us_); |
MikamiUitOpen | 0:84e2360c7442 | 57 | |
MikamiUitOpen | 6:fccf13e8e8a5 | 58 | myAdDa_.Start(&SwiIsr); // 標本化を開始する |
MikamiUitOpen | 0:84e2360c7442 | 59 | |
MikamiUitOpen | 0:84e2360c7442 | 60 | while (true) {} |
MikamiUitOpen | 0:84e2360c7442 | 61 | } |