The experiment using this program is introduced on "Interface" No.12, CQ publishing Co.,Ltd, 2014. 本プログラムを使った実験は,CQ出版社のインターフェース 2014年12月号で紹介しています.
Dependencies: DSProcessingIO mbed
FIR_LPF_Direct.cpp@1:b0a0a1ab01be, 2014-07-29 (annotated)
- Committer:
- CQpub0Mikami
- Date:
- Tue Jul 29 06:53:35 2014 +0000
- Revision:
- 1:b0a0a1ab01be
- Parent:
- 0:b811ec8a7e8a
ver.2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CQpub0Mikami | 0:b811ec8a7e8a | 1 | //-------------------------------------------------------------- |
CQpub0Mikami | 0:b811ec8a7e8a | 2 | // FIR filter: Even order, Direct form |
CQpub0Mikami | 0:b811ec8a7e8a | 3 | // |
CQpub0Mikami | 0:b811ec8a7e8a | 4 | // Copyright (c) 2014 MIKAMI, Naoki, 2014/07/15 |
CQpub0Mikami | 0:b811ec8a7e8a | 5 | //-------------------------------------------------------------- |
CQpub0Mikami | 0:b811ec8a7e8a | 6 | |
CQpub0Mikami | 0:b811ec8a7e8a | 7 | #include "mbed.h" |
CQpub0Mikami | 0:b811ec8a7e8a | 8 | #include "AdcInternal.hpp" |
CQpub0Mikami | 0:b811ec8a7e8a | 9 | #include "MCP4922Single.hpp" |
CQpub0Mikami | 0:b811ec8a7e8a | 10 | #include "coefficients_200.hpp" |
CQpub0Mikami | 0:b811ec8a7e8a | 11 | #include "FIR_Direct.hpp" |
CQpub0Mikami | 0:b811ec8a7e8a | 12 | |
CQpub0Mikami | 0:b811ec8a7e8a | 13 | using namespace Mikami; |
CQpub0Mikami | 0:b811ec8a7e8a | 14 | |
CQpub0Mikami | 0:b811ec8a7e8a | 15 | // sampling frequency |
CQpub0Mikami | 0:b811ec8a7e8a | 16 | const float FS_ = 10.0e3f; |
CQpub0Mikami | 0:b811ec8a7e8a | 17 | |
CQpub0Mikami | 0:b811ec8a7e8a | 18 | // for AD converter |
CQpub0Mikami | 0:b811ec8a7e8a | 19 | Adc adc_(A0); |
CQpub0Mikami | 0:b811ec8a7e8a | 20 | // for DA converter |
CQpub0Mikami | 0:b811ec8a7e8a | 21 | Dac dacA_(Dac::DAC_A); |
CQpub0Mikami | 0:b811ec8a7e8a | 22 | |
CQpub0Mikami | 0:b811ec8a7e8a | 23 | Ticker timer_; // for timer interrupt |
CQpub0Mikami | 0:b811ec8a7e8a | 24 | DigitalOut pinD8_(D8); // for measurement of execution time |
CQpub0Mikami | 0:b811ec8a7e8a | 25 | |
CQpub0Mikami | 0:b811ec8a7e8a | 26 | FirDirect<ORDER_> lpf(hm_); |
CQpub0Mikami | 0:b811ec8a7e8a | 27 | |
CQpub0Mikami | 0:b811ec8a7e8a | 28 | // Called every 0.1 ms |
CQpub0Mikami | 0:b811ec8a7e8a | 29 | void TimerIsr() |
CQpub0Mikami | 0:b811ec8a7e8a | 30 | { |
CQpub0Mikami | 0:b811ec8a7e8a | 31 | float xn = adc_.Read(); // input |
CQpub0Mikami | 0:b811ec8a7e8a | 32 | |
CQpub0Mikami | 0:b811ec8a7e8a | 33 | // Execute FIR filter |
CQpub0Mikami | 0:b811ec8a7e8a | 34 | float yn = lpf.Execute(xn); |
CQpub0Mikami | 0:b811ec8a7e8a | 35 | |
CQpub0Mikami | 0:b811ec8a7e8a | 36 | dacA_.Write(yn); // output |
CQpub0Mikami | 0:b811ec8a7e8a | 37 | } |
CQpub0Mikami | 0:b811ec8a7e8a | 38 | |
CQpub0Mikami | 0:b811ec8a7e8a | 39 | int main() |
CQpub0Mikami | 0:b811ec8a7e8a | 40 | { |
CQpub0Mikami | 0:b811ec8a7e8a | 41 | timer_.attach_us(&TimerIsr, 1.0e6f/FS_); |
CQpub0Mikami | 0:b811ec8a7e8a | 42 | |
CQpub0Mikami | 0:b811ec8a7e8a | 43 | while (true) {} // infinite loop |
CQpub0Mikami | 0:b811ec8a7e8a | 44 | } |