NN library trained with actual motor data

Dependents:   NN_final

Committer:
cpm219
Date:
Mon Nov 07 22:06:38 2016 +0000
Revision:
0:efebbd20f066
latest version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cpm219 0:efebbd20f066 1 //
cpm219 0:efebbd20f066 2 // File: neural_network_3ph.cpp
cpm219 0:efebbd20f066 3 //
cpm219 0:efebbd20f066 4 // Code generated for Simulink model 'neural_network_3ph'.
cpm219 0:efebbd20f066 5 //
cpm219 0:efebbd20f066 6 // Model version : 1.12
cpm219 0:efebbd20f066 7 // Simulink Coder version : 8.10 (R2016a) 10-Feb-2016
cpm219 0:efebbd20f066 8 // C/C++ source code generated on : Tue Nov 01 15:14:34 2016
cpm219 0:efebbd20f066 9 //
cpm219 0:efebbd20f066 10 // Target selection: ert.tlc
cpm219 0:efebbd20f066 11 // Embedded hardware selection: ARM Compatible->ARM Cortex
cpm219 0:efebbd20f066 12 // Code generation objectives: Unspecified
cpm219 0:efebbd20f066 13 // Validation result: Not run
cpm219 0:efebbd20f066 14 //
cpm219 0:efebbd20f066 15 #include "neural_network_3ph.h"
cpm219 0:efebbd20f066 16 #include "neural_network_3ph_private.h"
cpm219 0:efebbd20f066 17
cpm219 0:efebbd20f066 18 // Block signals (auto storage)
cpm219 0:efebbd20f066 19 B_neural_network_3ph_T neural_network_3ph_B;
cpm219 0:efebbd20f066 20
cpm219 0:efebbd20f066 21 // Real-time model
cpm219 0:efebbd20f066 22 RT_MODEL_neural_network_3ph_T neural_network_3ph_M_;
cpm219 0:efebbd20f066 23 RT_MODEL_neural_network_3ph_T *const neural_network_3ph_M =
cpm219 0:efebbd20f066 24 &neural_network_3ph_M_;
cpm219 0:efebbd20f066 25 real_T rt_roundd_snf(real_T u)
cpm219 0:efebbd20f066 26 {
cpm219 0:efebbd20f066 27 real_T y;
cpm219 0:efebbd20f066 28 if (fabs(u) < 4.503599627370496E+15) {
cpm219 0:efebbd20f066 29 if (u >= 0.5) {
cpm219 0:efebbd20f066 30 y = floor(u + 0.5);
cpm219 0:efebbd20f066 31 } else if (u > -0.5) {
cpm219 0:efebbd20f066 32 y = u * 0.0;
cpm219 0:efebbd20f066 33 } else {
cpm219 0:efebbd20f066 34 y = ceil(u - 0.5);
cpm219 0:efebbd20f066 35 }
cpm219 0:efebbd20f066 36 } else {
cpm219 0:efebbd20f066 37 y = u;
cpm219 0:efebbd20f066 38 }
cpm219 0:efebbd20f066 39
cpm219 0:efebbd20f066 40 return y;
cpm219 0:efebbd20f066 41 }
cpm219 0:efebbd20f066 42
cpm219 0:efebbd20f066 43 // Model step function
cpm219 0:efebbd20f066 44 void neural_network_custom(real_T arg_In1[61], real_T arg_Out1[2])
cpm219 0:efebbd20f066 45 {
cpm219 0:efebbd20f066 46 int32_T i;
cpm219 0:efebbd20f066 47 real_T tmp;
cpm219 0:efebbd20f066 48 real_T tmp_0;
cpm219 0:efebbd20f066 49 real_T tmp_1;
cpm219 0:efebbd20f066 50 real_T tmp_2;
cpm219 0:efebbd20f066 51 real_T tmp_3;
cpm219 0:efebbd20f066 52 real_T rtb_Addminy;
cpm219 0:efebbd20f066 53 real_T rtb_Sum1;
cpm219 0:efebbd20f066 54
cpm219 0:efebbd20f066 55 // DotProduct: '<S9>/Dot Product'
cpm219 0:efebbd20f066 56 tmp_2 = 0.0;
cpm219 0:efebbd20f066 57
cpm219 0:efebbd20f066 58 // DotProduct: '<S10>/Dot Product'
cpm219 0:efebbd20f066 59 tmp_3 = 0.0;
cpm219 0:efebbd20f066 60
cpm219 0:efebbd20f066 61 // DotProduct: '<S11>/Dot Product'
cpm219 0:efebbd20f066 62 rtb_Sum1 = 0.0;
cpm219 0:efebbd20f066 63
cpm219 0:efebbd20f066 64 // DotProduct: '<S12>/Dot Product'
cpm219 0:efebbd20f066 65 neural_network_3ph_B.d0 = 0.0;
cpm219 0:efebbd20f066 66
cpm219 0:efebbd20f066 67 // DotProduct: '<S13>/Dot Product'
cpm219 0:efebbd20f066 68 neural_network_3ph_B.d1 = 0.0;
cpm219 0:efebbd20f066 69
cpm219 0:efebbd20f066 70 // DotProduct: '<S14>/Dot Product'
cpm219 0:efebbd20f066 71 tmp = 0.0;
cpm219 0:efebbd20f066 72
cpm219 0:efebbd20f066 73 // DotProduct: '<S15>/Dot Product'
cpm219 0:efebbd20f066 74 tmp_0 = 0.0;
cpm219 0:efebbd20f066 75
cpm219 0:efebbd20f066 76 // DotProduct: '<S16>/Dot Product'
cpm219 0:efebbd20f066 77 tmp_1 = 0.0;
cpm219 0:efebbd20f066 78 for (i = 0; i < 61; i++) {
cpm219 0:efebbd20f066 79 // Bias: '<S22>/Add min y' incorporates:
cpm219 0:efebbd20f066 80 // Bias: '<S22>/Subtract min x'
cpm219 0:efebbd20f066 81 // Gain: '<S22>/range y // range x'
cpm219 0:efebbd20f066 82 // Inport: '<Root>/In1'
cpm219 0:efebbd20f066 83
cpm219 0:efebbd20f066 84 rtb_Addminy = (arg_In1[i] + neural_network_3ph_ConstP.Subtractminx_Bias[i]) *
cpm219 0:efebbd20f066 85 neural_network_3ph_ConstP.rangeyrangex_Gain[i] + -1.0;
cpm219 0:efebbd20f066 86
cpm219 0:efebbd20f066 87 // DotProduct: '<S9>/Dot Product' incorporates:
cpm219 0:efebbd20f066 88 // Constant: '<S7>/IW{1,1}(1,:)''
cpm219 0:efebbd20f066 89
cpm219 0:efebbd20f066 90 tmp_2 += neural_network_3ph_ConstP.IW111_Value[i] * rtb_Addminy;
cpm219 0:efebbd20f066 91
cpm219 0:efebbd20f066 92 // DotProduct: '<S10>/Dot Product' incorporates:
cpm219 0:efebbd20f066 93 // Constant: '<S7>/IW{1,1}(2,:)''
cpm219 0:efebbd20f066 94
cpm219 0:efebbd20f066 95 tmp_3 += neural_network_3ph_ConstP.IW112_Value[i] * rtb_Addminy;
cpm219 0:efebbd20f066 96
cpm219 0:efebbd20f066 97 // DotProduct: '<S11>/Dot Product' incorporates:
cpm219 0:efebbd20f066 98 // Constant: '<S7>/IW{1,1}(3,:)''
cpm219 0:efebbd20f066 99
cpm219 0:efebbd20f066 100 rtb_Sum1 += neural_network_3ph_ConstP.IW113_Value[i] * rtb_Addminy;
cpm219 0:efebbd20f066 101
cpm219 0:efebbd20f066 102 // DotProduct: '<S12>/Dot Product' incorporates:
cpm219 0:efebbd20f066 103 // Constant: '<S7>/IW{1,1}(4,:)''
cpm219 0:efebbd20f066 104
cpm219 0:efebbd20f066 105 neural_network_3ph_B.d0 += neural_network_3ph_ConstP.IW114_Value[i] *
cpm219 0:efebbd20f066 106 rtb_Addminy;
cpm219 0:efebbd20f066 107
cpm219 0:efebbd20f066 108 // DotProduct: '<S13>/Dot Product' incorporates:
cpm219 0:efebbd20f066 109 // Constant: '<S7>/IW{1,1}(5,:)''
cpm219 0:efebbd20f066 110
cpm219 0:efebbd20f066 111 neural_network_3ph_B.d1 += neural_network_3ph_ConstP.IW115_Value[i] *
cpm219 0:efebbd20f066 112 rtb_Addminy;
cpm219 0:efebbd20f066 113
cpm219 0:efebbd20f066 114 // DotProduct: '<S14>/Dot Product' incorporates:
cpm219 0:efebbd20f066 115 // Constant: '<S7>/IW{1,1}(6,:)''
cpm219 0:efebbd20f066 116
cpm219 0:efebbd20f066 117 tmp += neural_network_3ph_ConstP.IW116_Value[i] * rtb_Addminy;
cpm219 0:efebbd20f066 118
cpm219 0:efebbd20f066 119 // DotProduct: '<S15>/Dot Product' incorporates:
cpm219 0:efebbd20f066 120 // Constant: '<S7>/IW{1,1}(7,:)''
cpm219 0:efebbd20f066 121
cpm219 0:efebbd20f066 122 tmp_0 += neural_network_3ph_ConstP.IW117_Value[i] * rtb_Addminy;
cpm219 0:efebbd20f066 123
cpm219 0:efebbd20f066 124 // DotProduct: '<S16>/Dot Product' incorporates:
cpm219 0:efebbd20f066 125 // Constant: '<S7>/IW{1,1}(8,:)''
cpm219 0:efebbd20f066 126
cpm219 0:efebbd20f066 127 tmp_1 += neural_network_3ph_ConstP.IW118_Value[i] * rtb_Addminy;
cpm219 0:efebbd20f066 128 }
cpm219 0:efebbd20f066 129
cpm219 0:efebbd20f066 130 // Sum: '<S2>/netsum' incorporates:
cpm219 0:efebbd20f066 131 // DotProduct: '<S10>/Dot Product'
cpm219 0:efebbd20f066 132 // DotProduct: '<S11>/Dot Product'
cpm219 0:efebbd20f066 133 // DotProduct: '<S12>/Dot Product'
cpm219 0:efebbd20f066 134 // DotProduct: '<S13>/Dot Product'
cpm219 0:efebbd20f066 135 // DotProduct: '<S14>/Dot Product'
cpm219 0:efebbd20f066 136 // DotProduct: '<S15>/Dot Product'
cpm219 0:efebbd20f066 137 // DotProduct: '<S16>/Dot Product'
cpm219 0:efebbd20f066 138 // DotProduct: '<S9>/Dot Product'
cpm219 0:efebbd20f066 139
cpm219 0:efebbd20f066 140 neural_network_3ph_B.dv0[0] = tmp_2;
cpm219 0:efebbd20f066 141 neural_network_3ph_B.dv0[1] = tmp_3;
cpm219 0:efebbd20f066 142 neural_network_3ph_B.dv0[2] = rtb_Sum1;
cpm219 0:efebbd20f066 143 neural_network_3ph_B.dv0[3] = neural_network_3ph_B.d0;
cpm219 0:efebbd20f066 144 neural_network_3ph_B.dv0[4] = neural_network_3ph_B.d1;
cpm219 0:efebbd20f066 145 neural_network_3ph_B.dv0[5] = tmp;
cpm219 0:efebbd20f066 146 neural_network_3ph_B.dv0[6] = tmp_0;
cpm219 0:efebbd20f066 147 neural_network_3ph_B.dv0[7] = tmp_1;
cpm219 0:efebbd20f066 148
cpm219 0:efebbd20f066 149 // DotProduct: '<S20>/Dot Product'
cpm219 0:efebbd20f066 150 tmp_2 = 0.0;
cpm219 0:efebbd20f066 151
cpm219 0:efebbd20f066 152 // DotProduct: '<S21>/Dot Product'
cpm219 0:efebbd20f066 153 tmp_3 = 0.0;
cpm219 0:efebbd20f066 154 for (i = 0; i < 8; i++) {
cpm219 0:efebbd20f066 155 // Sum: '<S8>/Sum1' incorporates:
cpm219 0:efebbd20f066 156 // Constant: '<S2>/b{1}'
cpm219 0:efebbd20f066 157 // Constant: '<S8>/one'
cpm219 0:efebbd20f066 158 // Constant: '<S8>/one1'
cpm219 0:efebbd20f066 159 // Gain: '<S8>/Gain'
cpm219 0:efebbd20f066 160 // Gain: '<S8>/Gain1'
cpm219 0:efebbd20f066 161 // Sum: '<S2>/netsum'
cpm219 0:efebbd20f066 162 // Sum: '<S8>/Sum'
cpm219 0:efebbd20f066 163
cpm219 0:efebbd20f066 164 rtb_Sum1 = 1.0 / (exp((neural_network_3ph_B.dv0[i] +
cpm219 0:efebbd20f066 165 neural_network_3ph_ConstP.b1_Value[i]) * -2.0) + 1.0) * 2.0 - 1.0;
cpm219 0:efebbd20f066 166
cpm219 0:efebbd20f066 167 // DotProduct: '<S20>/Dot Product' incorporates:
cpm219 0:efebbd20f066 168 // Constant: '<S18>/IW{2,1}(1,:)''
cpm219 0:efebbd20f066 169
cpm219 0:efebbd20f066 170 tmp_2 += neural_network_3ph_ConstP.IW211_Value[i] * rtb_Sum1;
cpm219 0:efebbd20f066 171
cpm219 0:efebbd20f066 172 // DotProduct: '<S21>/Dot Product' incorporates:
cpm219 0:efebbd20f066 173 // Constant: '<S18>/IW{2,1}(2,:)''
cpm219 0:efebbd20f066 174
cpm219 0:efebbd20f066 175 tmp_3 += neural_network_3ph_ConstP.IW212_Value[i] * rtb_Sum1;
cpm219 0:efebbd20f066 176 }
cpm219 0:efebbd20f066 177
cpm219 0:efebbd20f066 178 // Outport: '<Root>/Out1' incorporates:
cpm219 0:efebbd20f066 179 // Bias: '<S24>/Subtract min y'
cpm219 0:efebbd20f066 180 // DotProduct: '<S20>/Dot Product'
cpm219 0:efebbd20f066 181 // DotProduct: '<S21>/Dot Product'
cpm219 0:efebbd20f066 182 // Gain: '<S24>/Divide by range y'
cpm219 0:efebbd20f066 183 // Rounding: '<Root>/Rounding Function'
cpm219 0:efebbd20f066 184 // Sum: '<S3>/netsum'
cpm219 0:efebbd20f066 185
cpm219 0:efebbd20f066 186 arg_Out1[0] = rt_roundd_snf(fabs(((tmp_2 + -0.2665606286241351) + 1.0) * 0.5));
cpm219 0:efebbd20f066 187 arg_Out1[1] = rt_roundd_snf(fabs(((tmp_3 + -0.17510563077530578) + 1.0) * 0.5));
cpm219 0:efebbd20f066 188 }
cpm219 0:efebbd20f066 189
cpm219 0:efebbd20f066 190 // Model initialize function
cpm219 0:efebbd20f066 191 void neural_network_initialize(void)
cpm219 0:efebbd20f066 192 {
cpm219 0:efebbd20f066 193 // Registration code
cpm219 0:efebbd20f066 194
cpm219 0:efebbd20f066 195 // initialize error status
cpm219 0:efebbd20f066 196 rtmSetErrorStatus(neural_network_3ph_M, (NULL));
cpm219 0:efebbd20f066 197 }
cpm219 0:efebbd20f066 198
cpm219 0:efebbd20f066 199 // Model terminate function
cpm219 0:efebbd20f066 200 void neural_network_3ph_terminate(void)
cpm219 0:efebbd20f066 201 {
cpm219 0:efebbd20f066 202 // (no terminate code required)
cpm219 0:efebbd20f066 203 }
cpm219 0:efebbd20f066 204
cpm219 0:efebbd20f066 205 //
cpm219 0:efebbd20f066 206 // File trailer for generated code.
cpm219 0:efebbd20f066 207 //
cpm219 0:efebbd20f066 208 // [EOF]
cpm219 0:efebbd20f066 209 //