CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使うプログラム.雛形として使う. http://seminar.cqpub.co.jp/ccm/ES18-0020

Dependencies:   F746_GUI F746_SAI_IO mbed

Committer:
MikamiUitOpen
Date:
Tue Mar 20 11:15:47 2018 +0000
Revision:
5:976ef47a7f25
Parent:
4:42586a44caeb
6

Who changed what in which revision?

UserRevisionLine numberNew 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 3:05c8d0ee9c37 8 // F746_GUI Rev.33
MikamiUitOpen 3:05c8d0ee9c37 9 // F746_SAI_IO Rev.12
MikamiUitOpen 3:05c8d0ee9c37 10 // mbed Rev.161
MikamiUitOpen 0:b6d17af0f47a 11 //
MikamiUitOpen 5:976ef47a7f25 12 // 2018/03/20, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:b6d17af0f47a 13 //-----------------------------------------------------------------
MikamiUitOpen 0:b6d17af0f47a 14
MikamiUitOpen 0:b6d17af0f47a 15 #include "SAI_InOut.hpp"
MikamiUitOpen 0:b6d17af0f47a 16 #include "LcdPanelFrq.hpp"
MikamiUitOpen 0:b6d17af0f47a 17
MikamiUitOpen 0:b6d17af0f47a 18 //-----------------------------------------------------------------
MikamiUitOpen 0:b6d17af0f47a 19 // 実行するフィルタに応じて以下のインクルードファイルを変更する
MikamiUitOpen 0:b6d17af0f47a 20 #include "Multiplier.hpp" // 入力を定数倍して出力する処理
MikamiUitOpen 0:b6d17af0f47a 21 //-----------------------------------------------------------------
MikamiUitOpen 0:b6d17af0f47a 22
MikamiUitOpen 0:b6d17af0f47a 23 int main()
MikamiUitOpen 0:b6d17af0f47a 24 {
MikamiUitOpen 0:b6d17af0f47a 25 const int FS = I2S_AUDIOFREQ_48K; // 標本化周波数:48 kHz
MikamiUitOpen 0:b6d17af0f47a 26 // オーディオ信号出力用
MikamiUitOpen 0:b6d17af0f47a 27 SaiIO mySai(SaiIO::OUTPUT, 2048, FS);
MikamiUitOpen 0:b6d17af0f47a 28
MikamiUitOpen 0:b6d17af0f47a 29 // LCD パネル表示用
MikamiUitOpen 0:b6d17af0f47a 30 LcdPanel myPanel(1.0f/(float)FS);
MikamiUitOpen 0:b6d17af0f47a 31
MikamiUitOpen 0:b6d17af0f47a 32 //-----------------------------------------------------------------
MikamiUitOpen 0:b6d17af0f47a 33 // ここでディジタルフィルタのオブジェクト生成や初期化などを行う
MikamiUitOpen 0:b6d17af0f47a 34 Multiplier df(-0.5f); // 定数乗算の処理
MikamiUitOpen 0:b6d17af0f47a 35 //-----------------------------------------------------------------
MikamiUitOpen 0:b6d17af0f47a 36
MikamiUitOpen 0:b6d17af0f47a 37 mySai.PlayOut(); // オーディオ信号出力開始
MikamiUitOpen 0:b6d17af0f47a 38
MikamiUitOpen 0:b6d17af0f47a 39 const float MAX_AMP = 10000.0f;
MikamiUitOpen 0:b6d17af0f47a 40 while (true) // 無限ループ
MikamiUitOpen 0:b6d17af0f47a 41 {
MikamiUitOpen 0:b6d17af0f47a 42 // 出力バッファへの転送が完了したら以下の処理を行う
MikamiUitOpen 0:b6d17af0f47a 43 if (mySai.IsXferred())
MikamiUitOpen 0:b6d17af0f47a 44 {
MikamiUitOpen 0:b6d17af0f47a 45 for (int n=0; n<mySai.GetLength(); n++)
MikamiUitOpen 0:b6d17af0f47a 46 {
MikamiUitOpen 0:b6d17af0f47a 47 // 入力信号の生成
MikamiUitOpen 2:7915feafbbdd 48 float phi = myPanel.GetPhi();
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 myPanel.Store(xn, yn, n); // 表示用として格納
MikamiUitOpen 0:b6d17af0f47a 59 }
MikamiUitOpen 0:b6d17af0f47a 60
MikamiUitOpen 0:b6d17af0f47a 61 myPanel.Display(); // 入出力信号の波形表示
MikamiUitOpen 0:b6d17af0f47a 62 }
MikamiUitOpen 0:b6d17af0f47a 63 myPanel.Update(); // パネルの状態を読み取り必要なパラメータなどを更新する
MikamiUitOpen 0:b6d17af0f47a 64 }
MikamiUitOpen 0:b6d17af0f47a 65 }