From 7ab2e5cf22bbb31808bcacf84c054c710e4e6a93 Mon Sep 17 00:00:00 2001
From: Yabin Li <wucong.lyb@alibaba-inc.com>
Date: 星期一, 24 四月 2023 16:19:17 +0800
Subject: [PATCH] Merge pull request #400 from alibaba-damo-academy/dev_knf
---
funasr/runtime/onnxruntime/src/online-feature.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/funasr/runtime/onnxruntime/src/online-feature.h b/funasr/runtime/onnxruntime/src/online-feature.h
new file mode 100644
index 0000000..78245de
--- /dev/null
+++ b/funasr/runtime/onnxruntime/src/online-feature.h
@@ -0,0 +1,51 @@
+
+#include <vector>
+#include "precomp.h"
+
+using namespace std;
+
+class OnlineFeature {
+
+public:
+ OnlineFeature(int sample_rate, knf::FbankOptions fbank_opts, int lfr_m_, int lfr_n_,
+ std::vector<std::vector<float>> cmvns_);
+
+ void ExtractFeats(vector<vector<float>> &vad_feats, vector<float> waves, bool input_finished);
+
+private:
+ void OnlineFbank(vector<vector<float>> &vad_feats, vector<float> &waves);
+ int OnlineLfrCmvn(vector<vector<float>> &vad_feats);
+
+ static int ComputeFrameNum(int sample_length, int frame_sample_length, int frame_shift_sample_length) {
+ int frame_num = static_cast<int>((sample_length - frame_sample_length) / frame_shift_sample_length + 1);
+ if (frame_num >= 1 && sample_length >= frame_sample_length)
+ return frame_num;
+ else
+ return 0;
+ }
+
+ void ResetCache() {
+ reserve_waveforms_.clear();
+ input_cache_.clear();
+ lfr_splice_cache_.clear();
+ input_finished_ = false;
+
+ }
+
+ knf::FbankOptions fbank_opts_;
+ // The reserved waveforms by fbank
+ std::vector<float> reserve_waveforms_;
+ // waveforms reserved after last shift position
+ std::vector<float> input_cache_;
+ // lfr reserved cache
+ std::vector<std::vector<float>> lfr_splice_cache_;
+ std::vector<std::vector<float>> cmvns_;
+
+ int sample_rate_ = 16000;
+ int frame_sample_length_ = sample_rate_ / 1000 * 25;;
+ int frame_shift_sample_length_ = sample_rate_ / 1000 * 10;
+ int lfr_m_;
+ int lfr_n_;
+ bool input_finished_ = false;
+
+};
--
Gitblit v1.9.1