基于C语言的语谱图生成

2022-09-20 02:56罗海涛
现代计算机 2022年14期
关键词:纵坐标时域灰度

罗海涛

(广东外语外贸大学信息学院,广州 510420)

0 引言

语言是人类交流的有力工具。通过声电传感器把语音转换为电信号,得到语音信号,再通过采样、量化等技术得到语音采样数据。在现代信息化社会,人们用计算机对语音采样数据进行存储、传送、识别、编码和增强。

对语音信号的处理最早可以追溯到上世纪30年代末,上世纪40年代初语谱图仪问世。语谱图是语音的时域和频域结合的视图,其横坐标是时间,纵坐标是频率,坐标点值为语音采样数据的能量。语音信号的语谱图又称为声纹,在语音信号处理、编码、识别等方面有着重要的应用。考虑到横坐标一个时间点采样数据很难分析出各个频率成分,横坐标一般采用一帧语音采样数据,这样可以通过傅里叶变换得到该帧数据的频谱,即纵坐标。而纵坐标各个频率点的能量不同,如何在一个像素点反映这些不同能量?首先,能量的表示方法有很多种,有的采用幅频的幅度绝对值作为该频率点能量,有的采用幅频的幅度平方作为该频率点能量,等等。其次,为了在一个像素点反映不同的能量值,采用不同的灰度值方法,即把能量值由大到小按顺序转换为一个像素点的灰度值,能量越大,灰度值越大,颜色越深;反之,能量越小,灰度值越小,颜色越浅。

1 语音信号的预处理

语音信号的频谱不是均匀分布的,能量集中在低频部分,频率越高,其频谱能量越小。为了消除这种不均匀带来的影响,在处理之前,一般对音频采样数据进行预处理。有效的预处理是预加重。预加重实际上是一个一阶的数字滤波器,如公式(1)所示:

式中是一个常数,一般取接近1的小数。容易求出该滤波器对应的时域响应是(0)=1以及(1)=-μ,这是一个有限冲激响应滤波器FIR。

令=e,得到该滤波器的数字频域响应为:

式中参数是一个常数,一般取接近1的小数,是数字频率。

该滤波器实际上是一个高通滤波器,它抑制语音信号低频部分的幅度,而对高频部分有增强作用,所以,总体上这种滤波器使语音信号的频谱变得平坦。

2 各种窗函数及其作用

为了得到语谱图,需要对语音采样信号进行分帧。分帧实际上是在时域对语音数据施加一个矩形窗进行截断,其过程可用图1来表示。

图1 语音分帧示意图

图1中每帧语音采样数据长度都相同,帧移介于0到1之间。如果帧移为0,则前后两帧语音完全重叠;如果帧移等于1,则前后两帧语音完全没有重叠的部分。分帧时,可以采用多种窗,矩形窗是最简单的一种,其时域函数为

式(3)中是帧的长度。对该窗函数作傅里叶变换,可以得到其频域函数为

图2 矩形窗的幅度与数字频率的关系图

除了矩形窗之外,巴特利窗在截断信号时有一段过渡,因为这种窗实际上是一个三角形的窗,其时域函数定义为

同样对该窗函数作傅里叶变换,可以得到其频谱。和矩形窗的频谱相比,巴特利窗的主瓣宽度增加了,过渡带也增加了,但旁瓣幅度降低很多。

其他窗函数还有汉宁窗,又叫升余弦窗,其时域函数为

这种窗的频谱旁瓣更小,能量更加集中到主瓣。

对汉宁窗函数的系数0.5加以改变,即得到汉明窗,又称为改进的升余弦窗,其时域函数为

汉明窗幅度谱旁瓣更小,能量更加集中到主瓣。

上述几种窗函数的频谱中,汉明窗的旁瓣是最小的,主瓣内的能量可达99.6%。

3 语音的频谱与语谱图的形成

本文编程对wav音频格式文件进行数据获取,再进行语音信号处理。wav格式是微软公司开发的一种声音文件格式,也叫波形文件,是最早的数字音频文件格式,它具有RIFF(resource interchange file format)格式。加窗分帧是在时域对语音采样进行分段,分段后再对每一段采样数据作离散傅里叶变换,以获得该段语音的频谱。离散傅里叶变换DFT是在时域和频域都离散的变换,其结果是信号离散的频谱,如式(8)所示:

离散傅里叶变换虽然使用计算机编程进行,但是由于需要进行很多的复数运算,速度较慢。为了加快速度,通常采用快速傅里叶变换FFT。由于FFT要求数据个数必须是2的幂,所以运算前,需检查帧长是否满足这个要求。通常帧的长度不是2的幂,需要对一帧数据补零,以达到2的幂,满足FFT的要求才能进行FFT运算。设补零后帧长=2

FFT采用蝶形计算的办法,先把输入数据按二进制的倒位序排列,输入第1级蝶形进行运算。第1级蝶形运算结果输入到第2级,依次类推,直到最后一级蝶形,即第级。该级运算结果就是最后的FFT结果,也是该帧语音的频谱。

语谱图是一段语音信号的二维时域和频域图像,横坐标是时间次序,采用语音帧的顺序编号,即按照第1帧、第2帧的顺序帧编号作为横坐标;纵坐标是对应语音帧的频谱,所以纵坐标是频率。考虑到需要在语谱图的纵坐标表示一帧语音的频谱,所以需要把频谱的幅度转换为一个点的灰度来表示,而幅度又是复数,所以采用复数绝对值来表示。本文实际编程时,幅度有6种方式供选择,分别是复数绝对值(默认)、复数实部和虚部的平方和、复数实部和虚部的平方和的平方根、复数实部和虚部的平方和的立方根、复数实部和虚部的平方和的四方根、以及复数实部和虚部的平方和的自然对数,如图3所示。

图3 语谱图的能量形式

综上所述,语谱图的形成过程如下:

(1)对语音的音频数据加窗、分帧,帧长取2的幂,不足补零;

(2)确定FFT要求的二进制倒位序;

(3)取得第1帧数据;

(4)按照倒位序重新对该帧数据排序;

(5)把重新排序的数据输入到第1级蝶形,完成该级计算;

(6)蝶形级数加1;

(7)判断级数是否等于,若等于,转至第(9)步;

(8)计算结果输入到下一级蝶形输入端,完成该级计算,转第(6)步;

(9)对计算得到的帧频谱,按照图3所示,根据用户的选择计算能量值,记录最大能量值;

(10)根据最大能量值和各点能量值,逐点把能量值转换为像素灰度值,例如能量最大值的像素点灰度值为最大,取255(黑色),其他各点按照线性关系转换为灰度值;

(11)循环根据该帧数据计算得到的各点灰度值,在纵坐标依次画出各点灰度像素;

(12)数据帧编号加1;

(13)判断是否完成所有帧的计算,若是,结束;若否,转第(4)步。

4 语谱图计算结果

本文在Visual C++环境下,编程对一些英文语音音频文件进行分析计算,生成语谱图。每个音频文件是一个英文单词的wav波形文件。

以英文单词“important”为例,首先从音频文件中读取该单词的采样数据,如图4所示。

图4 单词important的音频参数

从图4可知,该音频文件共46739个采样数据,每个采样数据用16位二进制表示,有两个声道,采样频率为44100Hz。后面是两个声道的每个采样数据,省略。在后面的分析计算中,只取其中一个声道的数据。

下一步,进行端点检测,去掉语音开始之前和结束之后的多余的采样数据,得到结果如图5所示。

图5 经过端点检测后得到的采样数据

从图5可知,经过端点检测后,实际剩下的采样数据共39657个,比之前的大为减少,也使后面的处理计算量大为减少。

再按照前面介绍的步骤和方式,计算得到语谱图如图6所示。其余单词的语谱图不再罗列。

图6 单词important的语谱图

5 结语

语言是人类交流的有力工具。通过传感器把语音转换为电信号,再经过离散采样、量化等处理,得到离散的采样数据。这些采样适合用计算机进行存储、传输、编码、增强等处理。语音信号的处理涉及数字信号处理,还有语音、语言学、认知学和心理学等学科的内容,是一门跨学科的新兴学科。语谱图是语音的声纹,是语音信号的时域和频域信息结合的图像,在语音处理方面有着广泛的应用。本文采用C++编程,处理语音信号,产生语谱图。

猜你喜欢
纵坐标时域灰度
天津港智慧工作平台灰度发布系统和流程设计
平面直角坐标系中的特殊点
华为“灰度”哲学
晚霞浅淡少年糖
平面直角坐标系中“混”“漏”要不得
Arduino小车巡线程序的灰度阈值优化方案
基于MATLAB 的信号时域采样及频率混叠现象分析
两种常用漂浮式风力机平台动态特性分析
设动点坐标 让动点不动
不同入射角风波流海上漂浮式风力机频域与时域动态特性