添加功能
以原始数据运行CNN
This commit is contained in:
539
MY/cnn.c
539
MY/cnn.c
@@ -2,7 +2,15 @@
|
||||
|
||||
u8 isrun;
|
||||
|
||||
void _cnn_run(){
|
||||
isrun = 1;
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>*/
|
||||
/// @brief <20><>ӡͼ<D3A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param array_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵĸ<DCB5><C4B8><EFBFBD>
|
||||
/// @param elements_per_line ÿһ<C3BF>еĸ<D0B5><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
void PrintfArray(float *array, int array_num, int elements_per_line)
|
||||
{
|
||||
for (int i = 0; i < array_num; i++)
|
||||
@@ -22,17 +30,40 @@ void PrintfArray(float *array, int array_num, int elements_per_line)
|
||||
}
|
||||
|
||||
|
||||
|
||||
void PrintfResArray(float *array, int array_num, int elements_per_line)
|
||||
{
|
||||
for (int i = 0; i < array_num; i++)
|
||||
{
|
||||
printf("%f ", array[i]); // <20><>ӡ<EFBFBD><D3A1>ǰԪ<C7B0><D4AA>
|
||||
// ÿ<><C3BF>ӡ<EFBFBD><D3A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>
|
||||
if ((i + 1) % elements_per_line == 0)
|
||||
{
|
||||
printf("\t");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*<2A><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>*/
|
||||
/// @brief <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>ΪelementSize
|
||||
/// @param depth <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[depth][]
|
||||
/// @param num <20><><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[][num]
|
||||
/// @param elementSize <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void **allocate2DArray(int depth, int num, size_t elementSize)
|
||||
{
|
||||
void **array = (void **)mymalloc(SRAMEX, depth * sizeof(void *));
|
||||
for (int d = 0; d < depth; d++)
|
||||
{
|
||||
array[d] = mymalloc(SRAMEX, num * elementSize); // ÿ<><C3BF>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>չƽͼ<C6BD><CDBC>
|
||||
array[d] = mymalloc(SRAMEX, num * elementSize);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
/// @brief <20>ͷ<EFBFBD>ͨ<EFBFBD><CDA8>allocate2DArray<61><79><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param array <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param depth <20><><EFBFBD><EFBFBD>
|
||||
void free2DArray(float **array, int depth)
|
||||
{
|
||||
for (int d = 0; d < depth; d++)
|
||||
@@ -43,17 +74,19 @@ void free2DArray(float **array, int depth)
|
||||
}
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>*/
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺100<30><30>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>100<30><30>Ԫ<EFBFBD><D4AA>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Full(float *inputArray, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < ((input_size + 2) * (input_size + 2)); i++)
|
||||
{
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
outputArray[i] = 0;
|
||||
}
|
||||
for (i = 0; i < input_size; i++)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (j = 0; j < input_size; j++)
|
||||
{
|
||||
outputArray[(i + 1) * (input_size + 2) + (j + 1)] = inputArray[i * input_size + j];
|
||||
@@ -61,6 +94,13 @@ void Full(float *inputArray, int input_size, float *outputArray)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>гػ<D0B3><D8BB><EFBFBD>ѡȡkernel_size*kernel_size<7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊstep
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param kernel_size <20>ػ<EFBFBD><D8BB>˵ĵ<CBB5><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param step <20><><EFBFBD><EFBFBD>ֵ
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Pooling(float *inputArray, int input_size,
|
||||
int kernel_size, unsigned int step,
|
||||
float *outputArray)
|
||||
@@ -94,6 +134,12 @@ void Pooling(float *inputArray, int input_size,
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>ѡȡkernel_size*kernel_size<7A>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD>ﲽ<EFBFBD><EFB2BD>Ϊ1
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param kernel <20><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>kernel_size * kernel_size<7A>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD>
|
||||
/// @param kernel_size <20>ػ<EFBFBD><D8BB>˵ĵ<CBB5><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Convolution(float *inputArray, int input_size,
|
||||
float *kernel, int kernel_size,
|
||||
float *outputArray)
|
||||
@@ -125,6 +171,11 @@ void Convolution(float *inputArray, int input_size,
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20>Զ<EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧλ<D3A6><CEBB><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_depth <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[input_depth][]
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Combine(float **inputArray, int input_depth, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j, k;
|
||||
@@ -147,6 +198,11 @@ void Combine(float **inputArray, int input_depth, int input_size, float *outputA
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief չ<><D5B9><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_depth <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>a[input_depth][]
|
||||
/// @param input_size <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ĵ<EFBFBD><C4B5>е<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void Flatten2D(float **inputArray, int input_depth, int input_size, float *outputArray)
|
||||
{
|
||||
int i, j, k;
|
||||
@@ -163,6 +219,11 @@ void Flatten2D(float **inputArray, int input_depth, int input_size, float *outpu
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ÿһλ<D2BB><CEBB><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param bias ƫ<>ú<EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
void AddBias(float *inputArray, int input_num, float bias, float *outputArray)
|
||||
{
|
||||
for (int i = 0; i < input_num; i++)
|
||||
@@ -171,6 +232,12 @@ void AddBias(float *inputArray, int input_num, float bias, float *outputArray)
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief ȫ<><C8AB><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param input_w <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD>غ<EFBFBD>
|
||||
/// @param input_b <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ú<EFBFBD>
|
||||
/// @return һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfloat
|
||||
float ConnectedLayer(float *inputArray, int input_num,
|
||||
float *input_w, float input_b)
|
||||
{
|
||||
@@ -184,6 +251,10 @@ float ConnectedLayer(float *inputArray, int input_num,
|
||||
return sum;
|
||||
}
|
||||
|
||||
/// @brief ReLU<4C><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3BA>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
/// @param inputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
/// @param num <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ܵ<EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param outputArray <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
||||
void ReLU1(float *inputArray, int num, float *outputArray)
|
||||
{
|
||||
for (int i = 0; i < num; i++) {
|
||||
@@ -191,6 +262,9 @@ void ReLU1(float *inputArray, int num, float *outputArray)
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief ReLU<4C><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>Ƕ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3BA>ֵ<EFBFBD><D6B5><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
/// @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊfloat
|
||||
float ReLU2(float data)
|
||||
{
|
||||
if (data > 0) {
|
||||
@@ -202,43 +276,94 @@ float ReLU2(float data)
|
||||
}
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
/// @brief <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͱ<EFBFBD><EFBFBD><D7BC>
|
||||
/// @param arr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param size <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param max_val <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
/// @param mean ƽ<><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
||||
/// @param std_dev <20><><EFBFBD><EFBFBD><EEB1A3>
|
||||
void calculate_statistics(float arr[], int size, float *max_val, float *mean, float *std_dev)
|
||||
{
|
||||
*max_val = fabs(arr[0]);
|
||||
float sum = 0.0;
|
||||
float sum_sq = 0.0;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float abs_val = fabs(arr[i]);
|
||||
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100][100])
|
||||
if (abs_val > *max_val) {
|
||||
*max_val = abs_val;
|
||||
}
|
||||
sum += abs_val;
|
||||
sum_sq += abs_val * abs_val;
|
||||
}
|
||||
|
||||
*mean = sum / size;
|
||||
|
||||
float variance = (sum_sq / size) - (*mean * *mean);
|
||||
*std_dev = sqrt(variance);
|
||||
}
|
||||
//<2F>жϷŵ<CFB7>
|
||||
|
||||
/// @brief <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>ŵ<EFBFBD>
|
||||
/// @param arr <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param size <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param mean ƽ<><C6BD>ֵ
|
||||
/// @param std_dev <20><><EFBFBD><D7BC>
|
||||
/// @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
||||
int check_threshold(float arr[], int size, float *mean, float *std_dev)
|
||||
{
|
||||
const float threshold = 20.0;
|
||||
|
||||
for (int i = 0; i < size; i++) {
|
||||
float K = (arr[i] - *mean) / *std_dev;
|
||||
if (K > threshold) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD>100*100<30><30><EFBFBD><EFBFBD>
|
||||
/// @param get_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param Max_value <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
/// @param totalPoints <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @param CNN_data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飨<EFBFBD><E9A3A8>ά<EFBFBD><CEAC>
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100*100])
|
||||
{
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int j = 0; j < 100; j++) {
|
||||
CNN_data[i][j] = 0;
|
||||
CNN_data[i*100+j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int pointsPerInterval = totalPoints / 100;
|
||||
int pointsPerInterval = totalPoints / 100;
|
||||
float amplitudeStep = Max_value / 100;
|
||||
// long float amplitudeStep = Max_value / 100;
|
||||
|
||||
for (int i = 0; i < totalPoints; i++) {
|
||||
float amplitudeValue = fabsf(get_data[i]);
|
||||
|
||||
float amplitudeValue = fabs(get_data[i]);//data[n][] = 0.000696*n ~ 0.000696*(n+1)
|
||||
// long float amplitudeValue = fabs(get_data[i]);//data[n][] = 0.000696*n ~ 0.000696*(n+1)
|
||||
|
||||
if (amplitudeValue > Max_value) {
|
||||
amplitudeValue = Max_value;
|
||||
} else if (amplitudeValue < 0) {
|
||||
amplitudeValue = 0;
|
||||
if (amplitudeValue == 0.0f) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int intervalIndex = i / pointsPerInterval;
|
||||
if (intervalIndex >= 100) intervalIndex = 99;
|
||||
|
||||
int amplitudeIndex = (int)(amplitudeValue / amplitudeStep);
|
||||
if (amplitudeIndex >= 100) amplitudeIndex = 99;
|
||||
int amplitudeIndex = 99 - (int)(amplitudeValue / amplitudeStep);
|
||||
if (amplitudeIndex < 0) amplitudeIndex = 0;
|
||||
|
||||
CNN_data[amplitudeIndex][intervalIndex]++;
|
||||
CNN_data[amplitudeIndex*100+intervalIndex]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param input_array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param output_array <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// @param input_num <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
/// @return <20><><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>+1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>
|
||||
int calculate_probabilities(float *input_array, float *output_array, int input_num)
|
||||
{
|
||||
float sum = 0.0;
|
||||
@@ -266,12 +391,25 @@ int calculate_probabilities(float *input_array, float *output_array, int input_n
|
||||
}
|
||||
|
||||
|
||||
void _cnn_run(){
|
||||
isrun = 1;
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>*/
|
||||
|
||||
/*ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
|
||||
*Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD>֤<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>㣬<EFBFBD>п<EFBFBD><D0BF>ܳ<EFBFBD><DCB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*Ŀǰû<C7B0><C3BB><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>㡣
|
||||
*ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
|
||||
/// @brief <20><><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
/// @param data <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD> --> data.array<61><79><EFBFBD><EFBFBD>
|
||||
/// @param size ԭʼ<D4AD><CABC><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD> --> data.maxlength<74><68><EFBFBD><EFBFBD>
|
||||
void cnn_run()
|
||||
{
|
||||
float maxvalue = 0.0; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
float meanvalue = 0.0; //ƽ<><C6BD>ֵ
|
||||
float std_devvalue = 0.0; //<2F><><EFBFBD><D7BC>
|
||||
int index = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>ɶ<EFBFBD>ģ<EFBFBD>
|
||||
float *Matrix_data = (float*)mymalloc(SRAMEX, sizeof(float) * 100 * 100); //<2F><><EFBFBD>ɵ<EFBFBD>100*100<30>ľ<EFBFBD><C4BE><EFBFBD><F3B1A3B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
void cnn_run(){
|
||||
printf("CNNģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\nData<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>Ϊ<EFBFBD><EFBFBD>%s\r\n",data.dname);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",0,data.array[0]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1,data.array[1]);
|
||||
@@ -279,156 +417,215 @@ void cnn_run(){
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",299,data.array[299]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",300,data.array[300]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",301,data.array[301]);
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>һ<EFBFBD>㣡\r\n");
|
||||
//1
|
||||
float* Full_output1 = (float*)mymalloc(SRAMEX, sizeof(float) * 102 * 102);
|
||||
Full(data.array, 100, Full_output1);
|
||||
float** Convolution_result1_before = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1_relu = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1 = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
float conv1_weight_new[9] = {
|
||||
conv1_weight.array[i*9+0],conv1_weight.array[i*9+1],
|
||||
conv1_weight.array[i*9+2],conv1_weight.array[i*9+3],
|
||||
conv1_weight.array[i*9+4],conv1_weight.array[i*9+5],
|
||||
conv1_weight.array[i*9+6],conv1_weight.array[i*9+7],
|
||||
conv1_weight.array[i*9+8] };
|
||||
Convolution(Full_output1, 102, conv1_weight_new, 3, Convolution_result1_before[i]);
|
||||
}
|
||||
for (int i = 0; i < 32; i++) {
|
||||
AddBias(Convolution_result1_before[i], 100 * 100, conv1_bias.array[i], Convolution_result1_relu[i]);
|
||||
}
|
||||
for (int i = 0; i < 32; i++) {
|
||||
ReLU1(Convolution_result1_relu[i], 100 * 100, Convolution_result1[i]);
|
||||
}
|
||||
float ** Pooling_result1 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Pooling(Convolution_result1[i], 100, 2, 2, Pooling_result1[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//2
|
||||
myfree(SRAMEX, Full_output1);
|
||||
free2DArray(Convolution_result1_relu,32);
|
||||
free2DArray(Convolution_result1_before,32);
|
||||
free2DArray(Convolution_result1,32);
|
||||
float** Full_output2 = (float**)allocate2DArray(32, 52 * 52, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Full(Pooling_result1[i], 50, Full_output2[i]);
|
||||
}
|
||||
float** Convolution_result_temp_2 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_before = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_relu = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2 = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
for (int j = 0; j < 32; j++) {
|
||||
float conv2_weight_new[9] = {
|
||||
conv2_weight.array[i*32*9+9*j+0],conv2_weight.array[i*32*9+9*j+1],
|
||||
conv2_weight.array[i*32*9+9*j+2],conv2_weight.array[i*32*9+9*j+3],
|
||||
conv2_weight.array[i*32*9+9*j+4],conv2_weight.array[i*32*9+9*j+5],
|
||||
conv2_weight.array[i*32*9+9*j+6],conv2_weight.array[i*32*9+9*j+7],
|
||||
conv2_weight.array[i*32*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output2[j], 52, conv2_weight_new, 3, Convolution_result_temp_2[j]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249997,data.array[1249997]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249998,data.array[1249998]);
|
||||
DEBUG_PRINTF("data[%d]: %f\r\n",1249999,data.array[1249999]);
|
||||
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
calculate_statistics(data.array, data.maxlength, &maxvalue, &meanvalue,&std_devvalue);
|
||||
|
||||
/*<2A>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<C7B7><F1B3ACB9><EFBFBD>ֵ*/
|
||||
int x = check_threshold(data.array, data.maxlength, &meanvalue, &std_devvalue);
|
||||
if (x == 1) {
|
||||
printf("Start\r\n");
|
||||
//pre <20><>ʼԤ<CABC><D4A4><EFBFBD><EFBFBD>
|
||||
/*<2A><><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>*/
|
||||
generateMatrix(data.array, maxvalue, data.maxlength, Matrix_data);
|
||||
float *CNN_data = (float*)mymalloc(SRAMEX, sizeof(float) * 100 * 100);
|
||||
/*<2A><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>תһά<D2BB><CEAC><EFBFBD>飬<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 100; i++) {
|
||||
for (int j = 0; j < 100; j++) {
|
||||
CNN_data[9999 - index++] = Matrix_data[i*100+j];
|
||||
}
|
||||
}
|
||||
Combine(Convolution_result_temp_2, 32, 50, Convolution_result2_before[i]);
|
||||
}
|
||||
for (int i = 0; i < 64; i++) {
|
||||
AddBias(Convolution_result2_before[i], 50 * 50, conv2_bias.array[i], Convolution_result2_relu[i]);
|
||||
}
|
||||
for (int i = 0; i < 64; i++) {
|
||||
ReLU1(Convolution_result2_relu[i], 50 * 50, Convolution_result2[i]);
|
||||
}
|
||||
float** Pooling_result2 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Pooling(Convolution_result2[i], 50, 2, 2, Pooling_result2[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//3
|
||||
myfree(SRAMEX, Full_output2);
|
||||
free2DArray(Pooling_result1,32);
|
||||
free2DArray(Convolution_result_temp_2,32);
|
||||
free2DArray(Convolution_result2_relu,64);
|
||||
free2DArray(Convolution_result2_before,64);
|
||||
free2DArray(Convolution_result2,64);
|
||||
float** Full_output3 = (float**)allocate2DArray(64, 27 * 27, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Full(Pooling_result2[i], 25, Full_output3[i]);
|
||||
}
|
||||
float** Convolution_result_temp_3 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_before = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_relu = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3 = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
for (int j = 0; j < 64; j++) {
|
||||
float conv3_weight_new[9] = {
|
||||
conv3_weight.array[i*64*9+9*j+0],conv3_weight.array[i*64*9+9*j+1],
|
||||
conv3_weight.array[i*64*9+9*j+2],conv3_weight.array[i*64*9+9*j+3],
|
||||
conv3_weight.array[i*64*9+9*j+4],conv3_weight.array[i*64*9+9*j+5],
|
||||
conv3_weight.array[i*64*9+9*j+6],conv3_weight.array[i*64*9+9*j+7],
|
||||
conv3_weight.array[i*64*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output3[j], 27, conv3_weight_new, 3, Convolution_result_temp_3[j]);
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>һ<EFBFBD>㣡\r\n");
|
||||
//1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>*/
|
||||
float* Full_output1 = (float*)mymalloc(SRAMEX, sizeof(float) * 102 * 102);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
Full(CNN_data, 100, Full_output1);
|
||||
float** Convolution_result1_before = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1_relu = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
float** Convolution_result1 = (float**)allocate2DArray(32, 100 * 100, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>û<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD>*/
|
||||
float conv1_weight_new[9] = {
|
||||
conv1_weight.array[i*9+0],conv1_weight.array[i*9+1],
|
||||
conv1_weight.array[i*9+2],conv1_weight.array[i*9+3],
|
||||
conv1_weight.array[i*9+4],conv1_weight.array[i*9+5],
|
||||
conv1_weight.array[i*9+6],conv1_weight.array[i*9+7],
|
||||
conv1_weight.array[i*9+8] };
|
||||
Convolution(Full_output1, 102, conv1_weight_new, 3, Convolution_result1_before[i]);
|
||||
}
|
||||
Combine(Convolution_result_temp_3, 64, 25, Convolution_result3_before[i]);
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
AddBias(Convolution_result1_before[i], 100 * 100, conv1_bias.array[i], Convolution_result1_relu[i]);
|
||||
}
|
||||
/*<2A><>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 32; i++) {
|
||||
ReLU1(Convolution_result1_relu[i], 100 * 100, Convolution_result1[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float ** Pooling_result1 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Pooling(Convolution_result1[i], 100, 2, 2, Pooling_result1[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
myfree(SRAMEX, Full_output1);
|
||||
free2DArray(Convolution_result1_relu,32);
|
||||
free2DArray(Convolution_result1_before,32);
|
||||
free2DArray(Convolution_result1,32);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Full_output2 = (float**)allocate2DArray(32, 52 * 52, sizeof(float));
|
||||
for (int i = 0; i < 32; i++) {
|
||||
Full(Pooling_result1[i], 50, Full_output2[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Դ*/
|
||||
float** Convolution_result_temp_2 = (float**)allocate2DArray(32, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_before = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2_relu = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
float** Convolution_result2 = (float**)allocate2DArray(64, 50 * 50, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
for (int j = 0; j < 32; j++) {
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float conv2_weight_new[9] = {
|
||||
conv2_weight.array[i*32*9+9*j+0],conv2_weight.array[i*32*9+9*j+1],
|
||||
conv2_weight.array[i*32*9+9*j+2],conv2_weight.array[i*32*9+9*j+3],
|
||||
conv2_weight.array[i*32*9+9*j+4],conv2_weight.array[i*32*9+9*j+5],
|
||||
conv2_weight.array[i*32*9+9*j+6],conv2_weight.array[i*32*9+9*j+7],
|
||||
conv2_weight.array[i*32*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output2[j], 52, conv2_weight_new, 3, Convolution_result_temp_2[j]);
|
||||
}
|
||||
/*ÿһ<C3BF><D2BB><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ϲ<EFBFBD>*/
|
||||
Combine(Convolution_result_temp_2, 32, 50, Convolution_result2_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
AddBias(Convolution_result2_before[i], 50 * 50, conv2_bias.array[i], Convolution_result2_relu[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 64; i++) {
|
||||
ReLU1(Convolution_result2_relu[i], 50 * 50, Convolution_result2[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Pooling_result2 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Pooling(Convolution_result2[i], 50, 2, 2, Pooling_result2[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Full_output2,32);
|
||||
free2DArray(Pooling_result1,32);
|
||||
free2DArray(Convolution_result_temp_2,32);
|
||||
free2DArray(Convolution_result2_relu,64);
|
||||
free2DArray(Convolution_result2_before,64);
|
||||
free2DArray(Convolution_result2,64);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Full_output3 = (float**)allocate2DArray(64, 27 * 27, sizeof(float));
|
||||
for (int i = 0; i < 64; i++) {
|
||||
Full(Pooling_result2[i], 25, Full_output3[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD>뱾<EFBFBD><EBB1BE><EFBFBD><EFBFBD>Դ*/
|
||||
float** Convolution_result_temp_3 = (float**)allocate2DArray(64, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_before = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3_relu = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
float** Convolution_result3 = (float**)allocate2DArray(128, 25 * 25, sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
for (int j = 0; j < 64; j++) {
|
||||
float conv3_weight_new[9] = {
|
||||
conv3_weight.array[i*64*9+9*j+0],conv3_weight.array[i*64*9+9*j+1],
|
||||
conv3_weight.array[i*64*9+9*j+2],conv3_weight.array[i*64*9+9*j+3],
|
||||
conv3_weight.array[i*64*9+9*j+4],conv3_weight.array[i*64*9+9*j+5],
|
||||
conv3_weight.array[i*64*9+9*j+6],conv3_weight.array[i*64*9+9*j+7],
|
||||
conv3_weight.array[i*64*9+9*j+8]
|
||||
};
|
||||
Convolution(Full_output3[j], 27, conv3_weight_new, 3, Convolution_result_temp_3[j]);
|
||||
}
|
||||
/*<2A><>ͼ<EFBFBD><CDBC><EFBFBD>ϲ<EFBFBD>*/
|
||||
Combine(Convolution_result_temp_3, 64, 25, Convolution_result3_before[i]);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
AddBias(Convolution_result3_before[i], 25 * 25, conv3_bias.array[i], Convolution_result3_relu[i]);
|
||||
}
|
||||
/*ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
for (int i = 0; i < 128; i++) {
|
||||
ReLU1(Convolution_result3_relu[i], 25 * 25, Convolution_result3[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float** Pooling_result3 = (float**)allocate2DArray(128, 12 * 12, sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
Pooling(Convolution_result3_before[i], 25, 2, 2, Pooling_result3[i]);
|
||||
}
|
||||
/*<2A>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>һά<D2BB><CEAC><EFBFBD><EFBFBD>*/
|
||||
float* xi = (float *)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
Flatten2D(Pooling_result3, 128, 12, xi);
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//4 <20><>һ<EFBFBD><D2BB><EFBFBD>Ӳ<EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Full_output3,64);
|
||||
free2DArray(Pooling_result2,64);
|
||||
free2DArray(Convolution_result_temp_3,64);
|
||||
free2DArray(Convolution_result3_relu,128);
|
||||
free2DArray(Convolution_result3_before,128);
|
||||
free2DArray(Convolution_result3,128);
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
//float yi[128] = {0};
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>IJ㣡\r\n");
|
||||
float* yi = (float *)mymalloc(SRAMEX, 128 * sizeof(float));
|
||||
memset(yi, 0, 128 * sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
float sum = 0;
|
||||
//float fc1_weight_new[128*12*12];
|
||||
float* fc1_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(fc1_weight_new,&fc1_weight.array[i*128*12*12],128*12*12 * sizeof(float));
|
||||
sum = ConnectedLayer(xi, 128 * 12 * 12, fc1_weight_new, fc1_bias.array[i]);
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
yi[i] = ReLU2(sum);
|
||||
myfree(SRAMEX, fc1_weight_new);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>
|
||||
/*<2A>ͷ<EFBFBD><CDB7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ*/
|
||||
free2DArray(Pooling_result3,128);
|
||||
/*<2A><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
float zi[7] = {0};
|
||||
// float *zi = (float *)mymalloc(SRAMEX, 7 * sizeof(float));
|
||||
// memset(zi, 0, 7 * sizeof(float));
|
||||
for (int i = 0; i < 7; i++) {
|
||||
//float fc2_weight_new[128];
|
||||
float* fc2_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128);
|
||||
/*<2A><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
memcpy(fc2_weight_new,&fc2_weight.array[i*128],128 * sizeof(float));
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ReLU<4C><55><EFBFBD><EFBFBD>*/
|
||||
zi[i] = ConnectedLayer(yi, 128, fc2_weight_new, fc2_bias.array[i]);
|
||||
myfree(SRAMEX, fc2_weight_new);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//end <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float result[7];
|
||||
int max_probability_idx = calculate_probabilities(zi,result,7);
|
||||
PrintfResArray(zi,7,7);
|
||||
PrintfResArray(result,7,7);
|
||||
printf("%f, Label %d\t", result[max_probability_idx - 1] * 100, max_probability_idx);
|
||||
myfree(SRAMEX, xi);
|
||||
myfree(SRAMEX, yi);
|
||||
myfree(SRAMEX, CNN_data);
|
||||
myfree(SRAMEX, Full_output1);
|
||||
myfree(SRAMEX, Matrix_data);
|
||||
}
|
||||
for (int i = 0; i < 128; i++) {
|
||||
AddBias(Convolution_result3_before[i], 25 * 25, conv3_bias.array[i], Convolution_result3_relu[i]);
|
||||
}
|
||||
for (int i = 0; i < 128; i++) {
|
||||
ReLU1(Convolution_result3_relu[i], 25 * 25, Convolution_result3[i]);
|
||||
}
|
||||
float** Pooling_result3 = (float**)allocate2DArray(128, 12 * 12, sizeof(float));
|
||||
for (int i = 0; i < 128; i++) {
|
||||
Pooling(Convolution_result3_before[i], 25, 2, 2, Pooling_result3[i]);
|
||||
}
|
||||
float* xi = (float*)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
Flatten2D(Pooling_result3, 128, 12, xi);
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//4
|
||||
myfree(SRAMEX, Full_output3);
|
||||
free2DArray(Pooling_result2,64);
|
||||
free2DArray(Convolution_result_temp_3,64);
|
||||
free2DArray(Convolution_result3_relu,128);
|
||||
free2DArray(Convolution_result3_before,128);
|
||||
free2DArray(Convolution_result3,128);
|
||||
|
||||
//float yi[128] = {0};
|
||||
float *yi = (float *)mymalloc(SRAMEX, 128 * sizeof(float));
|
||||
memset(yi, 0, 128 * sizeof(float));
|
||||
|
||||
for (int i = 0; i < 128; i++) {
|
||||
float sum = 0;
|
||||
float* fc1_weight_new = (float*)mymalloc(SRAMEX, sizeof(float) * 128 * 12 * 12);
|
||||
memcpy(fc1_weight_new,&fc1_weight.array[i*128*12*12],128*12*12 * sizeof(float));
|
||||
sum = ConnectedLayer(xi, 128 * 12 * 12, fc1_weight_new, fc1_bias.array[i]);
|
||||
yi[i] = ReLU2(sum);
|
||||
myfree(SRAMEX, fc1_weight_new);
|
||||
}
|
||||
//printf("\n");
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
//PrintfArray(yi,128,128);
|
||||
//5
|
||||
free2DArray(Pooling_result3,128);
|
||||
|
||||
//float zi[7] = { 0 };
|
||||
float *zi = (float *)mymalloc(SRAMEX, 7 * sizeof(float));
|
||||
memset(yi, 0, 7 * sizeof(float));
|
||||
|
||||
for (int i = 0; i < 7; i++) {
|
||||
float fc2_weight_new[128];
|
||||
memcpy(fc2_weight_new,&fc2_weight.array[i*128],128 * sizeof(float));
|
||||
zi[i] = ConnectedLayer(yi, 128, fc2_weight_new, fc2_bias.array[i]);
|
||||
}
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD>\r\n");
|
||||
PrintfArray(zi,7,7);
|
||||
//end
|
||||
float *result = (float *)mymalloc(SRAMEX, 7 * sizeof(float));
|
||||
int max_probability_idx = calculate_probabilities(zi,result,7);
|
||||
PrintfArray(result,7,7);
|
||||
printf("%f, Label %d\r\n", result[max_probability_idx - 1] * 100, max_probability_idx);
|
||||
myfree(SRAMEX, xi);
|
||||
myfree(SRAMEX, yi);
|
||||
myfree(SRAMEX, zi);
|
||||
myfree(SRAMEX, result);
|
||||
else printf("No\r\n");/*<2A><><EFBFBD><EFBFBD>û<EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>ӡ<EFBFBD><D3A1>No<4E><6F>*/
|
||||
printf("maxvalue is:%f\t",maxvalue);
|
||||
printf("meanvalue is:%f\t",meanvalue);
|
||||
printf("std_devvalue is:%f\r\n",std_devvalue);
|
||||
isrun = 0;
|
||||
}
|
||||
|
||||
|
||||
8
MY/cnn.h
8
MY/cnn.h
@@ -1,6 +1,9 @@
|
||||
#ifndef _CNN_H_
|
||||
#define _CNN_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "my.h"
|
||||
|
||||
@@ -20,9 +23,12 @@ float ReLU2(float data);
|
||||
void AddBias(float *inputArray, int input_num, float bias, float *outputArray);
|
||||
|
||||
int calculate_probabilities(float *input_array, float *output_array, int input_num);
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100][100]);
|
||||
void generateMatrix(float *get_data, float Max_value, int totalPoints, float CNN_data[100*100]);
|
||||
void calculate_statistics(float arr[], int size, float *max_val, float *mean, float *std_dev);
|
||||
int check_threshold(float arr[], int size, float *mean, float *std_dev);
|
||||
|
||||
void _cnn_run(void);
|
||||
void cnn_run(void);
|
||||
void PrintfResArray(float *array, int array_num, int elements_per_line);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "led.h"
|
||||
|
||||
|
||||
u8 _DEBUG = 1;
|
||||
u8 _DEBUG = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
68
MY/my.c
68
MY/my.c
@@ -156,12 +156,12 @@ u8 model_write(char* model_name)
|
||||
model_write("fc1_weight");
|
||||
model_write("fc2_bias");
|
||||
model_write("fc2_weight");
|
||||
model_write("data");
|
||||
|
||||
model_info("all");
|
||||
SDRAM_USED();
|
||||
}else{
|
||||
u8 res=0;
|
||||
u8 isneg=0;
|
||||
u8 _times=0;
|
||||
u32 _larr = 0;
|
||||
u8 _len = strlen(model_name);
|
||||
@@ -171,11 +171,10 @@ u8 model_write(char* model_name)
|
||||
int progress;
|
||||
Model *_model = model(model_name);
|
||||
|
||||
printf("\r\n");
|
||||
if(_model == NULL || strcmp(model_name, "data") == 0){
|
||||
sprintf(_path, "0:/%s.txt", model_name);
|
||||
if(f_open(file, (const TCHAR *)_path, 1)){
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>ģ<EFBFBD>ͻ<EFBFBD>Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
DEBUG_PRINTF("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>ģ<EFBFBD>ͻ<EFBFBD>Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
return 199;
|
||||
}else{
|
||||
_model = model("data");
|
||||
@@ -199,8 +198,8 @@ u8 model_write(char* model_name)
|
||||
DEBUG_PRINTF("д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD>%s\r\n", _model -> name);
|
||||
if(_model -> dname)DEBUG_PRINTF("д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Data<EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD>ǣ<EFBFBD>%s\r\n", _model -> dname);
|
||||
DEBUG_PRINTF("д<EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\r\n", _model -> maxlength);
|
||||
DEBUG_PRINTF("Ŀǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d\r\n", _model -> realength);
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>'%s'<27><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>......\r\n",_model -> dname ? _model -> dname : _model -> name);
|
||||
DEBUG_PRINTF("Ŀǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>%d", _model -> realength);
|
||||
printf("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>'%s'<27><><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD>......\r\n",_model -> dname ? _model -> dname : _model -> name);
|
||||
|
||||
while(1){
|
||||
res = f_read(file, fatbuf, READLENGTH ,&br);
|
||||
@@ -211,13 +210,17 @@ u8 model_write(char* model_name)
|
||||
for(int i=0; i < br; i++){
|
||||
if(fatbuf[i] == 0x0d){
|
||||
float _fvalue = atof(_fstr);
|
||||
if(isneg)_fvalue = -_fvalue;
|
||||
_model -> array[_larr++] = _fvalue;
|
||||
//DEBUG_PRINTF("<22>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n<>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i,_fstr,_fvalue);
|
||||
i++;
|
||||
isneg=0;
|
||||
*_fstr = NULL;
|
||||
_model -> realength = _larr; //_larr<72><72><EFBFBD><EFBFBD>ֵΪģ<CEAA><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(_larr >= _model -> maxlength)break;
|
||||
}else{
|
||||
}
|
||||
else if(fatbuf[i] == 0x2d)isneg = 1;
|
||||
else{
|
||||
sprintf(_sstr, "%c", fatbuf[i]);
|
||||
strcat(_fstr, _sstr);
|
||||
//DEBUG_PRINTF("[%d]_fstr is[%s], _sstr is[%s], fatbuf is [%c]\r\n",i,_fstr,_sstr,fatbuf[i]);
|
||||
@@ -225,12 +228,12 @@ u8 model_write(char* model_name)
|
||||
}
|
||||
if(_model -> maxlength >= 73728 && (_larr >= (_model -> maxlength/10)*_times)){
|
||||
progress = _larr >= _model -> maxlength ? 100 : _times++ == 0 ? 0 : progress + 10;
|
||||
printf("\r\n[");
|
||||
DEBUG_PRINTF("\r\n[");
|
||||
for(u16 j=0; j<50;j++){
|
||||
if(j < progress/2) printf("=");
|
||||
else printf(" ");
|
||||
if(j < progress/2) DEBUG_PRINTF("=");
|
||||
else DEBUG_PRINTF(" ");
|
||||
}
|
||||
printf("] %d%%", progress);
|
||||
DEBUG_PRINTF("] %d%%", progress);
|
||||
}
|
||||
if(_larr >= _model -> maxlength)break;
|
||||
}
|
||||
@@ -388,48 +391,3 @@ void model_init(){
|
||||
data.dname = "data";
|
||||
}
|
||||
|
||||
|
||||
|
||||
u8 sd_read(u32 length, char* model_name, u32 gap)
|
||||
{
|
||||
u8 res=0;
|
||||
u32 _larr = 0;
|
||||
char _tmp[11] = "";
|
||||
char _path[20] = {0};
|
||||
|
||||
float* floatArray = NULL;
|
||||
Model *_model = model(model_name);
|
||||
|
||||
if(length >= _model -> maxlength)length = _model -> maxlength -1;
|
||||
floatArray = modelmym_init(model_name);
|
||||
if(floatArray == NULL){
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
return 7;
|
||||
}
|
||||
sprintf(_path, "0:/%s.txt",model_name);
|
||||
f_open(file,(const TCHAR*)_path,1);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
while(_larr <= length){
|
||||
res=f_read(file,fatbuf,11,&br);
|
||||
if(res)DEBUG_PRINTF("\r\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",res);
|
||||
else{
|
||||
for(u32 i=0;i<br;i++){
|
||||
if(fatbuf[i]==0x0d){
|
||||
float value = atof(_tmp);
|
||||
memset(_tmp, 0, sizeof(_tmp));
|
||||
floatArray[_larr++] = value;
|
||||
DEBUG_PRINTF("<EFBFBD>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[string]: %s\r\n",i,_tmp);
|
||||
DEBUG_PRINTF("<EFBFBD>س<EFBFBD>[%d] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[float]: %f\r\n",i+1,value);
|
||||
}else{
|
||||
char buffer[2];
|
||||
sprintf(buffer, "%c", fatbuf[i]);
|
||||
strcat(_tmp, buffer);
|
||||
DEBUG_PRINTF("[%d]: %c\r\n",i,fatbuf[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i=0;i<((length/gap)+(length%gap ? 2 : 1));i++)
|
||||
printf("\r\nfloatArray[%d]: %f",i<=length ? i : length,i<=length ? floatArray[i] : floatArray[length]);
|
||||
printf("\r\n");
|
||||
return res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user