![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使うプログラム.雛形として使う. http://seminar.cqpub.co.jp/ccm/ES18-0020
Dependencies: F746_GUI F746_SAI_IO mbed
main.cpp@1:d9fdd52ea43a, 2017-10-29 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Oct 29 05:04:47 2017 +0000
- Revision:
- 1:d9fdd52ea43a
- Parent:
- 0:b6d17af0f47a
- Child:
- 2:7915feafbbdd
2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:b6d17af0f47a | 1 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:b6d17af0f47a | 2 | // ディジタルフィルタ実験のためのプラットフォーム(標本化周波数:48 kHz) |
MikamiUitOpen | 0:b6d17af0f47a | 3 | // ---- 入出力信号の波形表示付き ---- |
MikamiUitOpen | 0:b6d17af0f47a | 4 | // |
MikamiUitOpen | 0:b6d17af0f47a | 5 | // このプログラムでは,例として定数乗算器を実装している |
MikamiUitOpen | 0:b6d17af0f47a | 6 | // |
MikamiUitOpen | 0:b6d17af0f47a | 7 | // 使用しているライブラリのリビジョン: |
MikamiUitOpen | 1:d9fdd52ea43a | 8 | // mbed Rev.154 |
MikamiUitOpen | 0:b6d17af0f47a | 9 | // BSP_DISCO_F746NG Rev.9 |
MikamiUitOpen | 0:b6d17af0f47a | 10 | // |
MikamiUitOpen | 1:d9fdd52ea43a | 11 | // 2017/10/29, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:b6d17af0f47a | 12 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:b6d17af0f47a | 13 | |
MikamiUitOpen | 0:b6d17af0f47a | 14 | #include "SAI_InOut.hpp" |
MikamiUitOpen | 0:b6d17af0f47a | 15 | #include "LcdPanelFrq.hpp" |
MikamiUitOpen | 0:b6d17af0f47a | 16 | |
MikamiUitOpen | 0:b6d17af0f47a | 17 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:b6d17af0f47a | 18 | // 実行するフィルタに応じて以下のインクルードファイルを変更する |
MikamiUitOpen | 0:b6d17af0f47a | 19 | #include "Multiplier.hpp" // 入力を定数倍して出力する処理 |
MikamiUitOpen | 0:b6d17af0f47a | 20 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:b6d17af0f47a | 21 | |
MikamiUitOpen | 0:b6d17af0f47a | 22 | int main() |
MikamiUitOpen | 0:b6d17af0f47a | 23 | { |
MikamiUitOpen | 0:b6d17af0f47a | 24 | const int FS = I2S_AUDIOFREQ_48K; // 標本化周波数:48 kHz |
MikamiUitOpen | 0:b6d17af0f47a | 25 | // オーディオ信号出力用 |
MikamiUitOpen | 0:b6d17af0f47a | 26 | SaiIO mySai(SaiIO::OUTPUT, 2048, FS); |
MikamiUitOpen | 0:b6d17af0f47a | 27 | |
MikamiUitOpen | 0:b6d17af0f47a | 28 | // LCD パネル表示用 |
MikamiUitOpen | 0:b6d17af0f47a | 29 | LcdPanel myPanel(1.0f/(float)FS); |
MikamiUitOpen | 0:b6d17af0f47a | 30 | |
MikamiUitOpen | 0:b6d17af0f47a | 31 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:b6d17af0f47a | 32 | // ここでディジタルフィルタのオブジェクト生成や初期化などを行う |
MikamiUitOpen | 0:b6d17af0f47a | 33 | Multiplier df(-0.5f); // 定数乗算の処理 |
MikamiUitOpen | 0:b6d17af0f47a | 34 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:b6d17af0f47a | 35 | |
MikamiUitOpen | 0:b6d17af0f47a | 36 | mySai.PlayOut(); // オーディオ信号出力開始 |
MikamiUitOpen | 0:b6d17af0f47a | 37 | |
MikamiUitOpen | 0:b6d17af0f47a | 38 | const float MAX_AMP = 10000.0f; |
MikamiUitOpen | 0:b6d17af0f47a | 39 | float phi = 0; |
MikamiUitOpen | 0:b6d17af0f47a | 40 | |
MikamiUitOpen | 0:b6d17af0f47a | 41 | while (true) // 無限ループ |
MikamiUitOpen | 0:b6d17af0f47a | 42 | { |
MikamiUitOpen | 0:b6d17af0f47a | 43 | // 出力バッファへの転送が完了したら以下の処理を行う |
MikamiUitOpen | 0:b6d17af0f47a | 44 | if (mySai.IsXferred()) |
MikamiUitOpen | 0:b6d17af0f47a | 45 | { |
MikamiUitOpen | 0:b6d17af0f47a | 46 | for (int n=0; n<mySai.GetLength(); n++) |
MikamiUitOpen | 0:b6d17af0f47a | 47 | { |
MikamiUitOpen | 0:b6d17af0f47a | 48 | // 入力信号の生成 |
MikamiUitOpen | 0:b6d17af0f47a | 49 | float sn = sinf(phi); // 入力信号となる正弦波を発生 |
MikamiUitOpen | 0:b6d17af0f47a | 50 | |
MikamiUitOpen | 0:b6d17af0f47a | 51 | int16_t xn = (int16_t)(MAX_AMP*sn); |
MikamiUitOpen | 0:b6d17af0f47a | 52 | //------------------------------------------------------ |
MikamiUitOpen | 0:b6d17af0f47a | 53 | // ディジタルフィルタなどの信号処理の実行 |
MikamiUitOpen | 0:b6d17af0f47a | 54 | int16_t yn = df.Execute(xn); |
MikamiUitOpen | 0:b6d17af0f47a | 55 | //------------------------------------------------------ |
MikamiUitOpen | 0:b6d17af0f47a | 56 | mySai.Output(xn, yn); // xn:入力(左チャンネル) |
MikamiUitOpen | 0:b6d17af0f47a | 57 | // yn:出力(右チャンネル) |
MikamiUitOpen | 0:b6d17af0f47a | 58 | |
MikamiUitOpen | 0:b6d17af0f47a | 59 | phi = myPanel.GetPhi(); // phi の更新 |
MikamiUitOpen | 0:b6d17af0f47a | 60 | myPanel.Store(xn, yn, n); // 表示用として格納 |
MikamiUitOpen | 0:b6d17af0f47a | 61 | } |
MikamiUitOpen | 0:b6d17af0f47a | 62 | |
MikamiUitOpen | 0:b6d17af0f47a | 63 | myPanel.Display(); // 入出力信号の波形表示 |
MikamiUitOpen | 0:b6d17af0f47a | 64 | } |
MikamiUitOpen | 0:b6d17af0f47a | 65 | myPanel.Update(); // パネルの状態を読み取り必要なパラメータなどを更新する |
MikamiUitOpen | 0:b6d17af0f47a | 66 | } |
MikamiUitOpen | 0:b6d17af0f47a | 67 | } |