Library for control puposes

Dependents:  

Fork of Cntrl_Lib by Ruprecht Altenburger

Committer:
pmic
Date:
Thu Feb 07 09:08:47 2019 +0000
Revision:
12:c8ec698c53ed
Parent:
8:822123e56d57
Add new default istantiate option for GPA

Who changed what in which revision?

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