Control Library by altb

Dependents:   My_Libraries IndNav_QK3_T265

Committer:
pmic
Date:
Thu Jan 16 09:12:50 2020 +0000
Revision:
15:c70cad2f4e64
Parent:
0:d49418189c5c
Revisit IIR_filter.h and IIR_filter.cpp. Change internal double to float arithmetic.

Who changed what in which revision?

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