2nd Library

Committer:
altb2
Date:
Thu Mar 07 07:03:56 2019 +0000
Revision:
0:a201a6cd4c0c
New Library

Who changed what in which revision?

UserRevisionLine numberNew 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 }