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:
Mon Dec 28 08:20:34 2015 +0000
Revision:
8:1f4bc859bc84
Parent:
7:6598a9b70e5a
Child:
11:a8420871920e
Child:
12:e5367ab82460
9

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