1
+ #include "dscnn.h"
2
+ #include "conv1d.h"
3
+ #include "conv_utils.h"
4
+ #include <stdio.h>
5
+
6
+ int DSCNN_LR (float * output_signal , float * input_signal , unsigned in_T , unsigned in_channels , float * mean , float * var ,
7
+ unsigned affine , float * gamma , float * beta , unsigned in_place , unsigned cnn_hidden , int cnn_padding , unsigned cnn_kernel_size ,
8
+ const void * cnn_params , int cnn_activations ){
9
+ unsigned out_T ;
10
+ // BatchNorm
11
+ float * norm_out = (float * )malloc (in_T * in_channels * sizeof (float ));
12
+ BatchNorm1d (norm_out , input_signal , in_T , in_channels ,
13
+ mean , var , affine , gamma , beta , in_place );
14
+
15
+ // CNN
16
+ out_T = in_T - cnn_kernel_size + 2 * cnn_padding + 1 ;
17
+ Conv1D_LR (output_signal , out_T , cnn_hidden , norm_out ,
18
+ in_T , in_channels , cnn_padding , cnn_kernel_size ,
19
+ cnn_params , cnn_activations );
20
+ free (norm_out );
21
+
22
+ return 0 ;
23
+ }
24
+
25
+ int DSCNN_LR_Point_Depth (float * output_signal , float * input_signal , unsigned in_T , unsigned in_channels , float * mean , float * var ,
26
+ unsigned affine , float * gamma , float * beta , unsigned in_place , unsigned depth_cnn_hidden , int depth_cnn_padding ,
27
+ unsigned depth_cnn_kernel_size , const void * depth_cnn_params , int depth_cnn_activations , unsigned point_cnn_hidden ,
28
+ int point_cnn_padding , unsigned point_cnn_kernel_size , const void * point_cnn_params , int point_cnn_activations ,
29
+ int pool_padding , unsigned pool_kernel_size , int pool_activation ){
30
+
31
+ // Activation
32
+ unsigned out_T ;
33
+ float * act_out = (float * )malloc (in_T * (in_channels >>1 ) * sizeof (float ));
34
+ TanhGate (act_out , input_signal , in_T , in_channels );
35
+
36
+ // Norm
37
+ in_channels >>= 1 ;
38
+ // float* norm_out = (float*)malloc(in_T*in_channels*sizeof(float));
39
+ BatchNorm1d (0 , act_out , in_T , in_channels ,
40
+ mean , var , affine , gamma , beta , in_place );
41
+ // free(act_out);
42
+
43
+ // Depth CNN
44
+ out_T = in_T - depth_cnn_kernel_size + 2 * depth_cnn_padding + 1 ;
45
+ float * depth_out = (float * )malloc (out_T * depth_cnn_hidden * sizeof (float ));
46
+ Conv1D_Depth (depth_out , out_T , act_out ,
47
+ in_T , in_channels , depth_cnn_padding , depth_cnn_kernel_size ,
48
+ depth_cnn_params , depth_cnn_activations );
49
+ // free(norm_out);
50
+ free (act_out );
51
+
52
+ // Point CNN
53
+ in_T = out_T ;
54
+ out_T = in_T - point_cnn_kernel_size + 2 * point_cnn_padding + 1 ;
55
+ float * point_out = (float * )malloc (out_T * point_cnn_hidden * sizeof (float ));
56
+ Conv1D_LR (point_out , out_T , point_cnn_hidden , depth_out ,
57
+ in_T , depth_cnn_hidden , point_cnn_padding , point_cnn_kernel_size ,
58
+ point_cnn_params , point_cnn_activations );
59
+ free (depth_out );
60
+
61
+ // Pool
62
+ in_T = out_T ;
63
+ out_T = in_T - pool_kernel_size + 2 * pool_padding + 1 ;
64
+ AvgPool1D (output_signal , out_T , point_out , in_T , point_cnn_hidden ,
65
+ pool_padding , pool_kernel_size , pool_activation );
66
+ free (point_out );
67
+
68
+ return 0 ;
69
+ }
0 commit comments