2Chx3dof Magnetrometer supported M-Series Random Sequence Generator Servo Control

Dependencies:   mbed

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

Committer:
mfurukawa
Date:
Tue Feb 02 17:12:57 2021 +0000
Branch:
MPU-9250-MagSensServo
Revision:
8:07c3cb01a5b6
Parent:
2:3470f2c07582
Child:
9:b32312aacbba
M-Sequence register(16), tap(4), Maximum-Length Validated

Who changed what in which revision?

UserRevisionLine numberNew 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 8:07c3cb01a5b6 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 8:07c3cb01a5b6 61
mfurukawa 8:07c3cb01a5b6 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 8:07c3cb01a5b6 66
mfurukawa 8:07c3cb01a5b6 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 8:07c3cb01a5b6 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 8:07c3cb01a5b6 76 //
mfurukawa 8:07c3cb01a5b6 77 //
mfurukawa 8:07c3cb01a5b6 78 // // 0806(HEX) = [latest] 0001 1111 0101 0000 (2) [oldest]
mfurukawa 8:07c3cb01a5b6 79 // H[0] = 0; // 0000 (oldest)
mfurukawa 8:07c3cb01a5b6 80 // H[1] = 0;
mfurukawa 8:07c3cb01a5b6 81 // H[2] = 0;
mfurukawa 8:07c3cb01a5b6 82 // H[3] = 0;
mfurukawa 8:07c3cb01a5b6 83 //
mfurukawa 8:07c3cb01a5b6 84 // H[4] = 1; // 0101
mfurukawa 8:07c3cb01a5b6 85 // H[5] = 0;
mfurukawa 8:07c3cb01a5b6 86 // H[6] = 1;
mfurukawa 8:07c3cb01a5b6 87 // H[7] = 0;
mfurukawa 8:07c3cb01a5b6 88 //
mfurukawa 8:07c3cb01a5b6 89 // H[8] = 1; // 1111
mfurukawa 8:07c3cb01a5b6 90 // H[9] = 1;
mfurukawa 8:07c3cb01a5b6 91 // H[10] = 1;
mfurukawa 8:07c3cb01a5b6 92 // H[11] = 1;
mfurukawa 8:07c3cb01a5b6 93 //
mfurukawa 8:07c3cb01a5b6 94 // H[12] = 1; // 0001
mfurukawa 8:07c3cb01a5b6 95 // H[13] = 0;
mfurukawa 8:07c3cb01a5b6 96 // H[14] = 0;
mfurukawa 8:07c3cb01a5b6 97 // H[15] = 0;
mfurukawa 1:3bcd844dd707 98 }
mfurukawa 1:3bcd844dd707 99
mfurukawa 1:3bcd844dd707 100 uint8_t update(void)
mfurukawa 1:3bcd844dd707 101 {
mfurukawa 1:3bcd844dd707 102 // update M-series
mfurukawa 1:3bcd844dd707 103 uint8_t Mtmp = M[0] * H[0];
mfurukawa 1:3bcd844dd707 104
mfurukawa 1:3bcd844dd707 105 // one left-shifting on ring buffer
mfurukawa 1:3bcd844dd707 106 M[0] = M[1];
mfurukawa 1:3bcd844dd707 107
mfurukawa 1:3bcd844dd707 108 // take sequential XOR on the entire sequence
mfurukawa 1:3bcd844dd707 109 for (int i = 1 ; i < MSeries_N - 1 ; i++) {
mfurukawa 1:3bcd844dd707 110 // XOR
mfurukawa 1:3bcd844dd707 111 Mtmp = (Mtmp + M[i] * H[i]) % 2;
mfurukawa 1:3bcd844dd707 112
mfurukawa 1:3bcd844dd707 113 // one left-shifting on ring buffer
mfurukawa 1:3bcd844dd707 114 M[i] = M[i + 1];
mfurukawa 1:3bcd844dd707 115 }
mfurukawa 1:3bcd844dd707 116
mfurukawa 1:3bcd844dd707 117 // store the latest value at the last
mfurukawa 1:3bcd844dd707 118 M[MSeries_N - 1] = Mtmp;
mfurukawa 1:3bcd844dd707 119
mfurukawa 1:3bcd844dd707 120 return Mtmp;
mfurukawa 1:3bcd844dd707 121 }
mfurukawa 1:3bcd844dd707 122 };
mfurukawa 1:3bcd844dd707 123
mfurukawa 1:3bcd844dd707 124
mfurukawa 1:3bcd844dd707 125 #endif // __M_SERIES_H__