语音知识回顾和总结---短时频域性质

2024-05-13 05:48

本文主要是介绍语音知识回顾和总结---短时频域性质,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      从上次的短时时域性质,隔了很长时间才开始进行这个。这个频域写完,后面的安排就是首先就是语音的特征,然后把VQ,DTW,HMM,GMM和语音识别系统的一些东西写下。希望这个系列可以丰富点。由于最近在看信息检索,大数据的一些东西,总是感觉自己学的是不是太广了,所以有时候停下来要不断的去思考自己所走的路,所学的东西。前几天,在qq空间看到一个工作2年的人说没有了目标,学会了安逸。也许就是没有目标吧,我似乎总是能找到需要学的东西,但是这样无形我的压力很大,所以适当的目标是合适,祝愿你可以开心的学习,开心的生活。有点煽情,接下来,我们去看看语音的短时频域分析吧。希望你有所收获。

      说到频域,似乎大家都会想到傅里叶变换。对于连续的信号是FFT,对于离散的信号时DFT。一般的傅里叶变换适合周期信号和平稳随机信号,但不适合语音信号。为什么?因为语音是短时平稳的。所以只能用短时傅里叶去分析。就是分帧后才对其进行傅里叶变换。某一帧的短时傅里叶变换的定义如下:

一般我们求短时傅里叶变换时都用汉明窗。为什么用这个窗?而不是用矩阵窗和汉宁窗呢?原因见下图:

          

   原因是:

这些都是《数字语音处理及MATLAB仿真》这本书上的。感觉介绍的比我的好,所以……

   最后,说下这个重要性。语音的频域性质就这一个。所以时域解决不了就是它了。后面我希望自己可以把这个代码贴出来。

好吧,找到c的代码。

float  stft(float *input,float *output,int fftsize,int hopsize)
{
uintptr_t handle;
int posin,posout,i,data_len;
float *sigframe,*specframe, *window;
FILE *zhong=fopen("zhong.txt","w+");
handle=fa_fft_init(FFTSIZE);  
sigframe= (float *)malloc(sizeof(fftsize) * 2);
specframe= (float *)malloc(sizeof(fftsize) *2);
window= (float *)malloc(sizeof(fftsize) *2);q
//window
for (i=0;i<fftsize;i++)   //compute hanning at the length of 512
window[i]=(1.0-cos(2.0*pi*i/(fftsize-1)))/2.0;  //window is hanning
for(posin=posout=0;posin<data_len;posin+=hopsize) 
{
// window a signal frame
for(i= 0;i<fftsize;i++)
if (posin+i<data_len)
sigframe[i] = input[posin+i]*window[i];
else 
sigframe[i]=0;
// transform it
fa_fft(handle,sigframe);
for (i = 0; i <fftsize ; i++)
specframe[i]=sqrt(fft_inbuf[2*i]*fft_inbuf[2*i]+fft_inbuf[2*i+1]*fft_inbuf[2*i+1]);
//output it
for ( i=0;i<fftsize;i++,posout++)
output[posout]=specframe[i];
}
free(sigframe);
free(specframe);
return posout ;
}

这里需要调用fft的函数。大家应该可以看到stft'的公式和代码的结合。

matlab的stft的代码在网上很多。我们在求频谱的时候需要用到这个函数。虽然matlab求语音频谱有库函数,但是仔细分析还是挺麻烦的。这里就不贴matlab的代码。有STFT的公式,其实对于matlab代码很快就可以搞定。不知道的可以留言。

好了,这个短时频域分析就说到这里,期待下一次的mfcc,lpcc的特征。

有任何问题,欢迎指正。

这篇关于语音知识回顾和总结---短时频域性质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984849

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000