ノイズを付加した正弦波発生器 Sinusoidal wave generator with noise.

Dependencies:   F746_GUI F746_SAI_IO Random mbed

Committer:
MikamiUitOpen
Date:
Sun Nov 04 02:41:21 2018 +0000
Revision:
0:31361b0fcdad
1

Who changed what in which revision?

UserRevisionLine numberNew 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 }