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