Library for control puposes
Fork of Cntrl_Lib by
PRBS.cpp@8:822123e56d57, 2019-01-07 (annotated)
- Committer:
- pmic
- Date:
- Mon Jan 07 13:36:13 2019 +0000
- Revision:
- 8:822123e56d57
add prbs
Who changed what in which revision?
User | Revision | Line number | New 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 | } |