2Chx3dof Magnetrometer supported M-Series Random Sequence Generator Servo Control
Sampling Frequency
Sampling Frequency in main.cpp
#define SampleFreq 200 // [Hz]
Auto Stop Setting
Auto-stop Timer 15sec after
// auto-stop when 15sec after if(smpl_cnt>3000){stop_dump();}
The number of 3000 means Sample Count. The number is given by SampleFreq[Hz] * Auto-Stop Time [sec].
M-Series Random Sequence
M-series Random Update Term in main.cpp
// M-series update flag #define M_TERM 200;
Unit is sample count.
cf.) 200 equals to 200 [samples] which equals to 1 [second] where SampleFreq = 200 [Hz}.
See above.
M-Series Random Servo Control
M-Series.h@9:b32312aacbba, 2021-02-02 (annotated)
- Committer:
- mfurukawa
- Date:
- Tue Feb 02 17:24:02 2021 +0000
- Branch:
- MPU-9250-MagSensServo
- Revision:
- 9:b32312aacbba
- Parent:
- 8:07c3cb01a5b6
Finished
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mfurukawa | 1:3bcd844dd707 | 1 | // |
mfurukawa | 1:3bcd844dd707 | 2 | // M-Series Random Sequence Generator |
mfurukawa | 1:3bcd844dd707 | 3 | // |
mfurukawa | 1:3bcd844dd707 | 4 | // Masahiro Furukawa, m.furukawa@ist.osaka-u.ac.jp |
mfurukawa | 1:3bcd844dd707 | 5 | // Feb 2, 2021 |
mfurukawa | 1:3bcd844dd707 | 6 | |
mfurukawa | 1:3bcd844dd707 | 7 | // m-sequence |
mfurukawa | 1:3bcd844dd707 | 8 | // https://okasho-engineer.com/m-sequence/ |
mfurukawa | 8:07c3cb01a5b6 | 9 | // |
mfurukawa | 8:07c3cb01a5b6 | 10 | // Maximum-Length Tap Position and Number of taps |
mfurukawa | 8:07c3cb01a5b6 | 11 | // http://wista.jp/M-Seq.htm |
mfurukawa | 8:07c3cb01a5b6 | 12 | // |
mfurukawa | 8:07c3cb01a5b6 | 13 | // 既約多項式 |
mfurukawa | 8:07c3cb01a5b6 | 14 | // https://www.nagoya-bunri.ac.jp//~t-ymzm/rand/rand_mseq4.html |
mfurukawa | 1:3bcd844dd707 | 15 | |
mfurukawa | 1:3bcd844dd707 | 16 | #ifndef __M_SERIES_H__ |
mfurukawa | 1:3bcd844dd707 | 17 | #define __M_SERIES_H__ |
mfurukawa | 1:3bcd844dd707 | 18 | |
mfurukawa | 1:3bcd844dd707 | 19 | #define MSeries_N 16 |
mfurukawa | 1:3bcd844dd707 | 20 | |
mfurukawa | 1:3bcd844dd707 | 21 | // m-series definition |
mfurukawa | 1:3bcd844dd707 | 22 | class Mseries |
mfurukawa | 1:3bcd844dd707 | 23 | { |
mfurukawa | 1:3bcd844dd707 | 24 | private: |
mfurukawa | 1:3bcd844dd707 | 25 | uint8_t M[MSeries_N]; |
mfurukawa | 1:3bcd844dd707 | 26 | uint8_t H[MSeries_N]; |
mfurukawa | 1:3bcd844dd707 | 27 | |
mfurukawa | 1:3bcd844dd707 | 28 | public: |
mfurukawa | 1:3bcd844dd707 | 29 | Mseries() |
mfurukawa | 1:3bcd844dd707 | 30 | { |
mfurukawa | 8:07c3cb01a5b6 | 31 | init(); |
mfurukawa | 8:07c3cb01a5b6 | 32 | } |
mfurukawa | 8:07c3cb01a5b6 | 33 | |
mfurukawa | 8:07c3cb01a5b6 | 34 | void init(void) |
mfurukawa | 8:07c3cb01a5b6 | 35 | { |
mfurukawa | 1:3bcd844dd707 | 36 | // the following initial values are not validated |
mfurukawa | 1:3bcd844dd707 | 37 | M[0] = 0; |
mfurukawa | 1:3bcd844dd707 | 38 | M[1] = 0; |
mfurukawa | 1:3bcd844dd707 | 39 | M[2] = 0; |
mfurukawa | 1:3bcd844dd707 | 40 | M[3] = 1; |
mfurukawa | 1:3bcd844dd707 | 41 | M[4] = 0; |
mfurukawa | 1:3bcd844dd707 | 42 | M[5] = 0; |
mfurukawa | 1:3bcd844dd707 | 43 | M[6] = 0; |
mfurukawa | 1:3bcd844dd707 | 44 | M[7] = 1; |
mfurukawa | 1:3bcd844dd707 | 45 | M[8] = 0; |
mfurukawa | 1:3bcd844dd707 | 46 | M[9] = 0; |
mfurukawa | 1:3bcd844dd707 | 47 | M[10] = 0; |
mfurukawa | 1:3bcd844dd707 | 48 | M[11] = 1; |
mfurukawa | 1:3bcd844dd707 | 49 | M[12] = 0; |
mfurukawa | 1:3bcd844dd707 | 50 | M[13] = 0; |
mfurukawa | 1:3bcd844dd707 | 51 | M[14] = 0; |
mfurukawa | 1:3bcd844dd707 | 52 | M[15] = 1; |
mfurukawa | 1:3bcd844dd707 | 53 | |
mfurukawa | 8:07c3cb01a5b6 | 54 | // Maximum-Length Tap Position and Number of taps |
mfurukawa | 8:07c3cb01a5b6 | 55 | // http://www5b.biglobe.ne.jp/~pisan/radio-Msequence.htm |
mfurukawa | 8:07c3cb01a5b6 | 56 | // |
mfurukawa | 9:b32312aacbba | 57 | H[0] = 1; |
mfurukawa | 1:3bcd844dd707 | 58 | H[1] = 0; |
mfurukawa | 8:07c3cb01a5b6 | 59 | H[2] = 1; |
mfurukawa | 8:07c3cb01a5b6 | 60 | H[3] = 0; |
mfurukawa | 9:b32312aacbba | 61 | |
mfurukawa | 9:b32312aacbba | 62 | H[4] = 0; |
mfurukawa | 1:3bcd844dd707 | 63 | H[5] = 0; |
mfurukawa | 1:3bcd844dd707 | 64 | H[6] = 0; |
mfurukawa | 8:07c3cb01a5b6 | 65 | H[7] = 0; |
mfurukawa | 9:b32312aacbba | 66 | |
mfurukawa | 9:b32312aacbba | 67 | H[8] = 0; |
mfurukawa | 8:07c3cb01a5b6 | 68 | H[9] = 0; |
mfurukawa | 1:3bcd844dd707 | 69 | H[10] = 0; |
mfurukawa | 1:3bcd844dd707 | 70 | H[11] = 1; |
mfurukawa | 9:b32312aacbba | 71 | |
mfurukawa | 8:07c3cb01a5b6 | 72 | H[12] = 0; |
mfurukawa | 1:3bcd844dd707 | 73 | H[13] = 0; |
mfurukawa | 1:3bcd844dd707 | 74 | H[14] = 0; |
mfurukawa | 1:3bcd844dd707 | 75 | H[15] = 1; |
mfurukawa | 9:b32312aacbba | 76 | |
mfurukawa | 1:3bcd844dd707 | 77 | } |
mfurukawa | 1:3bcd844dd707 | 78 | |
mfurukawa | 1:3bcd844dd707 | 79 | uint8_t update(void) |
mfurukawa | 1:3bcd844dd707 | 80 | { |
mfurukawa | 1:3bcd844dd707 | 81 | // update M-series |
mfurukawa | 1:3bcd844dd707 | 82 | uint8_t Mtmp = M[0] * H[0]; |
mfurukawa | 1:3bcd844dd707 | 83 | |
mfurukawa | 1:3bcd844dd707 | 84 | // one left-shifting on ring buffer |
mfurukawa | 1:3bcd844dd707 | 85 | M[0] = M[1]; |
mfurukawa | 1:3bcd844dd707 | 86 | |
mfurukawa | 1:3bcd844dd707 | 87 | // take sequential XOR on the entire sequence |
mfurukawa | 1:3bcd844dd707 | 88 | for (int i = 1 ; i < MSeries_N - 1 ; i++) { |
mfurukawa | 1:3bcd844dd707 | 89 | // XOR |
mfurukawa | 1:3bcd844dd707 | 90 | Mtmp = (Mtmp + M[i] * H[i]) % 2; |
mfurukawa | 1:3bcd844dd707 | 91 | |
mfurukawa | 1:3bcd844dd707 | 92 | // one left-shifting on ring buffer |
mfurukawa | 1:3bcd844dd707 | 93 | M[i] = M[i + 1]; |
mfurukawa | 1:3bcd844dd707 | 94 | } |
mfurukawa | 1:3bcd844dd707 | 95 | |
mfurukawa | 1:3bcd844dd707 | 96 | // store the latest value at the last |
mfurukawa | 1:3bcd844dd707 | 97 | M[MSeries_N - 1] = Mtmp; |
mfurukawa | 1:3bcd844dd707 | 98 | |
mfurukawa | 9:b32312aacbba | 99 | return get(); |
mfurukawa | 9:b32312aacbba | 100 | } |
mfurukawa | 9:b32312aacbba | 101 | |
mfurukawa | 9:b32312aacbba | 102 | uint8_t get(void) |
mfurukawa | 9:b32312aacbba | 103 | { |
mfurukawa | 9:b32312aacbba | 104 | return M[15]; |
mfurukawa | 1:3bcd844dd707 | 105 | } |
mfurukawa | 1:3bcd844dd707 | 106 | }; |
mfurukawa | 1:3bcd844dd707 | 107 | |
mfurukawa | 1:3bcd844dd707 | 108 | |
mfurukawa | 1:3bcd844dd707 | 109 | #endif // __M_SERIES_H__ |