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

MyClasses/Trigger.hpp

Committer:
MikamiUitOpen
Date:
2018-03-12
Revision:
5:92bb7f2bf714
Parent:
0:e2c6c8630aab

File content as of revision 5:92bb7f2bf714:

//---------------------------------------------------------------
//  トリガの条件を満足したデータを表示用データ領域の先頭から順に転送する
//      トリガ条件は左右両チャンネルでチェックし,先に条件を
//      満足した点をトリガポイントとする
//
//  2016/07/23, Copyright (c) 2016 MIKAMI, Naoki
//---------------------------------------------------------------

#ifndef F746_TRIGGER_HPP
#define F746_TRIGGER_HPP

#include "mbed.h"
#include "Array.hpp"
#include <algorithm>    // min(), max() で使う

namespace Mikami
{
    class Trigger
    {
    public:
        Trigger(const Array<int16_t>& snL,  // 元のデータ,左チャンネル
                const Array<int16_t>& snR,  // 元のデータ,右チャンネル
                Array<int16_t>& xnL,        // 表示用データ,左チャンネル
                Array<int16_t>& xnR,        // 表示用データ,右チャンネル
                int threshold )             // トリガの基準値
            : snL_(snL), snR_(snR), xnL_(xnL), xnR_(xnR),
              TH_(threshold), N_SEARCH_(snL.Length()/3) {}

        bool Execute()
        {
            int nL = Search(snL_);
            int nR = Search(snR_);
            int nStart = min(nL, nR);

            for (int n=0; n<xnL_.Length(); n++)
            {
                int nS = n + nStart;
                xnL_[n] = snL_[nS];
                xnR_[n] = snR_[nS];
            }
            
            return nStart < N_SEARCH_;
        }

    private:
        const Array<int16_t> &snL_, &snR_;
        Array<int16_t> &xnL_, &xnR_;
        const int TH_;
        const int N_SEARCH_;
        
        int Search(const Array<int16_t>& un)
        {
            int n;
            for (n=1; n<N_SEARCH_; n++)
                if ((un[n-1] < -TH_) && (un[n] > TH_))
                    break;
            return n;
        }
    };
}
#endif  // F746_TRIGGER_HPP