Nucleo-F446RE 内蔵の AD/DA を使うためのライブラリ.DA からの出力は,標本化周波数の4倍のレートで行う. このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Multirate. Library for built-in ADC and DAC in Nucleo-F446RE. Sampling rate for DAC is four times of that for ADC.
Dependents: F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver Demo_F446_AD_DA_Multirate ... more
Biquad.hpp@0:2447a7d225b1, 2018-05-16 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed May 16 01:40:50 2018 +0000
- Revision:
- 0:2447a7d225b1
- Child:
- 7:6275fe158ae8
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:2447a7d225b1 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:2447a7d225b1 | 2 | // 縦続形 IIR フィルタの構成要素として使う 2 次の IIR フィルタ |
MikamiUitOpen | 0:2447a7d225b1 | 3 | // b0 は 1 と仮定している |
MikamiUitOpen | 0:2447a7d225b1 | 4 | // |
MikamiUitOpen | 0:2447a7d225b1 | 5 | // 2018/04/19, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:2447a7d225b1 | 6 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:2447a7d225b1 | 7 | |
MikamiUitOpen | 0:2447a7d225b1 | 8 | #ifndef IIR_BIQUAD_HPP |
MikamiUitOpen | 0:2447a7d225b1 | 9 | #define IIR_BIQUAD_HPP |
MikamiUitOpen | 0:2447a7d225b1 | 10 | |
MikamiUitOpen | 0:2447a7d225b1 | 11 | #include "mbed.h" |
MikamiUitOpen | 0:2447a7d225b1 | 12 | |
MikamiUitOpen | 0:2447a7d225b1 | 13 | // 2 次の IIR フィルタ |
MikamiUitOpen | 0:2447a7d225b1 | 14 | class Biquad |
MikamiUitOpen | 0:2447a7d225b1 | 15 | { |
MikamiUitOpen | 0:2447a7d225b1 | 16 | public: |
MikamiUitOpen | 0:2447a7d225b1 | 17 | // フィルタの係数をまとめて扱うための構造体 |
MikamiUitOpen | 0:2447a7d225b1 | 18 | struct Coefs { float a1, a2, b1, b2; }; |
MikamiUitOpen | 0:2447a7d225b1 | 19 | |
MikamiUitOpen | 0:2447a7d225b1 | 20 | // デフォルト・コンストラクタ |
MikamiUitOpen | 0:2447a7d225b1 | 21 | // 係数は構造体 Ceofs で与える |
MikamiUitOpen | 0:2447a7d225b1 | 22 | Biquad(const Coefs ck = (Coefs){0, 0, 0, 0}) |
MikamiUitOpen | 0:2447a7d225b1 | 23 | : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2) |
MikamiUitOpen | 0:2447a7d225b1 | 24 | { Clear(); } |
MikamiUitOpen | 0:2447a7d225b1 | 25 | |
MikamiUitOpen | 0:2447a7d225b1 | 26 | // 係数を個別に与えるコンストラクタ |
MikamiUitOpen | 0:2447a7d225b1 | 27 | Biquad(float a1, float a2, float b1, float b2) |
MikamiUitOpen | 0:2447a7d225b1 | 28 | : a1_(a1), a2_(a2), b1_(b1), b2_(b2) |
MikamiUitOpen | 0:2447a7d225b1 | 29 | { Clear(); } |
MikamiUitOpen | 0:2447a7d225b1 | 30 | |
MikamiUitOpen | 0:2447a7d225b1 | 31 | // 2 次のフィルタを実行する |
MikamiUitOpen | 0:2447a7d225b1 | 32 | float Execute(float xn) |
MikamiUitOpen | 0:2447a7d225b1 | 33 | { |
MikamiUitOpen | 0:2447a7d225b1 | 34 | float un = xn + a1_*un1_ + a2_*un2_; |
MikamiUitOpen | 0:2447a7d225b1 | 35 | float yn = un + b1_*un1_ + b2_*un2_; |
MikamiUitOpen | 0:2447a7d225b1 | 36 | |
MikamiUitOpen | 0:2447a7d225b1 | 37 | un2_ = un1_; |
MikamiUitOpen | 0:2447a7d225b1 | 38 | un1_ = un; |
MikamiUitOpen | 0:2447a7d225b1 | 39 | |
MikamiUitOpen | 0:2447a7d225b1 | 40 | return yn; |
MikamiUitOpen | 0:2447a7d225b1 | 41 | } |
MikamiUitOpen | 0:2447a7d225b1 | 42 | |
MikamiUitOpen | 0:2447a7d225b1 | 43 | // 係数を設定する |
MikamiUitOpen | 0:2447a7d225b1 | 44 | void SetCoefs(const Coefs ck) |
MikamiUitOpen | 0:2447a7d225b1 | 45 | { |
MikamiUitOpen | 0:2447a7d225b1 | 46 | a1_ = ck.a1; |
MikamiUitOpen | 0:2447a7d225b1 | 47 | a2_ = ck.a2; |
MikamiUitOpen | 0:2447a7d225b1 | 48 | b1_ = ck.b1; |
MikamiUitOpen | 0:2447a7d225b1 | 49 | b2_ = ck.b2; |
MikamiUitOpen | 0:2447a7d225b1 | 50 | } |
MikamiUitOpen | 0:2447a7d225b1 | 51 | |
MikamiUitOpen | 0:2447a7d225b1 | 52 | // 内部変数(遅延器)のクリア |
MikamiUitOpen | 0:2447a7d225b1 | 53 | void Clear() { un1_ = un2_ = 0; } |
MikamiUitOpen | 0:2447a7d225b1 | 54 | |
MikamiUitOpen | 0:2447a7d225b1 | 55 | private: |
MikamiUitOpen | 0:2447a7d225b1 | 56 | float a1_, a2_, b1_, b2_; |
MikamiUitOpen | 0:2447a7d225b1 | 57 | float un1_, un2_; |
MikamiUitOpen | 0:2447a7d225b1 | 58 | |
MikamiUitOpen | 0:2447a7d225b1 | 59 | // コピー・コンストラクタ禁止 |
MikamiUitOpen | 0:2447a7d225b1 | 60 | Biquad(const Biquad&); |
MikamiUitOpen | 0:2447a7d225b1 | 61 | // 代入禁止 |
MikamiUitOpen | 0:2447a7d225b1 | 62 | Biquad& operator=(const Biquad&); |
MikamiUitOpen | 0:2447a7d225b1 | 63 | }; |
MikamiUitOpen | 0:2447a7d225b1 | 64 | |
MikamiUitOpen | 0:2447a7d225b1 | 65 | #endif // IIR_BIQUAD_HPP |