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:
Thu Dec 31 12:30:54 2015 +0000
Revision:
12:e5367ab82460
Parent:
8:1f4bc859bc84
Child:
14:cd4534fb34e7
12

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 12:e5367ab82460 4 // 2015/12/31, 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 8:1f4bc859bc84 21 // Start sampling
MikamiUitOpen 8:1f4bc859bc84 22 void Start(bool onOff);
MikamiUitOpen 0:5c237fdcba23 23
MikamiUitOpen 12:e5367ab82460 24 // Stop sampling
MikamiUitOpen 12:e5367ab82460 25 void Stop() { timer_.detach(); }
MikamiUitOpen 12:e5367ab82460 26
MikamiUitOpen 0:5c237fdcba23 27 bool Filled() { return filled_; }
MikamiUitOpen 7:6598a9b70e5a 28
MikamiUitOpen 7:6598a9b70e5a 29 // Get pointer for sampled data
MikamiUitOpen 8:1f4bc859bc84 30 int16_t* Get() { return sn_; }
MikamiUitOpen 7:6598a9b70e5a 31
MikamiUitOpen 0:5c237fdcba23 32 private:
MikamiUitOpen 2:095b360e0f54 33 const int TS_; // sampling period
MikamiUitOpen 0:5c237fdcba23 34 const int N_DATA_; // number of 1 frame data
MikamiUitOpen 0:5c237fdcba23 35
MikamiUitOpen 8:1f4bc859bc84 36 AnalogIn aIn_; // Object for ADC
MikamiUitOpen 2:095b360e0f54 37 Ticker timer_; // Object of Ticker
MikamiUitOpen 0:5c237fdcba23 38
MikamiUitOpen 0:5c237fdcba23 39 bool trigger_;
MikamiUitOpen 0:5c237fdcba23 40 bool filled_;
MikamiUitOpen 0:5c237fdcba23 41 int count_;
MikamiUitOpen 0:5c237fdcba23 42 int16_t xnM1_;
MikamiUitOpen 8:1f4bc859bc84 43 int16_t* const sn_; // 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 8:1f4bc859bc84 47 int16_t (Sampler::*Rd)();
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 8:1f4bc859bc84 51 // Set inverting on or off
MikamiUitOpen 8:1f4bc859bc84 52 void Invert(bool onOff)
MikamiUitOpen 8:1f4bc859bc84 53 {
MikamiUitOpen 8:1f4bc859bc84 54 Rd = onOff ?
MikamiUitOpen 8:1f4bc859bc84 55 &Sampler::ReadInv // Inverted
MikamiUitOpen 8:1f4bc859bc84 56 : &Sampler::ReadNorm; // Non-inverted
MikamiUitOpen 8:1f4bc859bc84 57 }
MikamiUitOpen 8:1f4bc859bc84 58
MikamiUitOpen 2:095b360e0f54 59 // Interrupt service routine for Ticker
MikamiUitOpen 2:095b360e0f54 60 void Isr();
MikamiUitOpen 6:b27ef8d98edc 61
MikamiUitOpen 6:b27ef8d98edc 62 // disallow copy constructor and assignment operator
MikamiUitOpen 6:b27ef8d98edc 63 Sampler(const Sampler& );
MikamiUitOpen 6:b27ef8d98edc 64 Sampler& operator=(const Sampler& );
MikamiUitOpen 0:5c237fdcba23 65 };
MikamiUitOpen 0:5c237fdcba23 66 }
MikamiUitOpen 0:5c237fdcba23 67 #endif // F746_SAMPLER_HPP