FFT アナライザ このプログラムの説明は,CQ出版社「トランジスタ技術」の2021年10月号から開始された連載記事「STM32マイコンではじめるPC計測」の中にあります.このプログラムといっしょに使うPC側のプログラムについても同誌を参照してください.

Dependencies:   Array_Matrix mbed SerialTxRxIntr DSP_ADDA UIT_FFT_Real Window

Committer:
MikamiUitOpen
Date:
Wed Nov 03 01:29:16 2021 +0000
Revision:
1:d9dbfbe95c8d
Parent:
0:e5fc70976c00
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:e5fc70976c00 1 //--------------------------------------------------------
MikamiUitOpen 0:e5fc70976c00 2 // ダブル・バッファの template クラス
MikamiUitOpen 0:e5fc70976c00 3 // バッファに2次元配列(Matrix クラス)を使用
MikamiUitOpen 0:e5fc70976c00 4 //
MikamiUitOpen 1:d9dbfbe95c8d 5 // 2021/10/22, Copyright (c) 2021 MIKAMI, Naoki
MikamiUitOpen 0:e5fc70976c00 6 //--------------------------------------------------------
MikamiUitOpen 0:e5fc70976c00 7
MikamiUitOpen 0:e5fc70976c00 8 #ifndef DOUBLE_BUFFER_HPP
MikamiUitOpen 0:e5fc70976c00 9 #define DOUBLE_BUFFER_HPP
MikamiUitOpen 0:e5fc70976c00 10
MikamiUitOpen 0:e5fc70976c00 11 #include "Matrix.hpp"
MikamiUitOpen 0:e5fc70976c00 12 using namespace Mikami;
MikamiUitOpen 0:e5fc70976c00 13
MikamiUitOpen 1:d9dbfbe95c8d 14 class DoubleBuffer
MikamiUitOpen 0:e5fc70976c00 15 {
MikamiUitOpen 0:e5fc70976c00 16 public:
MikamiUitOpen 0:e5fc70976c00 17 // コンストラクタ
MikamiUitOpen 1:d9dbfbe95c8d 18 explicit DoubleBuffer(int size, float initialValue = 0)
MikamiUitOpen 0:e5fc70976c00 19 : N_(size), buf_(2, size, initialValue), ping_(0), pong_(1),
MikamiUitOpen 0:e5fc70976c00 20 index_(0), full_(false) {}
MikamiUitOpen 0:e5fc70976c00 21
MikamiUitOpen 0:e5fc70976c00 22 // データを格納
MikamiUitOpen 1:d9dbfbe95c8d 23 void Store(float data) { buf_[ping_][index_++] = data; }
MikamiUitOpen 0:e5fc70976c00 24
MikamiUitOpen 0:e5fc70976c00 25 // 出力バッファからデータの取り出し
MikamiUitOpen 1:d9dbfbe95c8d 26 float Get(int n) const { return buf_[pong_][n]; }
MikamiUitOpen 0:e5fc70976c00 27
MikamiUitOpen 0:e5fc70976c00 28 // バッファが満杯でバッファを切り替える
MikamiUitOpen 0:e5fc70976c00 29 void IsFullSwitch()
MikamiUitOpen 0:e5fc70976c00 30 {
MikamiUitOpen 0:e5fc70976c00 31 if (index_ < N_) return;
MikamiUitOpen 0:e5fc70976c00 32
MikamiUitOpen 0:e5fc70976c00 33 ping_ ^= 0x1; // バッファ切換えのため
MikamiUitOpen 0:e5fc70976c00 34 pong_ ^= 0x1; // バッファ切換えのため
MikamiUitOpen 0:e5fc70976c00 35 index_ = 0;
MikamiUitOpen 0:e5fc70976c00 36 full_ = true;
MikamiUitOpen 0:e5fc70976c00 37 }
MikamiUitOpen 0:e5fc70976c00 38
MikamiUitOpen 0:e5fc70976c00 39 // バッファが満杯で,true を返す
MikamiUitOpen 0:e5fc70976c00 40 bool IsFull()
MikamiUitOpen 0:e5fc70976c00 41 {
MikamiUitOpen 0:e5fc70976c00 42 bool temp = full_;
MikamiUitOpen 0:e5fc70976c00 43 if (full_) full_ = false;
MikamiUitOpen 0:e5fc70976c00 44 return temp;
MikamiUitOpen 0:e5fc70976c00 45 }
MikamiUitOpen 0:e5fc70976c00 46
MikamiUitOpen 0:e5fc70976c00 47 private:
MikamiUitOpen 0:e5fc70976c00 48 const int N_; // バッファのサイズ
MikamiUitOpen 1:d9dbfbe95c8d 49 Matrix<float> buf_; // バッファ
MikamiUitOpen 0:e5fc70976c00 50 int ping_, pong_; // バッファ切替用
MikamiUitOpen 0:e5fc70976c00 51 int index_; // 入力データのカウンタ
MikamiUitOpen 0:e5fc70976c00 52 bool full_; // 満杯の場合 true
MikamiUitOpen 0:e5fc70976c00 53
MikamiUitOpen 0:e5fc70976c00 54 // コピー・コンストラクタおよび代入演算子の禁止のため
MikamiUitOpen 0:e5fc70976c00 55 DoubleBuffer(const DoubleBuffer&);
MikamiUitOpen 0:e5fc70976c00 56 DoubleBuffer& operator=(const DoubleBuffer&);
MikamiUitOpen 0:e5fc70976c00 57 };
MikamiUitOpen 0:e5fc70976c00 58 #endif // DOUBLE_BUFFER_HPP