语谱图就是语音频谱图,一般是通过处理接收的时域信号得到频谱图,因此只要有足够时间长度的时域信号就可。(时间长度为保证频率分辨率)
专业点讲,那是频谱分析视图,如果针对语音数据的话,叫语谱图。语谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。
可是为什么采用二维平面来表示三维信息呢?这个是有历史原因的。在数字技术发展以前,人们可视化研究语音数据的方法是把数据通过频率滤波器,然后各个频率的数据驱动相应的类似针式打印的设备按频率高低顺序记录在一卷纸上,信号的强弱由记录在纸上的灰度来表示。记录纸按照一定的速度旋转,即相当于在不同的时间里记录下语音数据。
语谱图还分为窄带语谱图和宽带语谱图。
“窄带”,顾名思义,带宽小,则时宽大,则短时窗长,窄带语谱图就是长窗条件下画出的语谱图。“宽带”,正好相反。至于“横竖条纹”,窄带语谱图的带宽窄,那么在频率上就“分得开”,即能将语音各次谐波“看得很清楚”,即表现为“横线”。“横”就体现出了频率分辨率高。分辨率可以直观的看做“分开能力”。“频率分辨率”高就是在频率上将各次谐波分开的能力高,表现为能分辨出各次谐波的能力高,频率分辨率越高,越容易分辨各次谐波。类似的,宽带语谱图的时宽窄,那么在时间上就“分得开”,即能将语音在时间上重复的部分“看得很清楚”,即表现为“竖线”。“竖”就体现出了时间分辨率高。时间分辨率越高,谱图上的竖线看得越清楚。图1和图2分别示出了一条语音句子的窄带语谱图和宽带语谱图。短时窗长度分别是20ms和2ms。

图1是一条语音及其窄带语谱图。上图是语音时间波形,下图是上图的窄带语谱图

图2同一条语音及其宽带语谱图。上图是语音时间波形,下图是上图的宽带语谱图

图1虚框框住的部分就是一条横条纹,整个谱图中有非常多的这种横条纹。图2虚框框住的部分,在小图中清晰的显示出了一条一条的“竖线”,被框住的有27条竖线。

信号的语谱图

语音中设计窗函数,窗函数性质大同小异,这里以窗函数为对象进行分析。
对于时域的窗函数:

其表达式为:

对应的傅里叶变换:

表达式为:

可见信号的时宽越大(小),信号的频带宽度越小(大),对于矩形窗,有着带宽B与时宽乘积为这样的特性,其他窗函数也有着类似的性质。

MATLAB仿真举例:

x=zeros(1,2000);%序列长度指定为2000
x(100:140)=1;%矩形窗为40个点
y=fft(x);
y=abs(y);
plot(1:length(x),fftshift(y)/max(y),'k','linewidth',2)
title('频谱响应函数')

根据上面的分析,信号长度定为2000(即2*pi的长度)的话,矩形窗为40,要满足时宽与带宽乘积为2000不变,理论上带宽应为50,一下的结果图验证了上面的理论:

由于语音信号具有短时平稳特性,因此对其分析时,要进行加窗处理,借助上面的分析,可以看出,窗长如果选择短一些的话,就是时宽较小,对应的带宽就要大一些,在这种情况下得到的就是宽带语谱图,反之则得到窄带语谱图。

窄带语谱图

对于一段语音进行分析(语音内容为0 1 2 3 4 5 6 7 8 9),语音采样率为8000Hz,取窗长为512个数据点,帧移为窗长的1/4,即128个数据点。

得到如下结果图:

从结果图中可以清楚看到谐波的结构,频率分辨率非常好,但是时间上的分辨率就不理想。对于上述语音,画出其频率特性:

语音低频部分(红线)体现了声道的特性,窄带语谱图,频率分辨率太过精细,不能很好体现出共振峰的大致位置,即反映不出基波的变化特性。

宽带语谱图

对于一段语音进行分析(语音内容为0 1 2 3 4 5 6 7 8 9),语音采样率为8000Hz,取窗长为128个数据点,帧移为窗长的1/4,即32个数据点。

得到如下结果图:

与窄带语谱图相反,宽带语谱图的时间分辨率很好,频率分辨率较低,不能很好反映声音的纹理特性,反映了频谱的时变特性,能很好分辨出共振峰的大致位置,但分辨不清谐波结构。

从窄带语谱图和宽带语谱图看基音频率和共振峰

基音周期表示声带的震动周期,每隔这么长时间(震动周期),有一个气流通过,“每隔”就体现了周期性,这就是基音周期,那么谱图上就应该有这个频率的信号分量,而且这个频率的幅度(能量)不应该很小,因为每隔一段时间“就有”一团能量通过声带。所以基音频率所在的成分在窄带语谱图上应该是所有横条纹中频率范围最低的那条。在图1中,用虚线框框住的部分就表示基音频率成分,与其在同一水平线上的条纹都表示该时刻的基音频率成分,这条条纹对应的纵轴刻度值就表示基音频率。从图1小图可估计基音频率大约在250Hz左右,基音频率略有波动,0.5s处大约是240Hz。其他横条纹就是各次谐波,这些谐波中有些地方颜色比同时刻其附近其他横条纹颜色要深,这些颜色深的条纹表示共振峰。有些时刻,颜色较局部附近深的条纹不止一条,这些深色条纹组成了各次共振峰,如第一、第二、第三共振峰。图2,宽带语谱图的基音频率和共振峰就不清晰了。但是其仍可以看出基音周期,图2小图具有明显的竖线,两条竖线之间的时间就表示基音周期。在0.44s到0.54s时间段内大约有25条竖线,即24个间隔,则基音周期可估计为(0.54-0.44)/24=4.17ms,则基音频率估计为240Hz。

从语音时域波形上估计基音周期、频谱曲线上估计基音频率

选取0.5s处的一段语音片段,长度为20ms。其时域波形和频谱如图3。

图3 0.5s处语音片段时域波形及其频谱
图3左图,用红圈圈示的尖峰用于估计基音周期,双向箭头表示时间范围内5个圈共4个相似的波段,这4段就表示4个基音周期,则可估计基音周期约为4.25ms,则基音频率约为235.2941Hz。图3右图,频谱具有明显小尖峰,这些尖峰在低频部分(可认为语音频率3400Hz内)比较有规律且平滑,高频出现小幅度的“杂乱”,这些“杂乱”表示噪声,来源有录音设备及量化噪声等(虽然幅度很小,甚至根本就“听”不出来,但存在是事实)。这些尖峰就是各次谐波,从左往右一次是1次、2次、3次……谐波。其中最左边的尖峰对应基音频率,其横坐标对应的值表示基音频率,从小图可看到大约为234.83Hz。利用各次谐波可以得到更精确的估计,图中用红圈表示用于估计基频的谐波,共选取了15个,估计出基频为234.8337Hz。

从语音频谱曲线上看共振峰

基音频率体现的是声源的信息,而共振峰体现的是声道的信息。为便于比较和观察,将图3这个语音片段的源和系统分离,分别展示源的频谱和声道的频谱,观察一致性。图4、5显示的是源的频谱、声道的频谱、语音的频谱及共振峰的位置信息,图5去掉了小图。粉红线是源信息的频谱,红线是语音的频谱,黑色虚线是语音频谱的包络,蓝线是声道频谱,蓝色圈圈标示出声道频谱的峰值点,粉红虚竖线显示这些峰值点的位置。根据语音产生的源-滤波器模型及源、系统的卷积解释,语音频谱的包络显示的是声道的信息,而小尖峰显示源的信息,如谐波。可看到粉红线和红线二者的峰值的位置正好一一对应,体现了源的信息,而且粉红线(源)明显没有包络峰值,说明声道的信息被滤除。同样,蓝线没有了小尖峰,即滤掉了源的信息。并且声道的峰值点位置与语音频谱包络的峰值位置也正好一一对应。蓝圈圈的个数表示共振峰的个数,共有4个,从左至右分别称为F1、F2、F3、F4,(F0是基音频率)。它们横轴值表示共振峰频率值,某共振峰带宽就表示该共振峰所占频带宽度。这个图还暗示了另一个有趣的事实,源所占的频率范围和声道所占的频率范围是一样的,在频域利用高通或低通或带通的方法分离源和系统是行不通的。

图4语音片段时域波形及其源、声道和语音频谱。

图5语音片段时域波形及其源、声道和语音频谱。去掉小图(小图遮挡了部分信息)

基音频率和共振峰是能从谱图、频谱上看出来的语音的最基本的信息,当然可以看出其他更多的信息。比如,窄带语谱图上基本上可以发现,低频部分,横条纹比较直,而高频部分,条纹变“弯”了,这表示什么?图1小图可明显看到,基音频率也不是不变的,其也具有波动,我们可以人为的将基频线连接起来为一条曲线,这称为基音跟踪。共振峰表示“谐振”,频谱上表示为频谱包络(其实是上包络)的峰值,那么频谱下包络的谷值点就表示“反谐振”。频谱的“尖峰”显示的是源的信息,小尖包突起是周期性的,是有用的,那么“杂乱”的源头是非周期性的,这在语音转换中是一种很重要的信息。

现代语音信号处理之语谱图(spectrogram)相关推荐

  1. python从语音生成语谱图

    python从语音生成语谱图 文章目录 python从语音生成语谱图 生成语谱图的过程 引入必要的库 语音生成语谱图 结果图 语音信号的原始数据 语音信号转为语谱图 生成语谱图的过程 参考文档 预增强 ...

  2. 语音信号处理(四):生成语音信号的语谱图

    关于语谱图的简单介绍可以参考这篇文章 现代语音信号处理之语谱图(spectrogram) 下面对 ai d s t 这四个语音进行语谱图绘制 绘制代码如下 mkdir('***');%新建存放语谱图的 ...

  3. 使用Matlab绘制语音信号的语谱图

    本文绘制语音信号的语谱图主要使用了spectrogram函数,spectrogram是一个MATLAB函数,使用短时傅里叶变换得到信号的频谱图.当使用时无输出参数,会自动绘制频谱图:有输出参数,则会返 ...

  4. 语谱图(二) Spectrogram 的产生

    1. 信号预处理部分 预处理部分中 包括 预加重 分帧 加窗 : 1.1 读取音频数据 python可以用librosa库来读取音频文件,但是对于MP3文件,它会自动调用audio_read函数,所以 ...

  5. 【语音信号处理】1语音信号可视化——时域、频域、语谱图、MFCC详细思路与计算、差分

    基本语音信号处理操作入门 1. 数据获取 2. 语音信号可视化 2.1 时域特征 2.2 频域特征 2.3 语谱图 3. 倒谱分析 4. 梅尔系数 4.1 梅尔频率倒谱系数 4.2 Mel滤波器原理 ...

  6. 语音信号处理频域语谱图matlab实验,语音信号的频域分析

    实验二:语音信号的频域分析 实验目的:以MATLAB 为工具,研究语音信号的频域特性,以及这些特性在<语音信号处理>中的应用情况. 实验要求:利用所给语音数据,分析语音的频谱.语谱图.基音 ...

  7. 语音信号处理-概念(一):时域信号(横轴:时间;纵轴:幅值)、频谱图(横轴:频率;纵轴:幅值)--傅里叶变换-->时频谱图(语谱图/声谱图)【横轴:时间;纵轴:频率;颜色深浅:幅值】

    我们经常接触到与频谱相关的概念.本节对这些概念之间的区别进行简单的介绍. 一般来讲,将一段时域信号通过离散傅里叶变换后,将频率作为横轴.幅度作为纵轴,得到的图像称作 频谱.若将相位作为纵轴,则称为 相 ...

  8. python求语音信号短时能量、短时过零率、语谱图

    python语音信号处理(二) 一.短时能量 短时能量主要用于区分浊音段和清音段,因为浊音时E(i)值比清音时大得多:区分声母与韵母的分界和无话段与有话段分界. 计算第i帧语音信号yi(n)的短时能量 ...

  9. waveform波形图(时域图)、spectrum(频谱图)、spectrogram(语谱图)、MFCC

    人的气流(excitation)通过声道到嘴唇产生声音.唇齿舌的形状决定了发出怎样的声音,这个形状通过频谱图中的包络中显示出来.而MFCCs就是一种准确描述这个包络的一种特征. 一.waveform波 ...

  10. MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf

    <语音信号处理>仿真作业 院 系 电气与电子工程学院 专业班级 姓 名 学 号 指导教师 2020 年 3 月 作业题目:语音采集与读写 一.目的 (1)了解matlab 采集语音信号的原 ...

最新文章

  1. python pycurl_简单谈谈Python的pycurl模块_python
  2. UNIX再学习 -- 错误和警告
  3. eclipse和idea代码通用吗_python能在苹果手机上运行吗
  4. 【鬼网络】之PXE高效批量网络装机
  5. war包部署-配置入口类
  6. 关于Promise.all
  7. DB Intro - MongoDB User
  8. Java开发领域的大牛有哪些
  9. 吗 支持windows_M1能否原生支持Windows 苹果把问题抛给了微软
  10. javascript实战pdf_web前端入门到实战:10分钟入门 CSS3 Animation
  11. samba服务testparm时提示rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)处理办法
  12. Microsoft edge已过期
  13. 可视化设计,类Excel的快速开发平台
  14. Shell中declare -A的用法?
  15. ansible的使用
  16. 洛谷 租用游艇 C++ Dijkstra 单源最短路/dp
  17. 【C++自学笔记 提高编程篇(二)STL初识】
  18. 【转】为什么程序猿996多猝屎,而企业家007却不会?
  19. 经典白话算法之桶排序
  20. Cassandra的使用

热门文章

  1. 【转载】偏最小二乘法回归(Partial Least Squares Regression)
  2. 【实用】CSS Border使用小分享——盒模型
  3. 如何避免循环中丑陋的break和continue
  4. element ui的时间选择器
  5. java流程语句_java流程控制语句总结
  6. python实现洗牌算法_【Python】洗牌算法及 random 中 shuffle 方法和 sample 方法浅析...
  7. vector怎么排序_零基础的人怎么学习Java
  8. 微信公众请求config php,微信公众平台开发之配置与请求,微信公众平台
  9. r语言 tunerf函数_R语言非参时间序列(六):波动脉冲响应(VIR)中的关键公式推导...
  10. linux服务器上svn的log_Linux 下 SVN 常用操作命令详解