The experiment using this program is introduced on "Interface" No.12, CQ publishing Co.,Ltd, 2014. 本プログラムを使った実験は,CQ出版社のインターフェース 2014年12月号で紹介しています.
Dependencies: DSProcessingIO mbed
FirBaseClass.hpp@0:b811ec8a7e8a, 2014-07-15 (annotated)
- Committer:
- CQpub0Mikami
- Date:
- Tue Jul 15 08:45:04 2014 +0000
- Revision:
- 0:b811ec8a7e8a
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CQpub0Mikami | 0:b811ec8a7e8a | 1 | //-------------------------------------------------------------- |
CQpub0Mikami | 0:b811ec8a7e8a | 2 | // Virtual base class for FIR filter |
CQpub0Mikami | 0:b811ec8a7e8a | 3 | // Copyright (c) 2014 MIKAMI, Naoki, 2014/06/22 |
CQpub0Mikami | 0:b811ec8a7e8a | 4 | //-------------------------------------------------------------- |
CQpub0Mikami | 0:b811ec8a7e8a | 5 | |
CQpub0Mikami | 0:b811ec8a7e8a | 6 | #ifndef FIR_BASE_HPP |
CQpub0Mikami | 0:b811ec8a7e8a | 7 | #define FIR_BASE_HPP |
CQpub0Mikami | 0:b811ec8a7e8a | 8 | |
CQpub0Mikami | 0:b811ec8a7e8a | 9 | #include "mbed.h" |
CQpub0Mikami | 0:b811ec8a7e8a | 10 | |
CQpub0Mikami | 0:b811ec8a7e8a | 11 | namespace Mikami |
CQpub0Mikami | 0:b811ec8a7e8a | 12 | { |
CQpub0Mikami | 0:b811ec8a7e8a | 13 | template<int order> class FirBase |
CQpub0Mikami | 0:b811ec8a7e8a | 14 | { |
CQpub0Mikami | 0:b811ec8a7e8a | 15 | private: |
CQpub0Mikami | 0:b811ec8a7e8a | 16 | FirBase(const FirBase&); |
CQpub0Mikami | 0:b811ec8a7e8a | 17 | FirBase& operator=(const FirBase&); |
CQpub0Mikami | 0:b811ec8a7e8a | 18 | protected: |
CQpub0Mikami | 0:b811ec8a7e8a | 19 | const float *const hm_; // pointer for filter coefficients |
CQpub0Mikami | 0:b811ec8a7e8a | 20 | float xn_[order+1]; // buffer for inputs |
CQpub0Mikami | 0:b811ec8a7e8a | 21 | |
CQpub0Mikami | 0:b811ec8a7e8a | 22 | // Constructor |
CQpub0Mikami | 0:b811ec8a7e8a | 23 | FirBase(const float hk[]) : hm_(hk) { Clear(); } |
CQpub0Mikami | 0:b811ec8a7e8a | 24 | |
CQpub0Mikami | 0:b811ec8a7e8a | 25 | // Execute filter |
CQpub0Mikami | 0:b811ec8a7e8a | 26 | virtual float Execute(float xin) = 0; |
CQpub0Mikami | 0:b811ec8a7e8a | 27 | |
CQpub0Mikami | 0:b811ec8a7e8a | 28 | // Move signals in xn_[] |
CQpub0Mikami | 0:b811ec8a7e8a | 29 | void Move() |
CQpub0Mikami | 0:b811ec8a7e8a | 30 | { |
CQpub0Mikami | 0:b811ec8a7e8a | 31 | for (int k=order; k>0; k--) |
CQpub0Mikami | 0:b811ec8a7e8a | 32 | xn_[k] = xn_[k-1]; // move input signals |
CQpub0Mikami | 0:b811ec8a7e8a | 33 | } |
CQpub0Mikami | 0:b811ec8a7e8a | 34 | public: |
CQpub0Mikami | 0:b811ec8a7e8a | 35 | void Clear() |
CQpub0Mikami | 0:b811ec8a7e8a | 36 | { |
CQpub0Mikami | 0:b811ec8a7e8a | 37 | for (int k=0; k<=order; k++) xn_[k] = 0.0; |
CQpub0Mikami | 0:b811ec8a7e8a | 38 | } |
CQpub0Mikami | 0:b811ec8a7e8a | 39 | }; |
CQpub0Mikami | 0:b811ec8a7e8a | 40 | } |
CQpub0Mikami | 0:b811ec8a7e8a | 41 | #endif // FIR_BASE_HPP |