Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: F746_GUI F746_SAI_IO mbed
MyAcousticEffector_MIC/HilbertTransform.hpp@1:af3546588b73, 2018-03-19 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Mar 19 08:00:04 2018 +0000
- Revision:
- 1:af3546588b73
- Parent:
- 0:67554e1407a7
2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:67554e1407a7 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:67554e1407a7 | 2 | // ヒルベルト変換用フィルタ |
MikamiUitOpen | 0:67554e1407a7 | 3 | // |
MikamiUitOpen | 0:67554e1407a7 | 4 | // Copyright (c) 2018 MIKAMI, Naoki, 2018/03/19 |
MikamiUitOpen | 0:67554e1407a7 | 5 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:67554e1407a7 | 6 | |
MikamiUitOpen | 0:67554e1407a7 | 7 | #ifndef HILBERT_TRANSFORM_HPP |
MikamiUitOpen | 0:67554e1407a7 | 8 | #define HILBERT_TRANSFORM_HPP |
MikamiUitOpen | 0:67554e1407a7 | 9 | |
MikamiUitOpen | 0:67554e1407a7 | 10 | #include "mbed.h" |
MikamiUitOpen | 0:67554e1407a7 | 11 | |
MikamiUitOpen | 0:67554e1407a7 | 12 | namespace Mikami |
MikamiUitOpen | 0:67554e1407a7 | 13 | { |
MikamiUitOpen | 0:67554e1407a7 | 14 | class Hilbert |
MikamiUitOpen | 0:67554e1407a7 | 15 | { |
MikamiUitOpen | 0:67554e1407a7 | 16 | public: |
MikamiUitOpen | 0:67554e1407a7 | 17 | // order: 4K+2 とすること, K: 整数 |
MikamiUitOpen | 0:67554e1407a7 | 18 | Hilbert(int order, const float hk[]) |
MikamiUitOpen | 1:af3546588b73 | 19 | : ORDER_(order), HN_((order-2)/4+1, hk), xn_(order+1, 0.0f) |
MikamiUitOpen | 0:67554e1407a7 | 20 | { |
MikamiUitOpen | 0:67554e1407a7 | 21 | if ( ((order-2) % 4) != 0) |
MikamiUitOpen | 0:67554e1407a7 | 22 | fprintf(stderr, "order must be 4*K+2, K: integer\r\n"); |
MikamiUitOpen | 0:67554e1407a7 | 23 | } |
MikamiUitOpen | 0:67554e1407a7 | 24 | |
MikamiUitOpen | 0:67554e1407a7 | 25 | // yI: 同相信号 |
MikamiUitOpen | 0:67554e1407a7 | 26 | // yQ: 直角位相信号 |
MikamiUitOpen | 0:67554e1407a7 | 27 | void Execute(float xin, float& yI, float& yQ) |
MikamiUitOpen | 0:67554e1407a7 | 28 | { |
MikamiUitOpen | 0:67554e1407a7 | 29 | yQ = 0.0; |
MikamiUitOpen | 0:67554e1407a7 | 30 | xn_[0] = xin; |
MikamiUitOpen | 0:67554e1407a7 | 31 | |
MikamiUitOpen | 0:67554e1407a7 | 32 | for (int k=0; k<=ORDER_/4; k++) |
MikamiUitOpen | 0:67554e1407a7 | 33 | yQ = yQ + HN_[k]*(xn_[2*k] - xn_[ORDER_-2*k]); |
MikamiUitOpen | 0:67554e1407a7 | 34 | yI = xn_[ORDER_/2]; // 同相信号 |
MikamiUitOpen | 0:67554e1407a7 | 35 | |
MikamiUitOpen | 0:67554e1407a7 | 36 | for (int k=ORDER_; k>0; k--) |
MikamiUitOpen | 0:67554e1407a7 | 37 | xn_[k] = xn_[k-1]; // 遅延器の入力信号の移動 |
MikamiUitOpen | 0:67554e1407a7 | 38 | } |
MikamiUitOpen | 0:67554e1407a7 | 39 | |
MikamiUitOpen | 0:67554e1407a7 | 40 | private: |
MikamiUitOpen | 0:67554e1407a7 | 41 | const int ORDER_; // 次数 |
MikamiUitOpen | 0:67554e1407a7 | 42 | const Array<float> HN_; // 係数 |
MikamiUitOpen | 0:67554e1407a7 | 43 | Array<float> xn_; // 入力信号用バッファ |
MikamiUitOpen | 0:67554e1407a7 | 44 | |
MikamiUitOpen | 0:67554e1407a7 | 45 | // disallow copy constructor and assignment operator |
MikamiUitOpen | 0:67554e1407a7 | 46 | Hilbert(const Hilbert&); |
MikamiUitOpen | 0:67554e1407a7 | 47 | Hilbert& operator=(const Hilbert&); |
MikamiUitOpen | 0:67554e1407a7 | 48 | }; |
MikamiUitOpen | 0:67554e1407a7 | 49 | } |
MikamiUitOpen | 0:67554e1407a7 | 50 | #endif // HILBERT_TRANSFORM_HPP |
MikamiUitOpen | 0:67554e1407a7 | 51 | |
MikamiUitOpen | 0:67554e1407a7 | 52 |