Demo program of digital signal processing: Variable LPF/HPF, Vocal canceller, Pitch shifter, Reverbrator. ディジタル信号処理のデモプログラム. 遮断周波数可変 LPF/HPF,ボーカルキャンセラ,ピッチシフタ,残響生成器.

Dependencies:   Array_Matrix F446_AD_DA UIT_AQM1602 mbed

Committer:
MikamiUitOpen
Date:
Sun Jan 29 09:11:30 2017 +0000
Revision:
0:fa74b1130cc3
Child:
1:b3cf07371911
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:fa74b1130cc3 1 //--------------------------------------------------------------------
MikamiUitOpen 0:fa74b1130cc3 2 // STM32F446 と信号処理用ボードによるデモプログラムで使うグローバル関数
MikamiUitOpen 0:fa74b1130cc3 3 //
MikamiUitOpen 0:fa74b1130cc3 4 // 2017/01/29, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:fa74b1130cc3 5 //--------------------------------------------------------------------
MikamiUitOpen 0:fa74b1130cc3 6
MikamiUitOpen 0:fa74b1130cc3 7 #include "SignalProcessing.hpp" // 信号処理の抽象基底クラスなど
MikamiUitOpen 0:fa74b1130cc3 8 #include "AQM1602.hpp"
MikamiUitOpen 0:fa74b1130cc3 9 using namespace Mikami;
MikamiUitOpen 0:fa74b1130cc3 10
MikamiUitOpen 0:fa74b1130cc3 11 extern SignalProcessing *spPtr_; // 処理に対応するポインタ
MikamiUitOpen 0:fa74b1130cc3 12
MikamiUitOpen 0:fa74b1130cc3 13 // 機能の割り当てと表示
MikamiUitOpen 0:fa74b1130cc3 14 void AssignDisplay(SignalProcessing &func, Aqm1602 &lcd,
MikamiUitOpen 0:fa74b1130cc3 15 string str, float val = -1)
MikamiUitOpen 0:fa74b1130cc3 16 {
MikamiUitOpen 0:fa74b1130cc3 17 spPtr_ = &func; // 機能の割り当て
MikamiUitOpen 0:fa74b1130cc3 18
MikamiUitOpen 0:fa74b1130cc3 19 // 表示
MikamiUitOpen 0:fa74b1130cc3 20 lcd.ClearLine(0);
MikamiUitOpen 0:fa74b1130cc3 21 lcd.ClearLine(1);
MikamiUitOpen 0:fa74b1130cc3 22 lcd.WriteStringXY(str, 0, 0);
MikamiUitOpen 0:fa74b1130cc3 23 if (val == -1)
MikamiUitOpen 0:fa74b1130cc3 24 printf("%s\r\n", str.c_str());
MikamiUitOpen 0:fa74b1130cc3 25 else
MikamiUitOpen 0:fa74b1130cc3 26 {
MikamiUitOpen 0:fa74b1130cc3 27 printf("%s, %4.0f Hz\r\n", str.c_str(), val);
MikamiUitOpen 0:fa74b1130cc3 28 lcd.WriteValueXY("%4.0f Hz", val, 0, 1);
MikamiUitOpen 0:fa74b1130cc3 29 }
MikamiUitOpen 0:fa74b1130cc3 30 }
MikamiUitOpen 0:fa74b1130cc3 31
MikamiUitOpen 0:fa74b1130cc3 32 // 周波数変化が基準値より大きい場合に true を返す
MikamiUitOpen 0:fa74b1130cc3 33 // min <= frq <= max
MikamiUitOpen 0:fa74b1130cc3 34 // th : 基準値
MikamiUitOpen 0:fa74b1130cc3 35 bool FrChange(AnalogIn &aIn, float min, float max, float th, float &frq)
MikamiUitOpen 0:fa74b1130cc3 36 {
MikamiUitOpen 0:fa74b1130cc3 37 static float frqCurrent = 0;
MikamiUitOpen 0:fa74b1130cc3 38 frq = (max - min)*aIn.read() + min;
MikamiUitOpen 0:fa74b1130cc3 39 if (fabs(frq - frqCurrent) > th)
MikamiUitOpen 0:fa74b1130cc3 40 {
MikamiUitOpen 0:fa74b1130cc3 41 frqCurrent = frq;
MikamiUitOpen 0:fa74b1130cc3 42 return true;
MikamiUitOpen 0:fa74b1130cc3 43 }
MikamiUitOpen 0:fa74b1130cc3 44 else
MikamiUitOpen 0:fa74b1130cc3 45 return false;
MikamiUitOpen 0:fa74b1130cc3 46 }