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:
Wed Dec 09 05:05:00 2015 +0000
Revision:
0:5c237fdcba23
Child:
4:99d4d5ea06a2
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:5c237fdcba23 1 //-------------------------------------------------------------------
MikamiUitOpen 0:5c237fdcba23 2 // Hamming windowing with zero-padding
MikamiUitOpen 0:5c237fdcba23 3 //
MikamiUitOpen 0:5c237fdcba23 4 // 2015/12/08, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:5c237fdcba23 5 //-------------------------------------------------------------------
MikamiUitOpen 0:5c237fdcba23 6
MikamiUitOpen 0:5c237fdcba23 7 #ifndef HAMMING_WINDOW_HPP
MikamiUitOpen 0:5c237fdcba23 8 #define HAMMING_WINDOW_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 HammingWindow
MikamiUitOpen 0:5c237fdcba23 15 {
MikamiUitOpen 0:5c237fdcba23 16 private:
MikamiUitOpen 0:5c237fdcba23 17 const int N_;
MikamiUitOpen 0:5c237fdcba23 18 const int NFFT_;
MikamiUitOpen 0:5c237fdcba23 19
MikamiUitOpen 0:5c237fdcba23 20 float* w_;
MikamiUitOpen 0:5c237fdcba23 21
MikamiUitOpen 0:5c237fdcba23 22 public:
MikamiUitOpen 0:5c237fdcba23 23 // Constructor
MikamiUitOpen 0:5c237fdcba23 24 HammingWindow(uint16_t nData, uint16_t nFft)
MikamiUitOpen 0:5c237fdcba23 25 : N_(nData), NFFT_(nFft), w_(new float[nData])
MikamiUitOpen 0:5c237fdcba23 26 {
MikamiUitOpen 0:5c237fdcba23 27 float pi2L = 6.283185f/(float)nData;
MikamiUitOpen 0:5c237fdcba23 28 for (int k=0; k<nData; k++)
MikamiUitOpen 0:5c237fdcba23 29 w_[k] = 0.54f - 0.46f*cosf(k*pi2L);
MikamiUitOpen 0:5c237fdcba23 30 }
MikamiUitOpen 0:5c237fdcba23 31
MikamiUitOpen 0:5c237fdcba23 32 // Destructor
MikamiUitOpen 0:5c237fdcba23 33 ~HammingWindow() {delete[] w_;}
MikamiUitOpen 0:5c237fdcba23 34
MikamiUitOpen 0:5c237fdcba23 35 // Windowing
MikamiUitOpen 0:5c237fdcba23 36 void Execute(const float x[], float y[])
MikamiUitOpen 0:5c237fdcba23 37 {
MikamiUitOpen 0:5c237fdcba23 38 for (int n=0; n<N_; n++) y[n] = x[n]*w_[n];
MikamiUitOpen 0:5c237fdcba23 39 for (int n=N_; n<NFFT_; n++) y[n] = 0;
MikamiUitOpen 0:5c237fdcba23 40 }
MikamiUitOpen 0:5c237fdcba23 41 };
MikamiUitOpen 0:5c237fdcba23 42 }
MikamiUitOpen 0:5c237fdcba23 43 #endif // HAMMING_WINDOW_HPP
MikamiUitOpen 0:5c237fdcba23 44