Realtime spectrum analyzer. Using FFT, linear prediction, or cepstrum smoothing. Version using MEMS microphone and CODEC, named "F746_RealtimeSpectrumAnalyzer_MEMS_Mic" is registered. リアルタイム スペクトル解析器.解析の手法:FFT,線形予測法,ケプストラムによる平滑化の3種類.このプログラムの説明は,CQ出版社のインターフェース誌,2016年4月号に掲載.外付けのマイクまたは他の信号源等を A0 に接続する.線形予測法,ケプストラムは,スペクトル解析の対象を音声信号に想定してパラメータを設定している.MEMS マイクと CODEC を使ったバージョンを "F746_RealtimeSpectrumAnalyzer_MEMS_Mic" として登録.

Dependencies:   BSP_DISCO_F746NG BUTTON_GROUP LCD_DISCO_F746NG TS_DISCO_F746NG UIT_FFT_Real mbed

Committer:
MikamiUitOpen
Date:
Sun Dec 20 13:38:22 2015 +0000
Revision:
7:6598a9b70e5a
Parent:
6:b27ef8d98edc
Child:
8:1f4bc859bc84
8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 6:b27ef8d98edc 1 //------------------------------------------------
MikamiUitOpen 2:095b360e0f54 2 // Class for sampling input signal (Header)
MikamiUitOpen 0:5c237fdcba23 3 //
MikamiUitOpen 7:6598a9b70e5a 4 // 2015/12/20, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 6:b27ef8d98edc 5 //------------------------------------------------
MikamiUitOpen 0:5c237fdcba23 6
MikamiUitOpen 0:5c237fdcba23 7 #ifndef F746_SAMPLER_HPP
MikamiUitOpen 0:5c237fdcba23 8 #define F746_SAMPLER_HPP
MikamiUitOpen 0:5c237fdcba23 9
MikamiUitOpen 0:5c237fdcba23 10 #include "mbed.h"
MikamiUitOpen 0:5c237fdcba23 11
MikamiUitOpen 0:5c237fdcba23 12 namespace Mikami
MikamiUitOpen 0:5c237fdcba23 13 {
MikamiUitOpen 0:5c237fdcba23 14 class Sampler
MikamiUitOpen 0:5c237fdcba23 15 {
MikamiUitOpen 0:5c237fdcba23 16 public:
MikamiUitOpen 7:6598a9b70e5a 17 Sampler(PinName pin, int fs, int nData);
MikamiUitOpen 7:6598a9b70e5a 18
MikamiUitOpen 7:6598a9b70e5a 19 ~Sampler();
MikamiUitOpen 7:6598a9b70e5a 20
MikamiUitOpen 7:6598a9b70e5a 21 void Start();
MikamiUitOpen 0:5c237fdcba23 22
MikamiUitOpen 0:5c237fdcba23 23 bool Filled() { return filled_; }
MikamiUitOpen 7:6598a9b70e5a 24
MikamiUitOpen 2:095b360e0f54 25 void InvertEnable(bool onOff)
MikamiUitOpen 2:095b360e0f54 26 { sw_ = onOff ? 1 : 0; }
MikamiUitOpen 7:6598a9b70e5a 27
MikamiUitOpen 7:6598a9b70e5a 28 // Get pointer for sampled data
MikamiUitOpen 7:6598a9b70e5a 29 int16_t* Get() { return xn_; }
MikamiUitOpen 7:6598a9b70e5a 30
MikamiUitOpen 0:5c237fdcba23 31 private:
MikamiUitOpen 2:095b360e0f54 32 const int TS_; // sampling period
MikamiUitOpen 0:5c237fdcba23 33 const int N_DATA_; // number of 1 frame data
MikamiUitOpen 0:5c237fdcba23 34
MikamiUitOpen 0:5c237fdcba23 35 AnalogIn aIn_; // Object of ADC
MikamiUitOpen 2:095b360e0f54 36 Ticker timer_; // Object of Ticker
MikamiUitOpen 0:5c237fdcba23 37
MikamiUitOpen 0:5c237fdcba23 38 bool trigger_;
MikamiUitOpen 0:5c237fdcba23 39 bool filled_;
MikamiUitOpen 0:5c237fdcba23 40 int count_;
MikamiUitOpen 0:5c237fdcba23 41 int16_t xnM1_;
MikamiUitOpen 2:095b360e0f54 42 int sw_;
MikamiUitOpen 7:6598a9b70e5a 43 int16_t* const xn_; // data to be analyzed
MikamiUitOpen 7:6598a9b70e5a 44 int16_t* const buffer_; // for input buffer
MikamiUitOpen 2:095b360e0f54 45
MikamiUitOpen 2:095b360e0f54 46 // For input
MikamiUitOpen 2:095b360e0f54 47 int16_t (Sampler::*Rd[2])();
MikamiUitOpen 2:095b360e0f54 48 int16_t ReadNorm() { return aIn_.read_u16() - 32767; }
MikamiUitOpen 2:095b360e0f54 49 int16_t ReadInv() { return 32767 - aIn_.read_u16(); }
MikamiUitOpen 2:095b360e0f54 50
MikamiUitOpen 2:095b360e0f54 51 void Set(bool tf);
MikamiUitOpen 2:095b360e0f54 52
MikamiUitOpen 2:095b360e0f54 53 // Interrupt service routine for Ticker
MikamiUitOpen 2:095b360e0f54 54 void Isr();
MikamiUitOpen 6:b27ef8d98edc 55
MikamiUitOpen 6:b27ef8d98edc 56 // disallow copy constructor and assignment operator
MikamiUitOpen 6:b27ef8d98edc 57 Sampler(const Sampler& );
MikamiUitOpen 6:b27ef8d98edc 58 Sampler& operator=(const Sampler& );
MikamiUitOpen 0:5c237fdcba23 59 };
MikamiUitOpen 0:5c237fdcba23 60 }
MikamiUitOpen 0:5c237fdcba23 61 #endif // F746_SAMPLER_HPP