当前位置: 首页 > ops >正文

数字信号处理-大实验1.2

MATLAB仿真实验目录

  • 验证实验:常见离散信号产生和实现
  • 验证实验:离散系统的时域分析
  • 应用实验:语音信号的基音周期(频率)测定

说明:(1)大实验1分为3个部分,本文隶属于第二部分,对应应用实验的基础要求和原理讲解、短时分帧ACF自相关系数方法的代码实现,难度比1.1大,不明白欢迎格物,如有认为写的不对或不全的地方可以交流;

(2)笔者的写作风格:参考资料均在系列关联文章的最后一篇的末尾。

(3)本栏目文章可能出现一些剑走偏锋的实现思路,不同于主流方法,请谨慎阅读。

目录

三、语音信号的基音周期测定

3.1 实验目的

3.2 实验要求与内容

3.3 实验原理

ACF

3.4 实验代码

3.5 实验结果

3.5.1     ACF自相关系数方法(初步预处理/完全预处理)


三、语音信号的基音周期测定

3.1 实验目的

1、掌握信号处理的基本流程;

2、了解常用音频文件的声道数、编码格式、采样率等参数;

3、培养通过查阅文献解决问题的能力;

4、(可选)掌握MATLAB三维空间曲面画图方法。

3.2 实验要求与内容

要求:

(1)至少用两种方法实现语音(元音字母)的基音频率估计;

(2)估计出一个人发不同汉语语音字母发音的基音频率;

(3)估计出一个人对同一个汉语语音字母的不同声调发音的基音频率;

(4)估计出不同人对同一个汉语语音字母发音的基音频率 ;

(5)总结出人的发音的一些基本的特点及规律;

(6)(进阶)比较不同方法的优缺点,通过预处理或者组合的形式,实现算法组合优化;

(7)(进阶)绘制单个或者多个数据帧的频谱共振峰,观察语音信号中不同频率分量的相对声强分布

(8)(进阶)探究音频信号处理的其他基础功能,比如判断音频文件中中文语素的个数。

内容:

  1. 录制a o e三个中文元音音素四种声调的音频,通过ACF自相关运算、小波变换、倒谱法等方法,并计算出基音周期和基音频率(包含可视化),得出结论;
  2. 录制一句话,根据实际录制内容并观察短时数据帧的时间-基因频率曲线,总结出人类发音的一些基本规律。

3.3 实验原理

数据预处理

  1. 本实验音频文件采用wav格式,分为左右声道(值域包括正负区间,因为声音一般是交流分量),因此先进行算术平均、去均值化、归一化处理[1];
  2. 设置合适的通带、阻带,选择带通滤波器类型,笔者在本实验中采用频域的理想带通滤波器加时域的矩形窗函数(截尾去振)的形式,通带50Hz-1kHz;注意此处不是对幅频曲线进行滤波,而是包括相频信息在内,最后得到的信号取实部(可能是因为带通滤波器的频谱是离散表示的,不是完全的实偶对称,所以最后出现了虚部,变为了复数)

Figure 4   叠加-3ms-3ms的矩形窗(带通滤波器的时域包络线是Sa采样函数,实际时域波形多乘以了一个cos(wot),w0=(fl+fh)/2);fs=48kHz,即选取-144:144个点

  1. 检测前两步处理之后的音频信号中,连续区间小振幅音频(v_thres,需要手动设定)的起始索引集和长度集,去除这些音频组分,提取有效音频序列,因为带通滤波器去除低频分量之后,会出现常数0的情况,主要有字符内部、字符与字符之间、句子与句子之间三种:需要在这一步通过剪切-拼接的形式去除,这些无效区间会影响对于音素发音的基音周期测算;在信号呈现环节,字符与字符之间的静音部分可以不进行去除,并增长至固定长度。

ACF

  1. 根据语音信号的短时近似稳定性原理,把音频文件切分成N个数据帧(长度可选),数据帧之间可以有重叠部分,确保时间-基音周期(基音频率)曲线的连续性和稳定性。
  2. 对于每一个数据帧dfi(1<=i<=N),在其前后一定中等时长的时间范围内,截取等长数据帧shifted_dfi进行元素乘法(.*)-求和(element)-除以sqrt(energy(dfi)* energy(shifted_dfi))运算,也就是样本自相关系数运算(卡定了左侧时移和右侧时移的最大限度,这样可以提升运算效率,同时一定程度上遏制ACF算法的固有局限),去除时移之后信号平均振幅波动的影响。
  3. 在双边限度的区间内(不包括零时移),选取自相关值最大的索引,即为该数据帧的基音周期。

ACF优势:可以用于音频中的字符计数(尖峰的个数和实际字符个数偏差很小,可以参考实验结果),同时字符或元素的音调变化十分敏感,较为准确;

ACF劣势:基音周期和基因频率的相对关系较准确,但是绝对数值很不准确,受双边限度的影响很大。

在“计算基音周期pitch”环节,实际上是通过在搜索序列里得到的索引号+Lower_N(搜索下限/偏置量),结合采样率fs得到的。

倒谱法的优势:将时域卷积的两个信号x1[n]*x2[n]->x’[1]+x2’[n](’表示和初始信号有关联但不同的信号,具体是幅频曲线取完对数-IDFT得到的实偶信号序列),可以区分出浊音(周期性明显)和清音(周期性极弱),和预处理环节去除静音部分的操作有些相似,计算出的基音周期和频率较为准确;

倒谱法的劣势:运算时间通常较长,准确度和性能对于预处理环节均较为依赖;经过预处理之后,准确度和性能可以大幅提升。

3.4 实验代码

带通滤波器实现:function [s2]=highpass(s,fs,fl,fh);

工具函数实现:连续小幅值信号区间起始索引、长度检测

预处理实现:function [s]=preprocess(s,blank_t,split_interval,v_thres,fs,fl,fh);

ACF实现

function [periods]=basic_period_detect(s,fs,search_t,window_t,overlap_t,v_thres);

% fs=48kHz(.wav files here)
% three time intervals are allmeasured in miliseconds,window_width in number of points
% search_t employed for fastening running time of the algorithm
function [periods]=basic_period_detect(s,fs,search_t,window_t,overlap_t,v_thres,divides) N=round(search_t*fs/1000);window_width=round(window_t*fs/1000);overlap_width=round(overlap_t*fs/1000);periods=zeros(1,floor((length(s)-N)/window_width)+1);for i=1:length(divides)divides(i)=round(divides(i)/(window_width-overlap_width));endfor i=N-window_width+1:window_width-overlap_width:length(s)-mod(length(s),window_width-overlap_width)-N+1% 默认比较序列设置为短时间内中间段窗口original=s(i:i+window_width-1);corr_values=zeros(1,2*(N-window_width)+1);% 注意需要跳过自己(0)for j=N-window_width:-1:1shifted=s(i-j:i-j+window_width-1);val=sum(original.*shifted)/sqrt(sum(shifted.*shifted)*sum(original.*original));corr_values(N-window_width-j+1)=val;endfor j=1:N-window_widthshifted=s(i+j:i+j+window_width-1);val=sum(original.*shifted);corr_values(j+N-window_width+1)=val;end[temp,index]=findmax(corr_values,100);periods(floor(i/window_width)+1)=abs(index-N+window_width-1)/fs*1000;endfigure();plot(0:(window_width-overlap_width)*1000/fs:(window_width-overlap_width)*floor((length(s)-N)/window_width)*1000/fs,periods,'b', ...divides,periods(divides),'o','MarkerFaceColor','r');xlabel('t(ms)');ylabel('measured basic period T(ms)');title(['Generic Periods (w_t,o_t,s_t,v_{th})=',num2str([window_t,overlap_t,search_t,v_thres])],'Color','b');end

3.5 实验结果

注:1、下文中的“初步预处理”指的是仅进行声道合并、去均值化、归一化操作;

3.5.1     ACF自相关系数方法(初步预处理/完全预处理)

Figure 6   预处理× a√ ACF√

Figure 7   预处理√ a√ ACF√

Figure 8   预处理× o√ ACF√

Figure 9   预处理√ o√ ACF√

Figure 10 预处理√ e√ ACF√

Figure 11 预处理× e√ ACF√

Figure 12 预处理√ “生活就像海洋,只有意志坚强的人才能到达彼岸”√ ACF√

这句话对应的ACF时间-基音周期谱线,可以看到独立的尖峰有20个(前三个连在一起,第12和第13个连在一起)。

编码表示:0表示1声,1表示2声,2表示3声,3表示4声

真实相对频率:0,1,3,3,2,1             2,2,3,3,0,1,2,1                      1,1,3,1,2,3

观察尖峰的相对幅度测算的声调(不考虑持续时长的区别):0,3,2,1            3,0,1,2,1,3,1,2

Hit rate16/20=80%

http://www.xdnf.cn/news/6082.html

相关文章:

  • 一文掌握六个空转数据库
  • 编译支持CUDA-aware的OpenMPI
  • 数字化转型 - 标准化
  • MySQL锁机制全面解析:从原理到实践的死锁防治指南
  • C++23 ranges::to:范围转换函数 (P1206R7)
  • LeRobot 框架的核心架构概念和组件(中)
  • 深度学习中的查全率与查准率:如何实现有效权衡
  • CS4334立体声D/A转换器:为高品质音频设计提供低成本的解决方案
  • 音频分类的学习
  • css设置文字两端对齐text-align:justify不起作用的解决方法
  • HTML应用指南:利用POST请求获取全国圆通快递服务网点位置信息
  • ​​金融合规革命:​​R²AIN SUITE 如何重塑银行业务智能​
  • 入侵检测SNORT系统部署过程记录
  • 数据结构与算法-双向链表专题
  • Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南
  • 毕业论文,如何区分研究内容和研究方法?
  • C#中的dynamic与var:看似相似却迥然不同
  • Ota++框架学习
  • 胶片转场视频剪辑思路
  • tocmat 启动怎么设置 jvm和gc
  • 大模型训练简介
  • 华硕服务器-品类介绍
  • RBTree的模拟实现
  • MySQL之基础事务
  • 常用的应用层网络协议对比
  • 从零玩转系列之 MCP AI Agent 理论+项目实战开发你的MCP Server
  • UOS专业版上通过源码安装 Python 3.13 并保留系统默认版本
  • 310. 最小高度树
  • 『 测试 』软件测试全流程与Bug管理核心要点解析
  • 2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码