Mirror actuator for RT2 lab

Dependencies:   FastPWM

Committer:
altb2
Date:
Sun May 02 08:55:44 2021 +0000
Revision:
16:28b6bb8a4b7f
Parent:
15:9f32f64eee5b
Final commit 4 students

Who changed what in which revision?

UserRevisionLine numberNew contents of line
altb2 15:9f32f64eee5b 1 /*
altb2 15:9f32f64eee5b 2 PRBS: pseudo random binary sequence generator
altb2 15:9f32f64eee5b 3
altb2 15:9f32f64eee5b 4 instantiate option: PRBS(int n)
altb2 15:9f32f64eee5b 5
altb2 15:9f32f64eee5b 6 hints: - the output delivers a new excitation signal with the values -1 or 1.
altb2 15:9f32f64eee5b 7 - after 2^n-1 samples the sequenz repeats infinite
altb2 15:9f32f64eee5b 8
altb2 15:9f32f64eee5b 9 n: create a sequence of length 2^n-1
altb2 15:9f32f64eee5b 10 n = 2...19 is supported
altb2 15:9f32f64eee5b 11
altb2 15:9f32f64eee5b 12 autor: M.E. Peter
altb2 15:9f32f64eee5b 13 */
altb2 15:9f32f64eee5b 14
altb2 15:9f32f64eee5b 15 #include "PRBS.h"
altb2 15:9f32f64eee5b 16 #include "mbed.h"
altb2 15:9f32f64eee5b 17 #include "math.h"
altb2 15:9f32f64eee5b 18
altb2 15:9f32f64eee5b 19 using namespace std;
altb2 15:9f32f64eee5b 20
altb2 15:9f32f64eee5b 21 PRBS::PRBS(int n)
altb2 15:9f32f64eee5b 22 {
altb2 15:9f32f64eee5b 23 this->n = n;
altb2 15:9f32f64eee5b 24 Nprbs = (int)pow((float)2, (float)n) - 1;
altb2 15:9f32f64eee5b 25 getPrbsIndex(n);
altb2 15:9f32f64eee5b 26 reset();
altb2 15:9f32f64eee5b 27 }
altb2 15:9f32f64eee5b 28
altb2 15:9f32f64eee5b 29 PRBS::~PRBS() {}
altb2 15:9f32f64eee5b 30
altb2 15:9f32f64eee5b 31 void PRBS::reset()
altb2 15:9f32f64eee5b 32 {
altb2 15:9f32f64eee5b 33 ii = 1;
altb2 15:9f32f64eee5b 34 //default register
altb2 15:9f32f64eee5b 35 int initRegister[19] = {1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1};
altb2 15:9f32f64eee5b 36 Register = (int*)malloc(n*sizeof(int));
altb2 15:9f32f64eee5b 37 for(int i = 0; i < n; i++) {
altb2 15:9f32f64eee5b 38 Register[i] = initRegister[i];
altb2 15:9f32f64eee5b 39 }
altb2 15:9f32f64eee5b 40 }
altb2 15:9f32f64eee5b 41
altb2 15:9f32f64eee5b 42 float PRBS::update()
altb2 15:9f32f64eee5b 43 {
altb2 15:9f32f64eee5b 44 int prbs = Register[n-1];
altb2 15:9f32f64eee5b 45 int x = (Register[ind[0]-1] + Register[ind[1]-1])%2;
altb2 15:9f32f64eee5b 46 for(int i = 1; i < Nind-1; i++) {
altb2 15:9f32f64eee5b 47 x = (x + Register[ind[i+1]-1])%2;
altb2 15:9f32f64eee5b 48 }
altb2 15:9f32f64eee5b 49 for(int i = n-1; i > 0; i--) {
altb2 15:9f32f64eee5b 50 Register[i] = Register[i-1];
altb2 15:9f32f64eee5b 51 }
altb2 15:9f32f64eee5b 52 Register[0] = x;
altb2 15:9f32f64eee5b 53 // printf("%4i : %4i %4i %4i %4i %4i %4i %4i %4i , %4.4f \r\n", ii, Register[0], Register[1], Register[2], Register[3], Register[4], Register[5], Register[6], Register[7], 2.0f*((float)prbs - 0.5f));
altb2 15:9f32f64eee5b 54 if(ii++ == Nprbs) reset();
altb2 15:9f32f64eee5b 55 return 2.0f*((float)prbs - 0.5f);
altb2 15:9f32f64eee5b 56 }
altb2 15:9f32f64eee5b 57
altb2 15:9f32f64eee5b 58 void PRBS::getPrbsIndex(int n)
altb2 15:9f32f64eee5b 59 {
altb2 15:9f32f64eee5b 60 switch (n) {
altb2 15:9f32f64eee5b 61 case 2:
altb2 15:9f32f64eee5b 62 Nind = 2;
altb2 15:9f32f64eee5b 63 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 64 ind[0] = 1;
altb2 15:9f32f64eee5b 65 ind[1] = n;
altb2 15:9f32f64eee5b 66 break;
altb2 15:9f32f64eee5b 67 case 3:
altb2 15:9f32f64eee5b 68 Nind = 2;
altb2 15:9f32f64eee5b 69 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 70 ind[0] = 1;
altb2 15:9f32f64eee5b 71 ind[1] = n;
altb2 15:9f32f64eee5b 72 break;
altb2 15:9f32f64eee5b 73 case 4:
altb2 15:9f32f64eee5b 74 Nind = 2;
altb2 15:9f32f64eee5b 75 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 76 ind[0] = 1;
altb2 15:9f32f64eee5b 77 ind[1] = n;
altb2 15:9f32f64eee5b 78 break;
altb2 15:9f32f64eee5b 79 case 5:
altb2 15:9f32f64eee5b 80 Nind = 2;
altb2 15:9f32f64eee5b 81 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 82 ind[0] = 2;
altb2 15:9f32f64eee5b 83 ind[1] = n;
altb2 15:9f32f64eee5b 84 break;
altb2 15:9f32f64eee5b 85 case 6:
altb2 15:9f32f64eee5b 86 Nind = 2;
altb2 15:9f32f64eee5b 87 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 88 ind[0] = 1;
altb2 15:9f32f64eee5b 89 ind[1] = n;
altb2 15:9f32f64eee5b 90 break;
altb2 15:9f32f64eee5b 91 case 7:
altb2 15:9f32f64eee5b 92 Nind = 2;
altb2 15:9f32f64eee5b 93 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 94 ind[0] = 1;
altb2 15:9f32f64eee5b 95 ind[1] = n;
altb2 15:9f32f64eee5b 96 break;
altb2 15:9f32f64eee5b 97 case 8:
altb2 15:9f32f64eee5b 98 Nind = 4;
altb2 15:9f32f64eee5b 99 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 100 ind[0] = 1;
altb2 15:9f32f64eee5b 101 ind[1] = 2;
altb2 15:9f32f64eee5b 102 ind[2] = 7;
altb2 15:9f32f64eee5b 103 ind[3] = n;
altb2 15:9f32f64eee5b 104 break;
altb2 15:9f32f64eee5b 105 case 9:
altb2 15:9f32f64eee5b 106 Nind = 2;
altb2 15:9f32f64eee5b 107 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 108 ind[0] = 4;
altb2 15:9f32f64eee5b 109 ind[1] = n;
altb2 15:9f32f64eee5b 110 break;
altb2 15:9f32f64eee5b 111 case 10:
altb2 15:9f32f64eee5b 112 Nind = 2;
altb2 15:9f32f64eee5b 113 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 114 ind[0] = 3;
altb2 15:9f32f64eee5b 115 ind[1] = n;
altb2 15:9f32f64eee5b 116 break;
altb2 15:9f32f64eee5b 117 case 11:
altb2 15:9f32f64eee5b 118 Nind = 2;
altb2 15:9f32f64eee5b 119 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 120 ind[0] = 2;
altb2 15:9f32f64eee5b 121 ind[1] = n;
altb2 15:9f32f64eee5b 122 break;
altb2 15:9f32f64eee5b 123 case 12:
altb2 15:9f32f64eee5b 124 Nind = 4;
altb2 15:9f32f64eee5b 125 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 126 ind[0] = 4;
altb2 15:9f32f64eee5b 127 ind[1] = 10;
altb2 15:9f32f64eee5b 128 ind[2] = 11;
altb2 15:9f32f64eee5b 129 ind[3] = n;
altb2 15:9f32f64eee5b 130 break;
altb2 15:9f32f64eee5b 131 case 13:
altb2 15:9f32f64eee5b 132 Nind = 4;
altb2 15:9f32f64eee5b 133 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 134 ind[0] = 8;
altb2 15:9f32f64eee5b 135 ind[1] = 11;
altb2 15:9f32f64eee5b 136 ind[2] = 12;
altb2 15:9f32f64eee5b 137 ind[3] = n;
altb2 15:9f32f64eee5b 138 break;
altb2 15:9f32f64eee5b 139 case 14:
altb2 15:9f32f64eee5b 140 Nind = 4;
altb2 15:9f32f64eee5b 141 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 142 ind[0] = 2;
altb2 15:9f32f64eee5b 143 ind[1] = 12;
altb2 15:9f32f64eee5b 144 ind[2] = 13;
altb2 15:9f32f64eee5b 145 ind[3] = n;
altb2 15:9f32f64eee5b 146 break;
altb2 15:9f32f64eee5b 147 case 15:
altb2 15:9f32f64eee5b 148 Nind = 2;
altb2 15:9f32f64eee5b 149 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 150 ind[0] = 14;
altb2 15:9f32f64eee5b 151 ind[1] = n;
altb2 15:9f32f64eee5b 152 break;
altb2 15:9f32f64eee5b 153 case 16:
altb2 15:9f32f64eee5b 154 Nind = 4;
altb2 15:9f32f64eee5b 155 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 156 ind[0] = 11;
altb2 15:9f32f64eee5b 157 ind[1] = 13;
altb2 15:9f32f64eee5b 158 ind[2] = 14;
altb2 15:9f32f64eee5b 159 ind[3] = n;
altb2 15:9f32f64eee5b 160 break;
altb2 15:9f32f64eee5b 161 case 17:
altb2 15:9f32f64eee5b 162 Nind = 2;
altb2 15:9f32f64eee5b 163 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 164 ind[0] = 14;
altb2 15:9f32f64eee5b 165 ind[1] = n;
altb2 15:9f32f64eee5b 166 break;
altb2 15:9f32f64eee5b 167 case 18:
altb2 15:9f32f64eee5b 168 Nind = 2;
altb2 15:9f32f64eee5b 169 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 170 ind[0] = 11;
altb2 15:9f32f64eee5b 171 ind[1] = n;
altb2 15:9f32f64eee5b 172 break;
altb2 15:9f32f64eee5b 173 case 19:
altb2 15:9f32f64eee5b 174 Nind = 4;
altb2 15:9f32f64eee5b 175 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 176 ind[0] = 14;
altb2 15:9f32f64eee5b 177 ind[1] = 17;
altb2 15:9f32f64eee5b 178 ind[2] = 18;
altb2 15:9f32f64eee5b 179 ind[3] = n;
altb2 15:9f32f64eee5b 180 break;
altb2 15:9f32f64eee5b 181 default:
altb2 15:9f32f64eee5b 182 Nind = 2;
altb2 15:9f32f64eee5b 183 ind = (int*)malloc(Nind*sizeof(int));
altb2 15:9f32f64eee5b 184 ind[0] = 0;
altb2 15:9f32f64eee5b 185 ind[1] = 0;
altb2 15:9f32f64eee5b 186 break;
altb2 15:9f32f64eee5b 187 }
altb2 15:9f32f64eee5b 188 }
altb2 15:9f32f64eee5b 189
altb2 15:9f32f64eee5b 190 void PRBS::printLine()
altb2 15:9f32f64eee5b 191 {
altb2 15:9f32f64eee5b 192 printf("-----------------------------------------------------------------------------------------\r\n");
altb2 15:9f32f64eee5b 193 }
altb2 15:9f32f64eee5b 194
altb2 15:9f32f64eee5b 195 void PRBS::printPRBSind()
altb2 15:9f32f64eee5b 196 {
altb2 15:9f32f64eee5b 197 printLine();
altb2 15:9f32f64eee5b 198 for(int i = 0; i < Nind; i++) {
altb2 15:9f32f64eee5b 199 printf("%6i \r\n", ind[i]);
altb2 15:9f32f64eee5b 200 }
altb2 15:9f32f64eee5b 201 }
altb2 15:9f32f64eee5b 202
altb2 15:9f32f64eee5b 203 void PRBS::printPRBSregister()
altb2 15:9f32f64eee5b 204 {
altb2 15:9f32f64eee5b 205 printLine();
altb2 15:9f32f64eee5b 206 for(int i = 0; i < n; i++) {
altb2 15:9f32f64eee5b 207 printf("%6i \r\n", Register[i]);
altb2 15:9f32f64eee5b 208 }
altb2 15:9f32f64eee5b 209 }