ライブラリ "DSP_MultirateLinearphase" の使用例.
Dependencies: mbed DSP_MultirateLinearphase
Revision 3:d52ea58bea85, committed 2020-06-16
- Comitter:
- MikamiUitOpen
- Date:
- Tue Jun 16 09:49:23 2020 +0000
- Parent:
- 2:4fab7f655600
- Child:
- 4:d679eeac4937
- Commit message:
- 4
Changed in this revision
--- a/DSP_MultirateLinearphase.lib Tue May 26 12:22:48 2020 +0000 +++ b/DSP_MultirateLinearphase.lib Tue Jun 16 09:49:23 2020 +0000 @@ -1,1 +1,1 @@ -https://os.mbed.com/users/MikamiUitOpen/code/DSP_MultirateLinearphase/#aa092bbc8877 +https://os.mbed.com/users/MikamiUitOpen/code/DSP_MultirateLinearphase/#59af3dfa0595
--- a/coefficients.hpp Tue May 26 12:22:48 2020 +0000 +++ b/coefficients.hpp Tue Jun 16 09:49:23 2020 +0000 @@ -8,7 +8,7 @@ // #define FIR_INTERPOLATOR_ORDER96 // #define FIR_INTERPOLATOR_ORDER4 // -// 2020/05/25, Copyright (c) 2020 MIKAMI, Naoki +// 2020/06/16, Copyright (c) 2020 MIKAMI, Naoki //------------------------------------------------------------------ #include "MultirateLiPh.hpp" @@ -21,22 +21,22 @@ // 種類 LPF // 遮断周波数 (kHz) 5.000000 // 減衰量 (dB) 40.00 -const int MultirateLiPh::ORDER_ = 96; -const float MultirateLiPh::HK1_[] = { +const int ORDER_ = 96; +const float HK1_[] = { -3.181336E-03f, 5.128636E-03f, -7.675400E-03f, 1.095993E-02f, -1.517799E-02f, 2.063008E-02f, -2.781909E-02f, 3.767194E-02f, -5.211612E-02f, 7.591348E-02f, -1.247794E-01f, 2.984461E-01f, 8.997624E-01f, -1.773076E-01f, 9.513684E-02f, -6.231776E-02f, 4.412812E-02f, -3.232678E-02f, 2.396353E-02f, -1.772480E-02f, 1.293674E-02f, -9.214960E-03f, 6.319428E-03f, -4.087220E-03f}; -const float MultirateLiPh::HK2_[] = { +const float HK2_[] = { -5.116816E-03f, 8.067276E-03f, -1.190903E-02f, 1.685387E-02f, -2.320755E-02f, 3.144941E-02f, -4.240016E-02f, 5.761400E-02f, -8.044372E-02f, 1.196597E-01f, -2.075416E-01f, 6.350536E-01f, 6.350536E-01f, -2.075416E-01f, 1.196597E-01f, -8.044372E-02f, 5.761400E-02f, -4.240016E-02f, 3.144941E-02f, -2.320755E-02f, 1.685387E-02f, -1.190903E-02f, 8.067276E-03f, -5.116816E-03f}; -const float MultirateLiPh::HK3_[] = { +const float HK3_[] = { -4.087220E-03f, 6.319428E-03f, -9.214960E-03f, 1.293674E-02f, -1.772480E-02f, 2.396353E-02f, -3.232678E-02f, 4.412812E-02f, -6.231776E-02f, 9.513684E-02f, -1.773076E-01f, 8.997624E-01f, @@ -47,8 +47,8 @@ #ifdef FIR_INTERPOLATOR_ORDER4 // 以下は,出力の際の補間を行わない場合に相当する信号を出力したい場合に使う -const int MultirateLiPh::ORDER_ = 4; -const float MultirateLiPh::HK1_[] = {1}; -const float MultirateLiPh::HK2_[] = {1}; -const float MultirateLiPh::HK3_[] = {1}; +const int ORDER_ = 4; +const float HK1_[] = {1}; +const float HK2_[] = {1}; +const float HK3_[] = {1}; #endif // FIR_INTERPOLATOR_ORDER4 \ No newline at end of file
--- 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