不韋 呂 / Mbed 2 deprecated F746_FrqShifter_Hilbert_MIC

Dependencies:   F746_GUI F746_SAI_IO mbed

Committer:
MikamiUitOpen
Date:
Mon Mar 19 08:00:04 2018 +0000
Revision:
1:af3546588b73
Parent:
0:67554e1407a7
2

Who changed what in which revision?

UserRevisionLine numberNew 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