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

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Xfer.hpp Source File

Xfer.hpp

00001 //---------------------------------------------------------------------
00002 //  スペクトル解析の結果を PC へ転送するためのクラス
00003 //
00004 //  2020/02/05, Copyright (c) 2020 MIKAMI, Naoki
00005 //---------------------------------------------------------------------
00006 
00007 #include <string>
00008 #include "Array.hpp"
00009 #include "SerialRxTxIntr.hpp"
00010 using namespace Mikami;
00011 
00012 #ifndef XFER_CONVERT_TOPC_HPP
00013 #define XFER_CONVERT_TOPC_HPP
00014 
00015 class Xfer
00016 {
00017 public:
00018     // コンストラクタ
00019     Xfer(SerialRxTxIntr& rxTx, int size)
00020         : SIZE_(size), xn_(size), rxTx_(rxTx) {}
00021         
00022     // スペクトル解析の結果を転送する形式に変換
00023     //      yAbs    FFT の結果の絶対値
00024     //      magn    倍率
00025     void Convert(const float yAbs[], float magn = 1.0f)
00026     {
00027         const float MAX = 10000;
00028         for (int n=0; n<SIZE_; n++)
00029         {
00030             float x = magn*yAbs[n];
00031             xn_[n] = (x > MAX) ? MAX : (uint16_t)x; 
00032         }
00033     }
00034 
00035     // データを PC へ転送(0 ~ 10,000 の範囲の値を 2 文字で表すコード化を利用)
00036     void ToPC()
00037     {
00038         string str = "";
00039         for (int n=0; n<SIZE_; n++)
00040         {
00041             div_t a = div(xn_[n], 100);
00042             str += a.quot + 0x10;
00043             str += a.rem + 0x10;
00044         }
00045         rxTx_.TxString(str+"\n");
00046         rxTx_.TxString("EOT\n");
00047     }
00048     
00049 private:
00050     const int SIZE_;        // PC に送るデータ数
00051     Array<uint16_t> xn_;    // PC に送るデータ
00052     SerialRxTxIntr& rxTx_;
00053 
00054     // コピー・コンストラクタおよび代入演算子の禁止のため
00055     Xfer(const Xfer&);
00056     Xfer& operator=(const Xfer&);
00057 };
00058 #endif  // XFER_CONVERT_TOPC_HPP