不韋 呂
/
CQ_FixedPointSinCos
CQ出版社インターフェース誌の2017年10月号で解説している二相発振器のプログラム
FixedFloat.hpp@0:97d46bd73383, 2017-08-02 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Aug 02 11:50:17 2017 +0000
- Revision:
- 0:97d46bd73383
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:97d46bd73383 | 1 | //------------------------------------------------------------------- |
MikamiUitOpen | 0:97d46bd73383 | 2 | // 固定小数点数の演算を扱う際に使うインライン関数 |
MikamiUitOpen | 0:97d46bd73383 | 3 | // |
MikamiUitOpen | 0:97d46bd73383 | 4 | // 2017/03/03, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:97d46bd73383 | 5 | //------------------------------------------------------------------- |
MikamiUitOpen | 0:97d46bd73383 | 6 | #include "mbed.h" |
MikamiUitOpen | 0:97d46bd73383 | 7 | |
MikamiUitOpen | 0:97d46bd73383 | 8 | #ifndef QN_INLINE_FUNCTIONS_HPP |
MikamiUitOpen | 0:97d46bd73383 | 9 | #define QN_INLINE_FUNCTIONS_HPP |
MikamiUitOpen | 0:97d46bd73383 | 10 | |
MikamiUitOpen | 0:97d46bd73383 | 11 | // 丸めのために使う |
MikamiUitOpen | 0:97d46bd73383 | 12 | inline float ForRound(float x) |
MikamiUitOpen | 0:97d46bd73383 | 13 | { return (x > 0) ? 0.5f : -0.5f; } |
MikamiUitOpen | 0:97d46bd73383 | 14 | |
MikamiUitOpen | 0:97d46bd73383 | 15 | // float 型の引数を int16_t 型の Q14 に変換する |
MikamiUitOpen | 0:97d46bd73383 | 16 | inline int16_t ToFixed14(float x) |
MikamiUitOpen | 0:97d46bd73383 | 17 | { return (int16_t)(x*16384.0f + ForRound(x)); } |
MikamiUitOpen | 0:97d46bd73383 | 18 | |
MikamiUitOpen | 0:97d46bd73383 | 19 | // float 型の引数を int16_t 型の Q15 に変換する |
MikamiUitOpen | 0:97d46bd73383 | 20 | inline int16_t ToFixed15(float x) |
MikamiUitOpen | 0:97d46bd73383 | 21 | { return (int16_t)(x*32768.0f + ForRound(x)); } |
MikamiUitOpen | 0:97d46bd73383 | 22 | |
MikamiUitOpen | 0:97d46bd73383 | 23 | // float 型の引数を int16_t 型の Q29 に変換する |
MikamiUitOpen | 0:97d46bd73383 | 24 | inline int32_t ToFixed29(float x) |
MikamiUitOpen | 0:97d46bd73383 | 25 | { return (int32_t)(x*32768.0f*16384.0f); } |
MikamiUitOpen | 0:97d46bd73383 | 26 | |
MikamiUitOpen | 0:97d46bd73383 | 27 | // 下位ビットを丸めて右に 14 ビットシフトする |
MikamiUitOpen | 0:97d46bd73383 | 28 | inline int32_t Round14(int32_t x) |
MikamiUitOpen | 0:97d46bd73383 | 29 | { return (x + 0x2000) >> 14; } |
MikamiUitOpen | 0:97d46bd73383 | 30 | |
MikamiUitOpen | 0:97d46bd73383 | 31 | // 下位ビットを丸めて右に 154 ビットシフトする |
MikamiUitOpen | 0:97d46bd73383 | 32 | inline int32_t Round15(int32_t x) |
MikamiUitOpen | 0:97d46bd73383 | 33 | { return (x + 0x4000) >> 15; } |
MikamiUitOpen | 0:97d46bd73383 | 34 | |
MikamiUitOpen | 0:97d46bd73383 | 35 | #endif // QN_INLINE_FUNCTIONS_HPP |