ノイズを付加した正弦波発生器 Sinusoidal wave generator with noise.
Dependencies: F746_GUI F746_SAI_IO Random mbed
main.cpp@0:31361b0fcdad, 2018-11-04 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Nov 04 02:41:21 2018 +0000
- Revision:
- 0:31361b0fcdad
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:31361b0fcdad | 1 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:31361b0fcdad | 2 | // 正弦波+ノイズの発生器(標本化周波数:48 kHz) |
MikamiUitOpen | 0:31361b0fcdad | 3 | // ノイズの大きさは SeekBar で変えられる |
MikamiUitOpen | 0:31361b0fcdad | 4 | // |
MikamiUitOpen | 0:31361b0fcdad | 5 | // 使用しているライブラリのリビジョン: |
MikamiUitOpen | 0:31361b0fcdad | 6 | // F746_GUI Rev.33 |
MikamiUitOpen | 0:31361b0fcdad | 7 | // F746_SAI_IO Rev.12 |
MikamiUitOpen | 0:31361b0fcdad | 8 | // mbed Rev.170 |
MikamiUitOpen | 0:31361b0fcdad | 9 | // |
MikamiUitOpen | 0:31361b0fcdad | 10 | // 2018/11/04, Copyright (c) 2018 MIKAMI, Naoki |
MikamiUitOpen | 0:31361b0fcdad | 11 | //----------------------------------------------------------------- |
MikamiUitOpen | 0:31361b0fcdad | 12 | |
MikamiUitOpen | 0:31361b0fcdad | 13 | #include "SAI_InOut.hpp" |
MikamiUitOpen | 0:31361b0fcdad | 14 | #include "LcdPanelFrq.hpp" |
MikamiUitOpen | 0:31361b0fcdad | 15 | #include "GaussRand.hpp" |
MikamiUitOpen | 0:31361b0fcdad | 16 | |
MikamiUitOpen | 0:31361b0fcdad | 17 | int main() |
MikamiUitOpen | 0:31361b0fcdad | 18 | { |
MikamiUitOpen | 0:31361b0fcdad | 19 | const int FS = I2S_AUDIOFREQ_48K; // 標本化周波数:48 kHz |
MikamiUitOpen | 0:31361b0fcdad | 20 | SaiIO mySai(SaiIO::OUTPUT, 2048, FS); // オーディオ信号出力用 |
MikamiUitOpen | 0:31361b0fcdad | 21 | LcdPanel myPanel(1.0f/(float)FS); // LCD パネル表示用 |
MikamiUitOpen | 0:31361b0fcdad | 22 | GaussRand rnd(0.5f, 0); // ガウス性ノイズ発生器 |
MikamiUitOpen | 0:31361b0fcdad | 23 | |
MikamiUitOpen | 0:31361b0fcdad | 24 | mySai.PlayOut(); // オーディオ信号出力開始 |
MikamiUitOpen | 0:31361b0fcdad | 25 | |
MikamiUitOpen | 0:31361b0fcdad | 26 | const float MAX_AMP = 8192.0f; |
MikamiUitOpen | 0:31361b0fcdad | 27 | while (true) // 無限ループ |
MikamiUitOpen | 0:31361b0fcdad | 28 | { |
MikamiUitOpen | 0:31361b0fcdad | 29 | // 出力バッファへの転送が完了したら以下の処理を行う |
MikamiUitOpen | 0:31361b0fcdad | 30 | if (mySai.IsXferred()) |
MikamiUitOpen | 0:31361b0fcdad | 31 | { |
MikamiUitOpen | 0:31361b0fcdad | 32 | for (int n=0; n<mySai.GetLength(); n++) |
MikamiUitOpen | 0:31361b0fcdad | 33 | { |
MikamiUitOpen | 0:31361b0fcdad | 34 | // 入力信号の生成 |
MikamiUitOpen | 0:31361b0fcdad | 35 | float phi = myPanel.GetPhi(); |
MikamiUitOpen | 0:31361b0fcdad | 36 | float sn = sinf(phi); // 入力信号となる正弦波を発生 |
MikamiUitOpen | 0:31361b0fcdad | 37 | float noize = myPanel.GetNoiseLevel()*rnd.Next(); |
MikamiUitOpen | 0:31361b0fcdad | 38 | |
MikamiUitOpen | 0:31361b0fcdad | 39 | int16_t xn = (int16_t)(MAX_AMP*sn); |
MikamiUitOpen | 0:31361b0fcdad | 40 | int16_t yn = (int16_t)(MAX_AMP*(sn + noize)); |
MikamiUitOpen | 0:31361b0fcdad | 41 | mySai.Output(xn, yn); // xn:ノイズなし(左チャンネル) |
MikamiUitOpen | 0:31361b0fcdad | 42 | // yn:ノイズ付加(右チャンネル) |
MikamiUitOpen | 0:31361b0fcdad | 43 | myPanel.Store(yn, n); // 表示用として格納 |
MikamiUitOpen | 0:31361b0fcdad | 44 | } |
MikamiUitOpen | 0:31361b0fcdad | 45 | |
MikamiUitOpen | 0:31361b0fcdad | 46 | myPanel.Display(); // 入出力信号の波形表示 |
MikamiUitOpen | 0:31361b0fcdad | 47 | } |
MikamiUitOpen | 0:31361b0fcdad | 48 | myPanel.Update(); // パネルの状態を読み取り必要なパラメータなどを更新する |
MikamiUitOpen | 0:31361b0fcdad | 49 | } |
MikamiUitOpen | 0:31361b0fcdad | 50 | } |