Waveform display for input signal using SAI from MEMS microphone or line. MEMS マイクまたはラインから SAI により入力した信号の波形を表示する.

Dependencies:   BSP_DISCO_F746NG F746_GUI F746_SAI_IO LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
MikamiUitOpen
Date:
Mon Mar 12 05:27:19 2018 +0000
Revision:
5:92bb7f2bf714
Parent:
0:e2c6c8630aab
6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:e2c6c8630aab 1 //---------------------------------------------------------------
MikamiUitOpen 0:e2c6c8630aab 2 // トリガの条件を満足したデータを表示用データ領域の先頭から順に転送する
MikamiUitOpen 0:e2c6c8630aab 3 // トリガ条件は左右両チャンネルでチェックし,先に条件を
MikamiUitOpen 0:e2c6c8630aab 4 // 満足した点をトリガポイントとする
MikamiUitOpen 0:e2c6c8630aab 5 //
MikamiUitOpen 0:e2c6c8630aab 6 // 2016/07/23, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:e2c6c8630aab 7 //---------------------------------------------------------------
MikamiUitOpen 0:e2c6c8630aab 8
MikamiUitOpen 0:e2c6c8630aab 9 #ifndef F746_TRIGGER_HPP
MikamiUitOpen 0:e2c6c8630aab 10 #define F746_TRIGGER_HPP
MikamiUitOpen 0:e2c6c8630aab 11
MikamiUitOpen 0:e2c6c8630aab 12 #include "mbed.h"
MikamiUitOpen 0:e2c6c8630aab 13 #include "Array.hpp"
MikamiUitOpen 0:e2c6c8630aab 14 #include <algorithm> // min(), max() で使う
MikamiUitOpen 0:e2c6c8630aab 15
MikamiUitOpen 0:e2c6c8630aab 16 namespace Mikami
MikamiUitOpen 0:e2c6c8630aab 17 {
MikamiUitOpen 0:e2c6c8630aab 18 class Trigger
MikamiUitOpen 0:e2c6c8630aab 19 {
MikamiUitOpen 0:e2c6c8630aab 20 public:
MikamiUitOpen 0:e2c6c8630aab 21 Trigger(const Array<int16_t>& snL, // 元のデータ,左チャンネル
MikamiUitOpen 0:e2c6c8630aab 22 const Array<int16_t>& snR, // 元のデータ,右チャンネル
MikamiUitOpen 0:e2c6c8630aab 23 Array<int16_t>& xnL, // 表示用データ,左チャンネル
MikamiUitOpen 0:e2c6c8630aab 24 Array<int16_t>& xnR, // 表示用データ,右チャンネル
MikamiUitOpen 0:e2c6c8630aab 25 int threshold ) // トリガの基準値
MikamiUitOpen 0:e2c6c8630aab 26 : snL_(snL), snR_(snR), xnL_(xnL), xnR_(xnR),
MikamiUitOpen 0:e2c6c8630aab 27 TH_(threshold), N_SEARCH_(snL.Length()/3) {}
MikamiUitOpen 0:e2c6c8630aab 28
MikamiUitOpen 0:e2c6c8630aab 29 bool Execute()
MikamiUitOpen 0:e2c6c8630aab 30 {
MikamiUitOpen 0:e2c6c8630aab 31 int nL = Search(snL_);
MikamiUitOpen 0:e2c6c8630aab 32 int nR = Search(snR_);
MikamiUitOpen 0:e2c6c8630aab 33 int nStart = min(nL, nR);
MikamiUitOpen 0:e2c6c8630aab 34
MikamiUitOpen 0:e2c6c8630aab 35 for (int n=0; n<xnL_.Length(); n++)
MikamiUitOpen 0:e2c6c8630aab 36 {
MikamiUitOpen 0:e2c6c8630aab 37 int nS = n + nStart;
MikamiUitOpen 0:e2c6c8630aab 38 xnL_[n] = snL_[nS];
MikamiUitOpen 0:e2c6c8630aab 39 xnR_[n] = snR_[nS];
MikamiUitOpen 0:e2c6c8630aab 40 }
MikamiUitOpen 0:e2c6c8630aab 41
MikamiUitOpen 0:e2c6c8630aab 42 return nStart < N_SEARCH_;
MikamiUitOpen 0:e2c6c8630aab 43 }
MikamiUitOpen 0:e2c6c8630aab 44
MikamiUitOpen 0:e2c6c8630aab 45 private:
MikamiUitOpen 0:e2c6c8630aab 46 const Array<int16_t> &snL_, &snR_;
MikamiUitOpen 0:e2c6c8630aab 47 Array<int16_t> &xnL_, &xnR_;
MikamiUitOpen 0:e2c6c8630aab 48 const int TH_;
MikamiUitOpen 0:e2c6c8630aab 49 const int N_SEARCH_;
MikamiUitOpen 0:e2c6c8630aab 50
MikamiUitOpen 0:e2c6c8630aab 51 int Search(const Array<int16_t>& un)
MikamiUitOpen 0:e2c6c8630aab 52 {
MikamiUitOpen 0:e2c6c8630aab 53 int n;
MikamiUitOpen 0:e2c6c8630aab 54 for (n=1; n<N_SEARCH_; n++)
MikamiUitOpen 0:e2c6c8630aab 55 if ((un[n-1] < -TH_) && (un[n] > TH_))
MikamiUitOpen 0:e2c6c8630aab 56 break;
MikamiUitOpen 0:e2c6c8630aab 57 return n;
MikamiUitOpen 0:e2c6c8630aab 58 }
MikamiUitOpen 0:e2c6c8630aab 59 };
MikamiUitOpen 0:e2c6c8630aab 60 }
MikamiUitOpen 0:e2c6c8630aab 61 #endif // F746_TRIGGER_HPP