AIチップをmbedから駆動するためのプログラムです.

Dependencies:   mbed

Committer:
toriten1024
Date:
Sat Mar 16 14:54:57 2019 +0000
Revision:
1:18e8ead6f188
mbed_fest 2019 spring Nagoya ; Neural Network demo code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
toriten1024 1:18e8ead6f188 1 #include "mbed.h"
toriten1024 1:18e8ead6f188 2
toriten1024 1:18e8ead6f188 3 #ifndef INCLUDE_CONST_MATRIX
toriten1024 1:18e8ead6f188 4 #define INCLUDE_CONST_MATRIX
toriten1024 1:18e8ead6f188 5
toriten1024 1:18e8ead6f188 6 namespace mat
toriten1024 1:18e8ead6f188 7 {
toriten1024 1:18e8ead6f188 8 int hogehoge;
toriten1024 1:18e8ead6f188 9
toriten1024 1:18e8ead6f188 10 class ConstMatrix
toriten1024 1:18e8ead6f188 11 {
toriten1024 1:18e8ead6f188 12
toriten1024 1:18e8ead6f188 13 public:
toriten1024 1:18e8ead6f188 14 const unsigned int *data;
toriten1024 1:18e8ead6f188 15 int height;//if height == 0 then dimension y is zero
toriten1024 1:18e8ead6f188 16 int width;//
toriten1024 1:18e8ead6f188 17 int channel;//
toriten1024 1:18e8ead6f188 18 int insert_index;//
toriten1024 1:18e8ead6f188 19
toriten1024 1:18e8ead6f188 20
toriten1024 1:18e8ead6f188 21
toriten1024 1:18e8ead6f188 22 //assert
toriten1024 1:18e8ead6f188 23 void assert(int flag){
toriten1024 1:18e8ead6f188 24 if(! flag){
toriten1024 1:18e8ead6f188 25 printf("error has happend\n\r");
toriten1024 1:18e8ead6f188 26 }
toriten1024 1:18e8ead6f188 27 }
toriten1024 1:18e8ead6f188 28 /******************************************************************************************
toriten1024 1:18e8ead6f188 29 * Calcrate index from x,y,x axis
toriten1024 1:18e8ead6f188 30 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 31 int calc_pos(int x, int y, int d)
toriten1024 1:18e8ead6f188 32 {
toriten1024 1:18e8ead6f188 33 int pos = 0;
toriten1024 1:18e8ead6f188 34 pos += d * (width * height);
toriten1024 1:18e8ead6f188 35 pos += y * width;
toriten1024 1:18e8ead6f188 36 pos += x;
toriten1024 1:18e8ead6f188 37 return pos;
toriten1024 1:18e8ead6f188 38 }
toriten1024 1:18e8ead6f188 39
toriten1024 1:18e8ead6f188 40 // Constructor Create Matrix Instance
toriten1024 1:18e8ead6f188 41 void initialize(int width, int height, int channel)
toriten1024 1:18e8ead6f188 42 {
toriten1024 1:18e8ead6f188 43 assert(channel > 0 && height > 0 && width > 0);
toriten1024 1:18e8ead6f188 44 this->channel = channel;
toriten1024 1:18e8ead6f188 45 this->height = height;
toriten1024 1:18e8ead6f188 46 this->width = width;
toriten1024 1:18e8ead6f188 47 this->insert_index = 0;
toriten1024 1:18e8ead6f188 48 }
toriten1024 1:18e8ead6f188 49
toriten1024 1:18e8ead6f188 50 /******************************************************************************************
toriten1024 1:18e8ead6f188 51 * Create 1D Matrix data, like a vector
toriten1024 1:18e8ead6f188 52 * args
toriten1024 1:18e8ead6f188 53 * width vector length
toriten1024 1:18e8ead6f188 54 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 55 ConstMatrix(int width)
toriten1024 1:18e8ead6f188 56 {
toriten1024 1:18e8ead6f188 57 assert(width > 0);
toriten1024 1:18e8ead6f188 58 initialize(width, 1, 1);
toriten1024 1:18e8ead6f188 59 }
toriten1024 1:18e8ead6f188 60 /******************************************************************************************
toriten1024 1:18e8ead6f188 61 * Create 2D Matrix data
toriten1024 1:18e8ead6f188 62 * args
toriten1024 1:18e8ead6f188 63 * width : matrix width
toriten1024 1:18e8ead6f188 64 * height : matrix height
toriten1024 1:18e8ead6f188 65 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 66 ConstMatrix(int width, int height)
toriten1024 1:18e8ead6f188 67 {
toriten1024 1:18e8ead6f188 68 assert(width > 0 && height > 0);
toriten1024 1:18e8ead6f188 69 initialize(width, height, 1);
toriten1024 1:18e8ead6f188 70 }
toriten1024 1:18e8ead6f188 71
toriten1024 1:18e8ead6f188 72 /******************************************************************************************
toriten1024 1:18e8ead6f188 73 * Create 3D Matrix data
toriten1024 1:18e8ead6f188 74 * args
toriten1024 1:18e8ead6f188 75 * width : matrix width
toriten1024 1:18e8ead6f188 76 * height : matrix height
toriten1024 1:18e8ead6f188 77 * channel : matrix channel, in other word matrix depth
toriten1024 1:18e8ead6f188 78 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 79 ConstMatrix(int width, int height, int channel)
toriten1024 1:18e8ead6f188 80 {
toriten1024 1:18e8ead6f188 81 assert(width > 0 && height > 0 && channel > 0);
toriten1024 1:18e8ead6f188 82 initialize(width, height, channel);
toriten1024 1:18e8ead6f188 83 }
toriten1024 1:18e8ead6f188 84
toriten1024 1:18e8ead6f188 85
toriten1024 1:18e8ead6f188 86
toriten1024 1:18e8ead6f188 87
toriten1024 1:18e8ead6f188 88 /******************************************************************************************
toriten1024 1:18e8ead6f188 89 * Opt out Matrix datas
toriten1024 1:18e8ead6f188 90 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 91 void show(void)
toriten1024 1:18e8ead6f188 92 {
toriten1024 1:18e8ead6f188 93 for (int i = 0; i < this->channel; i++)
toriten1024 1:18e8ead6f188 94 {
toriten1024 1:18e8ead6f188 95 if (i > 1){
toriten1024 1:18e8ead6f188 96 printf("channel %d",i);
toriten1024 1:18e8ead6f188 97 printf("\n\r");
toriten1024 1:18e8ead6f188 98 }
toriten1024 1:18e8ead6f188 99 printf("[");
toriten1024 1:18e8ead6f188 100 for (int j = 0; j < this->height; j++)
toriten1024 1:18e8ead6f188 101 {
toriten1024 1:18e8ead6f188 102 printf("[");
toriten1024 1:18e8ead6f188 103 for (int k = 0; k < this->width; k++)
toriten1024 1:18e8ead6f188 104 {
toriten1024 1:18e8ead6f188 105 int ptr = (i * this->width * this->height) + (j * this->width) + k;
toriten1024 1:18e8ead6f188 106 Fix18 tmp(data[ptr]);
toriten1024 1:18e8ead6f188 107 printf("%F ",(double)tmp.to_double());
toriten1024 1:18e8ead6f188 108 }
toriten1024 1:18e8ead6f188 109 printf("]");
toriten1024 1:18e8ead6f188 110 if (j < this->height - 1)
toriten1024 1:18e8ead6f188 111 {
toriten1024 1:18e8ead6f188 112 printf("\n\r");
toriten1024 1:18e8ead6f188 113 }
toriten1024 1:18e8ead6f188 114 }
toriten1024 1:18e8ead6f188 115 printf("]");
toriten1024 1:18e8ead6f188 116 printf("\n\r");
toriten1024 1:18e8ead6f188 117 }
toriten1024 1:18e8ead6f188 118 }
toriten1024 1:18e8ead6f188 119 /******************************************************************************************
toriten1024 1:18e8ead6f188 120 * Opt out Matrix datas in 1/0
toriten1024 1:18e8ead6f188 121 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 122 void show_bin(void)
toriten1024 1:18e8ead6f188 123 {
toriten1024 1:18e8ead6f188 124 for (int i = 0; i < this->channel; i++)
toriten1024 1:18e8ead6f188 125 {
toriten1024 1:18e8ead6f188 126 if (i > 1){
toriten1024 1:18e8ead6f188 127 printf("channel %d",i );
toriten1024 1:18e8ead6f188 128 printf("\n\r");
toriten1024 1:18e8ead6f188 129 }
toriten1024 1:18e8ead6f188 130 printf("[");
toriten1024 1:18e8ead6f188 131 for (int j = 0; j < this->height; j++)
toriten1024 1:18e8ead6f188 132 {
toriten1024 1:18e8ead6f188 133 printf("[");
toriten1024 1:18e8ead6f188 134 for (int k = 0; k < this->width; k++)
toriten1024 1:18e8ead6f188 135 {
toriten1024 1:18e8ead6f188 136 int ptr = (i * this->width * this->height) + (j * this->width) + k;
toriten1024 1:18e8ead6f188 137 printf(" %d",((data[ptr] > 0) ? 1 : 0));
toriten1024 1:18e8ead6f188 138 }
toriten1024 1:18e8ead6f188 139 printf("]");
toriten1024 1:18e8ead6f188 140 if (j < this->height - 1)
toriten1024 1:18e8ead6f188 141 {
toriten1024 1:18e8ead6f188 142 printf("\n\r");
toriten1024 1:18e8ead6f188 143 }
toriten1024 1:18e8ead6f188 144 }
toriten1024 1:18e8ead6f188 145 printf("]");
toriten1024 1:18e8ead6f188 146 printf("\n\r");
toriten1024 1:18e8ead6f188 147 }
toriten1024 1:18e8ead6f188 148 }
toriten1024 1:18e8ead6f188 149
toriten1024 1:18e8ead6f188 150 /******************************************************************************************
toriten1024 1:18e8ead6f188 151 * opt out Matrix Dimensions Lengths
toriten1024 1:18e8ead6f188 152 * ***************************************************************************************/
toriten1024 1:18e8ead6f188 153 void shape(void)
toriten1024 1:18e8ead6f188 154 {
toriten1024 1:18e8ead6f188 155 if (this->height == 0 || this->channel == 0)
toriten1024 1:18e8ead6f188 156 {
toriten1024 1:18e8ead6f188 157 printf("%d",width);
toriten1024 1:18e8ead6f188 158 printf("\n\r");
toriten1024 1:18e8ead6f188 159 }
toriten1024 1:18e8ead6f188 160 else if (this->channel == 0)
toriten1024 1:18e8ead6f188 161 {
toriten1024 1:18e8ead6f188 162 printf("%d,%d",this->width,this->height);
toriten1024 1:18e8ead6f188 163 printf("\n\r");
toriten1024 1:18e8ead6f188 164 }
toriten1024 1:18e8ead6f188 165 else
toriten1024 1:18e8ead6f188 166 {
toriten1024 1:18e8ead6f188 167 printf("%d,%d,%d",this->width,this->height,this->channel);
toriten1024 1:18e8ead6f188 168 printf("\n\r");
toriten1024 1:18e8ead6f188 169 }
toriten1024 1:18e8ead6f188 170 }
toriten1024 1:18e8ead6f188 171
toriten1024 1:18e8ead6f188 172 };
toriten1024 1:18e8ead6f188 173
toriten1024 1:18e8ead6f188 174
toriten1024 1:18e8ead6f188 175
toriten1024 1:18e8ead6f188 176 } // namespace mat
toriten1024 1:18e8ead6f188 177 #endif