Realtime sound spectrogram using FFT or linear prediction. Spectrogram is displayed on the display of PC. リアルタイム・スペクトログラム.解析の手法:FFT,線形予測法.スペクトログラムは PC のディスプレー装置に表示される.PC 側のプログラム:F446_Spectrogram.

Dependencies:   Array_Matrix mbed SerialTxRxIntr F446_AD_DA UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Sun Nov 24 11:14:01 2019 +0000
Revision:
7:5ba884060d3b
8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 7:5ba884060d3b 1 //--------------------------------------------------------
MikamiUitOpen 7:5ba884060d3b 2 // ダブル・バッファの template クラス
MikamiUitOpen 7:5ba884060d3b 3 // バッファに2次元配列(Matrix クラス)を使用
MikamiUitOpen 7:5ba884060d3b 4 //
MikamiUitOpen 7:5ba884060d3b 5 // 2019/11/22, Copyright (c) 2019 MIKAMI, Naoki
MikamiUitOpen 7:5ba884060d3b 6 //--------------------------------------------------------
MikamiUitOpen 7:5ba884060d3b 7
MikamiUitOpen 7:5ba884060d3b 8 #ifndef DOUBLE_BUFFER_MATRIX_HPP
MikamiUitOpen 7:5ba884060d3b 9 #define DOUBLE_BUFFER_MATRIX_HPP
MikamiUitOpen 7:5ba884060d3b 10
MikamiUitOpen 7:5ba884060d3b 11 #include "Matrix.hpp"
MikamiUitOpen 7:5ba884060d3b 12 using namespace Mikami;
MikamiUitOpen 7:5ba884060d3b 13
MikamiUitOpen 7:5ba884060d3b 14 template<class T> class DoubleBuffer
MikamiUitOpen 7:5ba884060d3b 15 {
MikamiUitOpen 7:5ba884060d3b 16 public:
MikamiUitOpen 7:5ba884060d3b 17 // コンストラクタ
MikamiUitOpen 7:5ba884060d3b 18 explicit DoubleBuffer(int size, T initialValue = 0)
MikamiUitOpen 7:5ba884060d3b 19 : N_(size), buf_(2, size, initialValue), ping_(0), pong_(1),
MikamiUitOpen 7:5ba884060d3b 20 index_(0), full_(false) {}
MikamiUitOpen 7:5ba884060d3b 21
MikamiUitOpen 7:5ba884060d3b 22 // データを格納
MikamiUitOpen 7:5ba884060d3b 23 void Store(T data) { buf_[ping_][index_++] = data; }
MikamiUitOpen 7:5ba884060d3b 24
MikamiUitOpen 7:5ba884060d3b 25 // 出力バッファからデータの取り出し
MikamiUitOpen 7:5ba884060d3b 26 T Get(int n) const { return buf_[pong_][n]; }
MikamiUitOpen 7:5ba884060d3b 27
MikamiUitOpen 7:5ba884060d3b 28 // バッファが満杯でバッファを切り替える
MikamiUitOpen 7:5ba884060d3b 29 bool IsFullSwitch()
MikamiUitOpen 7:5ba884060d3b 30 {
MikamiUitOpen 7:5ba884060d3b 31 if (index_ < N_) return false;
MikamiUitOpen 7:5ba884060d3b 32
MikamiUitOpen 7:5ba884060d3b 33 ping_ ^= 0x1; // バッファ切換えのため
MikamiUitOpen 7:5ba884060d3b 34 pong_ ^= 0x1; // バッファ切換えのため
MikamiUitOpen 7:5ba884060d3b 35 index_ = 0;
MikamiUitOpen 7:5ba884060d3b 36 full_ = true;
MikamiUitOpen 7:5ba884060d3b 37 return true;
MikamiUitOpen 7:5ba884060d3b 38 }
MikamiUitOpen 7:5ba884060d3b 39
MikamiUitOpen 7:5ba884060d3b 40 // バッファが満杯で,true を返す
MikamiUitOpen 7:5ba884060d3b 41 bool IsFull()
MikamiUitOpen 7:5ba884060d3b 42 {
MikamiUitOpen 7:5ba884060d3b 43 bool temp = full_;
MikamiUitOpen 7:5ba884060d3b 44 if (full_) full_ = false;
MikamiUitOpen 7:5ba884060d3b 45 return temp;
MikamiUitOpen 7:5ba884060d3b 46 }
MikamiUitOpen 7:5ba884060d3b 47
MikamiUitOpen 7:5ba884060d3b 48 private:
MikamiUitOpen 7:5ba884060d3b 49 const int N_; // バッファのサイズ
MikamiUitOpen 7:5ba884060d3b 50 Matrix<T> buf_; // バッファ
MikamiUitOpen 7:5ba884060d3b 51 int ping_, pong_; // バッファ切替用
MikamiUitOpen 7:5ba884060d3b 52 int index_; // 入力データのカウンタ
MikamiUitOpen 7:5ba884060d3b 53 bool full_; // 満杯の場合 true
MikamiUitOpen 7:5ba884060d3b 54
MikamiUitOpen 7:5ba884060d3b 55 // コピー・コンストラクタおよび代入演算子の禁止のため
MikamiUitOpen 7:5ba884060d3b 56 DoubleBuffer(const DoubleBuffer&);
MikamiUitOpen 7:5ba884060d3b 57 DoubleBuffer& operator=(const DoubleBuffer&);
MikamiUitOpen 7:5ba884060d3b 58 };
MikamiUitOpen 7:5ba884060d3b 59 #endif // DOUBLE_BUFFER_MATRIX_HPP