diff options
Diffstat (limited to 'dnn/adaconvtest.c')
-rw-r--r-- | dnn/adaconvtest.c | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/dnn/adaconvtest.c b/dnn/adaconvtest.c new file mode 100644 index 00000000..722e4aff --- /dev/null +++ b/dnn/adaconvtest.c @@ -0,0 +1,449 @@ +#include "lace_data.h" +#include "nolace_data.h" +#include "osce.h" +#include "nndsp.h" + + +#include <stdlib.h> +#include <stdio.h> +#include <math.h> + + +extern const WeightArray lacelayers_arrays[]; +extern const WeightArray nolacelayers_arrays[]; + +void adaconv_compare( + const char * prefix, + int num_frames, + AdaConvState* hAdaConv, + LinearLayer *kernel_layer, + LinearLayer *gain_layer, + int feature_dim, + int frame_size, + int overlap_size, + int in_channels, + int out_channels, + int kernel_size, + int left_padding, + float filter_gain_a, + float filter_gain_b, + float shape_gain +) +{ + char feature_file[256]; + char x_in_file[256]; + char x_out_file[256]; + char message[512]; + int i_frame, i_sample; + float mse; + float features[512]; + float x_in[512]; + float x_out_ref[512]; + float x_out[512]; + float window[40]; + + init_adaconv_state(hAdaConv); + compute_overlap_window(window, 40); + + FILE *f_features, *f_x_in, *f_x_out; + + strcpy(feature_file, prefix); + strcat(feature_file, "_features.f32"); + f_features = fopen(feature_file, "r"); + if (f_features == NULL) + { + sprintf(message, "could not open file %s", feature_file); + perror(message); + exit(1); + } + + strcpy(x_in_file, prefix); + strcat(x_in_file, "_x_in.f32"); + f_x_in = fopen(x_in_file, "r"); + if (f_x_in == NULL) + { + sprintf(message, "could not open file %s", x_in_file); + perror(message); + exit(1); + } + + strcpy(x_out_file, prefix); + strcat(x_out_file, "_x_out.f32"); + f_x_out = fopen(x_out_file, "r"); + if (f_x_out == NULL) + { + sprintf(message, "could not open file %s", x_out_file); + perror(message); + exit(1); + } + + for (i_frame = 0; i_frame < num_frames; i_frame ++) + { + if (fread(features, sizeof(float), feature_dim, f_features) != feature_dim) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, feature_file); + exit(1); + } + + if (fread(x_in, sizeof(float), frame_size * in_channels, f_x_in) != frame_size * in_channels) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, x_in_file); + exit(1); + } + + if (fread(x_out_ref, sizeof(float), frame_size * out_channels, f_x_out) != frame_size * out_channels) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, x_out_file); + exit(1); + } + + adaconv_process_frame(hAdaConv, x_out, x_in, features, kernel_layer, gain_layer, feature_dim, + frame_size, overlap_size, in_channels, out_channels, kernel_size, left_padding, + filter_gain_a, filter_gain_b, shape_gain, window, 0); + + mse = 0; + for (i_sample = 0; i_sample < frame_size * out_channels; i_sample ++) + { + mse += pow(x_out_ref[i_sample] - x_out[i_sample], 2); + } + mse = sqrt(mse / (frame_size * out_channels)); + printf("rmse[%d] %f\n", i_frame, mse); + + } +} + + +void adacomb_compare( + const char * prefix, + int num_frames, + AdaCombState* hAdaComb, + LinearLayer *kernel_layer, + LinearLayer *gain_layer, + LinearLayer *global_gain_layer, + int feature_dim, + int frame_size, + int overlap_size, + int kernel_size, + int left_padding, + float filter_gain_a, + float filter_gain_b, + float log_gain_limit +) +{ + char feature_file[256]; + char x_in_file[256]; + char p_in_file[256]; + char x_out_file[256]; + char message[512]; + int i_frame, i_sample; + float mse; + float features[512]; + float x_in[512]; + float x_out_ref[512]; + float x_out[512]; + int pitch_lag; + float window[40]; + + init_adacomb_state(hAdaComb); + compute_overlap_window(window, 40); + + FILE *f_features, *f_x_in, *f_p_in, *f_x_out; + + strcpy(feature_file, prefix); + strcat(feature_file, "_features.f32"); + f_features = fopen(feature_file, "r"); + if (f_features == NULL) + { + sprintf(message, "could not open file %s", feature_file); + perror(message); + exit(1); + } + + strcpy(x_in_file, prefix); + strcat(x_in_file, "_x_in.f32"); + f_x_in = fopen(x_in_file, "r"); + if (f_x_in == NULL) + { + sprintf(message, "could not open file %s", x_in_file); + perror(message); + exit(1); + } + + strcpy(p_in_file, prefix); + strcat(p_in_file, "_p_in.s32"); + f_p_in = fopen(p_in_file, "r"); + if (f_p_in == NULL) + { + sprintf(message, "could not open file %s", p_in_file); + perror(message); + exit(1); + } + + strcpy(x_out_file, prefix); + strcat(x_out_file, "_x_out.f32"); + f_x_out = fopen(x_out_file, "r"); + if (f_x_out == NULL) + { + sprintf(message, "could not open file %s", x_out_file); + perror(message); + exit(1); + } + + for (i_frame = 0; i_frame < num_frames; i_frame ++) + { + if (fread(features, sizeof(float), feature_dim, f_features) != feature_dim) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, feature_file); + exit(1); + } + + if (fread(x_in, sizeof(float), frame_size, f_x_in) != frame_size) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, x_in_file); + exit(1); + } + + if (fread(&pitch_lag, sizeof(int), 1, f_p_in) != 1) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, p_in_file); + exit(1); + } + + if (fread(x_out_ref, sizeof(float), frame_size, f_x_out) != frame_size) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, x_out_file); + exit(1); + } + + adacomb_process_frame(hAdaComb, x_out, x_in, features, kernel_layer, gain_layer, global_gain_layer, + pitch_lag, feature_dim, frame_size, overlap_size, kernel_size, left_padding, filter_gain_a, filter_gain_b, log_gain_limit, window, 0); + + + mse = 0; + for (i_sample = 0; i_sample < frame_size; i_sample ++) + { + mse += pow(x_out_ref[i_sample] - x_out[i_sample], 2); + } + mse = sqrt(mse / (frame_size)); + printf("rmse[%d] %f\n", i_frame, mse); + + } +} + +void adashape_compare( + const char * prefix, + int num_frames, + AdaShapeState* hAdaShape, + LinearLayer *alpha1, + LinearLayer *alpha2, + int feature_dim, + int frame_size, + int avg_pool_k +) +{ + char feature_file[256]; + char x_in_file[256]; + char x_out_file[256]; + char message[512]; + int i_frame, i_sample; + float mse; + float features[512]; + float x_in[512]; + float x_out_ref[512]; + float x_out[512]; + + init_adashape_state(hAdaShape); + + FILE *f_features, *f_x_in, *f_x_out; + + strcpy(feature_file, prefix); + strcat(feature_file, "_features.f32"); + f_features = fopen(feature_file, "r"); + if (f_features == NULL) + { + sprintf(message, "could not open file %s", feature_file); + perror(message); + exit(1); + } + + strcpy(x_in_file, prefix); + strcat(x_in_file, "_x_in.f32"); + f_x_in = fopen(x_in_file, "r"); + if (f_x_in == NULL) + { + sprintf(message, "could not open file %s", x_in_file); + perror(message); + exit(1); + } + + strcpy(x_out_file, prefix); + strcat(x_out_file, "_x_out.f32"); + f_x_out = fopen(x_out_file, "r"); + if (f_x_out == NULL) + { + sprintf(message, "could not open file %s", x_out_file); + perror(message); + exit(1); + } + + for (i_frame = 0; i_frame < num_frames; i_frame ++) + { + if (fread(features, sizeof(float), feature_dim, f_features) != feature_dim) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, feature_file); + exit(1); + } + + if (fread(x_in, sizeof(float), frame_size, f_x_in) != frame_size) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, x_in_file); + exit(1); + } + + if (fread(x_out_ref, sizeof(float), frame_size, f_x_out) != frame_size) + { + fprintf(stderr, "could not read frame %d from %s\n", i_frame, x_out_file); + exit(1); + } + + adashape_process_frame(hAdaShape, x_out, x_in, features, alpha1, alpha2, feature_dim, + frame_size, avg_pool_k, 0); + + mse = 0; + for (i_sample = 0; i_sample < frame_size; i_sample ++) + { + mse += pow(x_out_ref[i_sample] - x_out[i_sample], 2); + } + mse = sqrt(mse / (frame_size)); + printf("rmse[%d] %f\n", i_frame, mse); + + } +} + + +int main() +{ + LACELayers hLACE; + NOLACELayers hNoLACE; + + AdaConvState hAdaConv; + AdaCombState hAdaComb; + AdaShapeState hAdaShape; + + init_adaconv_state(&hAdaConv); + + init_lacelayers(&hLACE, lacelayers_arrays); + init_nolacelayers(&hNoLACE, nolacelayers_arrays); + + printf("\ntesting lace.af1 (1 in, 1 out)...\n"); + adaconv_compare( + "testvectors/lace_af1", + 5, + &hAdaConv, + &hLACE.lace_af1_kernel, + &hLACE.lace_af1_gain, + LACE_AF1_FEATURE_DIM, + LACE_AF1_FRAME_SIZE, + LACE_AF1_OVERLAP_SIZE, + LACE_AF1_IN_CHANNELS, + LACE_AF1_OUT_CHANNELS, + LACE_AF1_KERNEL_SIZE, + LACE_AF1_LEFT_PADDING, + LACE_AF1_FILTER_GAIN_A, + LACE_AF1_FILTER_GAIN_B, + LACE_AF1_SHAPE_GAIN + ); + + + printf("\ntesting nolace.af1 (1 in, 2 out)...\n"); + adaconv_compare( + "testvectors/nolace_af1", + 5, + &hAdaConv, + &hNoLACE.nolace_af1_kernel, + &hNoLACE.nolace_af1_gain, + NOLACE_AF1_FEATURE_DIM, + NOLACE_AF1_FRAME_SIZE, + NOLACE_AF1_OVERLAP_SIZE, + NOLACE_AF1_IN_CHANNELS, + NOLACE_AF1_OUT_CHANNELS, + NOLACE_AF1_KERNEL_SIZE, + NOLACE_AF1_LEFT_PADDING, + NOLACE_AF1_FILTER_GAIN_A, + NOLACE_AF1_FILTER_GAIN_B, + NOLACE_AF1_SHAPE_GAIN + ); + + + printf("testing nolace.af4 (2 in, 1 out)...\n"); + adaconv_compare( + "testvectors/nolace_af4", + 5, + &hAdaConv, + &hNoLACE.nolace_af4_kernel, + &hNoLACE.nolace_af4_gain, + NOLACE_AF4_FEATURE_DIM, + NOLACE_AF4_FRAME_SIZE, + NOLACE_AF4_OVERLAP_SIZE, + NOLACE_AF4_IN_CHANNELS, + NOLACE_AF4_OUT_CHANNELS, + NOLACE_AF4_KERNEL_SIZE, + NOLACE_AF4_LEFT_PADDING, + NOLACE_AF4_FILTER_GAIN_A, + NOLACE_AF4_FILTER_GAIN_B, + NOLACE_AF4_SHAPE_GAIN + ); + + printf("\ntesting nolace.af2 (2 in, 2 out)...\n"); + adaconv_compare( + "testvectors/nolace_af2", + 5, + &hAdaConv, + &hNoLACE.nolace_af2_kernel, + &hNoLACE.nolace_af2_gain, + NOLACE_AF2_FEATURE_DIM, + NOLACE_AF2_FRAME_SIZE, + NOLACE_AF2_OVERLAP_SIZE, + NOLACE_AF2_IN_CHANNELS, + NOLACE_AF2_OUT_CHANNELS, + NOLACE_AF2_KERNEL_SIZE, + NOLACE_AF2_LEFT_PADDING, + NOLACE_AF2_FILTER_GAIN_A, + NOLACE_AF2_FILTER_GAIN_B, + NOLACE_AF2_SHAPE_GAIN + ); + + printf("\ntesting lace.cf1...\n"); + adacomb_compare( + "testvectors/lace_cf1", + 5, + &hAdaComb, + &hLACE.lace_cf1_kernel, + &hLACE.lace_cf1_gain, + &hLACE.lace_cf1_global_gain, + LACE_CF1_FEATURE_DIM, + LACE_CF1_FRAME_SIZE, + LACE_CF1_OVERLAP_SIZE, + LACE_CF1_KERNEL_SIZE, + LACE_CF1_LEFT_PADDING, + LACE_CF1_FILTER_GAIN_A, + LACE_CF1_FILTER_GAIN_B, + LACE_CF1_LOG_GAIN_LIMIT + ); + + printf("\ntesting nolace.tdshape1...\n"); + adashape_compare( + "testvectors/nolace_tdshape1", + 5, + &hAdaShape, + &hNoLACE.nolace_tdshape1_alpha1, + &hNoLACE.nolace_tdshape1_alpha2, + NOLACE_TDSHAPE1_FEATURE_DIM, + NOLACE_TDSHAPE1_FRAME_SIZE, + NOLACE_TDSHAPE1_AVG_POOL_K + ); + + return 0; +} + +/* gcc -DVAR_ARRAYS -DENABLE_OSCE -I ../include -I ../silk -I . -I ../celt adaconvtest.c nndsp.c lace_data.c nolace_data.c nnet.c nnet_default.c ../celt/pitch.c ../celt/celt_lpc.c parse_lpcnet_weights.c -lm -o adaconvtest */
\ No newline at end of file |