Version using MEMS microphone and CODEC for the program "F746_RealtimeSpectrumAnalyzer". "F746_RealtimeSpectrumAnalyzer" の入力を MEMS のマイクと CODEC に変更.このプログラムは Tomona Nanase さんが作成し DISCO-F746NG_Oscilloscope の名前で登録しているプログラムで, CODEC を使って入力する部分を参考にして作成.このプログラムの説明は,CQ出版社のインターフェース誌,2016年4月号に掲載.

Dependencies:   BSP_DISCO_F746NG BUTTON_GROUP LCD_DISCO_F746NG TS_DISCO_F746NG UIT_FFT_Real mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LPC_Analysis.cpp Source File

LPC_Analysis.cpp

00001 //-------------------------------------------------------
00002 //  Class for spectrum analysis using linear prediction
00003 //
00004 //  2015/12/15, Copyright (c) 2015 MIKAMI, Naoki
00005 //-------------------------------------------------------
00006 
00007 #include "LPC_Analysis.hpp"
00008 
00009 namespace Mikami
00010 {
00011     LpcAnalyzer::LpcAnalyzer(int nData, int nFft, int order)
00012         : AnalyzerBase(nData, nFft, nData-1), ORDER_(order),
00013           lp_(nData-1, order), an_(new float[order]),
00014           xFft_(new float[nFft]), yFft_(new Complex[nFft/2+1]) {}
00015 
00016     LpcAnalyzer::~LpcAnalyzer()
00017     {
00018         delete[] an_;
00019         delete[] xFft_;
00020         delete[] yFft_;
00021     }
00022 
00023     void LpcAnalyzer::Analyze(const float xn[], float yn[])
00024     {
00025         float em;
00026         lp_.Execute(xn, an_, em);
00027 
00028         // To spectrum
00029         xFft_[0] = 1.0f;
00030         for (int n=0; n<ORDER_; n++) xFft_[n+1] = -an_[n];
00031         for (int n=ORDER_+1; n<N_FFT_; n++) xFft_[n] = 0.0f;
00032         fft_.Execute(xFft_, yFft_); // execute FFT
00033 
00034         // Translate to dB
00035         for (int n=0; n<=N_FFT_/2; n++)
00036             yn[n] = 10.0f*log10f(em/Norm(yFft_[n]));
00037     }
00038 }