FFT によるスペクトル解析器

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

Committer:
MikamiUitOpen
Date:
Fri Jan 08 02:27:46 2021 +0000
Revision:
0:91cc5a03f0ca
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:91cc5a03f0ca 1 //---------------------------------------------------------------------
MikamiUitOpen 0:91cc5a03f0ca 2 // スペクトル解析の結果を PC へ転送するためのクラス
MikamiUitOpen 0:91cc5a03f0ca 3 //
MikamiUitOpen 0:91cc5a03f0ca 4 // 2020/02/05, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:91cc5a03f0ca 5 //---------------------------------------------------------------------
MikamiUitOpen 0:91cc5a03f0ca 6
MikamiUitOpen 0:91cc5a03f0ca 7 #include <string>
MikamiUitOpen 0:91cc5a03f0ca 8 #include "Array.hpp"
MikamiUitOpen 0:91cc5a03f0ca 9 #include "SerialRxTxIntr.hpp"
MikamiUitOpen 0:91cc5a03f0ca 10 using namespace Mikami;
MikamiUitOpen 0:91cc5a03f0ca 11
MikamiUitOpen 0:91cc5a03f0ca 12 #ifndef XFER_CONVERT_TOPC_HPP
MikamiUitOpen 0:91cc5a03f0ca 13 #define XFER_CONVERT_TOPC_HPP
MikamiUitOpen 0:91cc5a03f0ca 14
MikamiUitOpen 0:91cc5a03f0ca 15 class Xfer
MikamiUitOpen 0:91cc5a03f0ca 16 {
MikamiUitOpen 0:91cc5a03f0ca 17 public:
MikamiUitOpen 0:91cc5a03f0ca 18 // コンストラクタ
MikamiUitOpen 0:91cc5a03f0ca 19 Xfer(SerialRxTxIntr& rxTx, int size)
MikamiUitOpen 0:91cc5a03f0ca 20 : SIZE_(size), xn_(size), rxTx_(rxTx) {}
MikamiUitOpen 0:91cc5a03f0ca 21
MikamiUitOpen 0:91cc5a03f0ca 22 // スペクトル解析の結果を転送する形式に変換
MikamiUitOpen 0:91cc5a03f0ca 23 // yAbs FFT の結果の絶対値
MikamiUitOpen 0:91cc5a03f0ca 24 // magn 倍率
MikamiUitOpen 0:91cc5a03f0ca 25 void Convert(const float yAbs[], float magn = 1.0f)
MikamiUitOpen 0:91cc5a03f0ca 26 {
MikamiUitOpen 0:91cc5a03f0ca 27 const float MAX = 10000;
MikamiUitOpen 0:91cc5a03f0ca 28 for (int n=0; n<SIZE_; n++)
MikamiUitOpen 0:91cc5a03f0ca 29 {
MikamiUitOpen 0:91cc5a03f0ca 30 float x = magn*yAbs[n];
MikamiUitOpen 0:91cc5a03f0ca 31 xn_[n] = (x > MAX) ? MAX : (uint16_t)x;
MikamiUitOpen 0:91cc5a03f0ca 32 }
MikamiUitOpen 0:91cc5a03f0ca 33 }
MikamiUitOpen 0:91cc5a03f0ca 34
MikamiUitOpen 0:91cc5a03f0ca 35 // データを PC へ転送(0 ~ 10,000 の範囲の値を 2 文字で表すコード化を利用)
MikamiUitOpen 0:91cc5a03f0ca 36 void ToPC()
MikamiUitOpen 0:91cc5a03f0ca 37 {
MikamiUitOpen 0:91cc5a03f0ca 38 string str = "";
MikamiUitOpen 0:91cc5a03f0ca 39 for (int n=0; n<SIZE_; n++)
MikamiUitOpen 0:91cc5a03f0ca 40 {
MikamiUitOpen 0:91cc5a03f0ca 41 div_t a = div(xn_[n], 100);
MikamiUitOpen 0:91cc5a03f0ca 42 str += a.quot + 0x10;
MikamiUitOpen 0:91cc5a03f0ca 43 str += a.rem + 0x10;
MikamiUitOpen 0:91cc5a03f0ca 44 }
MikamiUitOpen 0:91cc5a03f0ca 45 rxTx_.TxString(str+"\n");
MikamiUitOpen 0:91cc5a03f0ca 46 rxTx_.TxString("EOT\n");
MikamiUitOpen 0:91cc5a03f0ca 47 }
MikamiUitOpen 0:91cc5a03f0ca 48
MikamiUitOpen 0:91cc5a03f0ca 49 private:
MikamiUitOpen 0:91cc5a03f0ca 50 const int SIZE_; // PC に送るデータ数
MikamiUitOpen 0:91cc5a03f0ca 51 Array<uint16_t> xn_; // PC に送るデータ
MikamiUitOpen 0:91cc5a03f0ca 52 SerialRxTxIntr& rxTx_;
MikamiUitOpen 0:91cc5a03f0ca 53
MikamiUitOpen 0:91cc5a03f0ca 54 // コピー・コンストラクタおよび代入演算子の禁止のため
MikamiUitOpen 0:91cc5a03f0ca 55 Xfer(const Xfer&);
MikamiUitOpen 0:91cc5a03f0ca 56 Xfer& operator=(const Xfer&);
MikamiUitOpen 0:91cc5a03f0ca 57 };
MikamiUitOpen 0:91cc5a03f0ca 58 #endif // XFER_CONVERT_TOPC_HPP