「信号与系统」语音信号的语谱图、尺度变化、带限处理、基音提取

news2024/10/6 10:34:06

「信号与系统」语音信号的语谱图、尺度变化、带限处理、基音提取

本文将简单介绍几种语音信号的处理方法。

1、语谱图

语谱图是一种描述语音信号频率特征的方法,横轴表示时间,纵轴表示频率,颜色深浅表示能量。基本原理是将语音信号分帧(每帧10~30ms),对每一帧作fft求频谱,并按列绘制。以下是matlab代码,需要将音频文件放在同一个目录下面。

其中fs是采样频率,fs是数字世界和模拟世界的桥梁。众所周知,在计算机当中存储的是一个一个数字。比如《晴天》这首歌就是由11895852*2个双精度浮点数(实际存储的.mp3文件并非这样,要知道mp3是一种压缩格式)构成,两列分别表示左右声道。fs代表每秒钟对应多少个数,比如fs=44100,那么44100个点就代表1秒钟的数据。

[audioData,fs] = audioread("晴天_周杰伦.mp3");
spectrogram(audioData(:,1),100,80,100,fs,'yaxis')

请添加图片描述

请添加图片描述

2、尺度变换

尺度变换,就是时间尺度变换。f(t)->f(2t’),表示用2t’来替换原来的t,那么在新的时间轴上,原来一分钟的歌,现在要播放两分钟。

在这里需要指出数字世界和模拟世界的不同。对于模拟信号,f(t)->f(2t’),假设f(t)=sin(t),那么f(2t’) = sin(t’/2),时间上无限稠密,因此可以采集到新的函数值。但是在数字世界,原来是[1,2,3,4] 变成新的[1,x,2,x,3,x,4,x],就不知道这个x应该是多少。为了解决这个问题,就引入了插值的概念(有的地方叫内插)。

反过来:f(t)->f(t’/2)。相对好解决些,因为[1,2,3,4]可以变成[1,3],直接舍弃掉2和4举行了。

下面用matlab作一个小实验:

[audioData,fs] = audioread("晴天_周杰伦.mp3");

f_t = audioData(fs+(1:fs),1);
f_2t = resample(f_t,2,1); % t->2t
f_t2 = resample(f_t,1,2); % t->t/2
% 
% % 播放三段音频
% sound(f_t,fs)
% sound(f_2t,fs)
% sound(f_t2,fs)

% subplot
subplot(311)
plot((0:fs-1)/fs,f_t)
xlim([0,2]);title("f(t)")
subplot(312)
plot((0:fs*2-1)/fs,f_2t)
xlim([0,2]);title("f(2t)")
subplot(313)
plot((0:fs/2-1)/fs,f_t2)
xlim([0,2]);title("f(t/2)")

请添加图片描述

3、带限处理

带限处理就是通过让音频信号通过一个滤波器,将其频带限制在我们设计的范围内。关于数字滤波器的种类、设计方法是一个十分复杂的知识体系,在此仅简要介绍。从是否有反馈回路,可分为IIR(无限冲激响应,有反馈回路)和FIR(有限冲激响应,无反馈回路,传递函数的相位是线性的)。从功能上分为四类:低通、高通、带通、带阻。

比如我可以设计一个通带截止频率为5kHz的48阶低通滤波器,将高频分量滤除:(对比两张语谱图可知高频分量被有效抑制了)

[audioData,fs] = audioread("晴天_周杰伦.mp3");

fp = 5000;
wn = fp/(fs/2); %归一化频率,1对应pi rad,pi rad对应fs/2
b = fir1(48,wn,'low');

audioData_lowpass = filter(b,1,audioData(:,1));
spectrogram(audioData_lowpass,100,80,100,fs,'yaxis')

请添加图片描述

4、基音提取

令sin(w0t)为基波,则2w0、3w0、4w0……为其谐波,谐波的频率是基波的整数倍。直观上,一个语音信号频谱图的包络,其最高峰就是其基音频率。比较经典的基音估计算法有:基于短时自相关函数的基音周期估计和基于短时平均幅度差的基音周期估计。

下面是使用短时自相关函数的基音周期估计。

[audioData,fs] = audioread("晴天_周杰伦.mp3");

f_t = audioData((1:fs*10),1);

f0 = pitch(f_t,fs);

tiledlayout(2,1)

nexttile
plot((0:fs*10-1)/fs,f_t)
xlabel('time/s')
ylabel('Amplitude')

nexttile
plot(f0)
xlabel('Frame Number')
ylabel('Pitch (Hz)')

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js中this的原理详解(web前端开发javascript语法基础)

欢迎关注作者微信公众号:愤怒的it男 一、问题的由来 学懂 JavaScript 语言,一个标志就是理解下面两种写法,可能有不一样的结果。 var angry_it_man {name : 欢迎关注微信公众号:angry_it_man,say : function(){console.log(thi…

学习SLAM:SLAM进阶(十)暴力更改ROS中的PCL库

话不多说,上活 1.1 为什么要这么做 项目中有依赖。。。。 1.2 安装VTK7.1.1 PCL1.8.0 略 1.3 移植到ROS 删除ROS依赖的vtk6.2和PCL1.8.0的动态链接库: liugongweiubuntu:~$ sudo mv /usr/lib/x86_64-linux-gnu/libvtk* Desktop/lib/ [sudo] password fo…

windows平台 git bash使用

打开所在需要git管理的目录,鼠标右键open Git BASH here 这样就直接进来,不需要windows dos窗口下麻烦的切路径,windows和linux 路径方向不一致 (\ /) 然后git init 建立本地仓库,接下来就是git相关的操作了. 图形化界面查看 打开所在需要git管理的目录,鼠标右键…

DipC 构建基因组 3D 结构(学习笔记)

背景 本文主要记录了 DipC 数据的复现过程、学习笔记及注意事项。 目录 下载 SRA 数据使用 SRA Toolkit 转换 SRA 数据为 Fastq 格式使用 bwa 比对测序数据使用 Hickit 计算样本的基因组 3D 结构使用散点图展示 3D 结构计算 3D 结构重复模拟的稳定性其他 步骤 1. 下载 SRA…

从输入一个网址到浏览器页面展示到底发生了什么

从输入一个网址到浏览器页面展示到底发生了什么 1. HTTP 解析URL 首先浏览器做的第一步工作就是解析URL,从而生产一个发送给服务器的请求信息。 URL是什么呢,见下图: 图中长长的URL实际上是请求服务器里的文件资源。 要是上图中的蓝色部分…

ES6中新增加的Symbol数据类型及其使用场景

聚沙成塔每天进步一点点 ⭐ 专栏简介在这里插入图片描述 ⭐ ES6中的Symbol数据类型⭐ 对象属性名称⭐ 防止属性冲突⭐ 内置Symbols⭐ 迭代器和生成器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航…

笔记 | 非素数个数(朴素筛查 || 埃式筛查法)

非素数个数 题目描述朴素筛查方法题解 题目描述 求a-b之间的非素数个数 特别的&#xff0c;1也算作素数&#xff0c;区间是[a, b]。 输入输出格式 输入描述: 多组测试数据。 输入两个正整数数a,b&#xff0c;其中a<b<10^7。 输出描述: 输出答案。 输入输出样例 输入样例…

ESDA in PySal (3):Geosilhouettes:集群拟合的地理测量

ESDA in PySal (3):Geosilhouettes:集群拟合的地理测量 Silhouette statistics (Rousseeuw, 1987) 是观测值与给定聚类的拟合优度的非参数度量。 在聚类具有“地理”解释的情况下,例如当它们代表地理区域时,轮廓统计可以结合“空间思维”,以便提供更有用的聚类拟合度量。…

git压缩仓库

git 压缩仓库 git gc命令压缩增量存储单元,节省磁盘空间 du -sh 查看当前文件夹占用多少K 快照的存储: 对于修改的内容,做快照处理并保存. 对于未修改的文件,做引用处理.

千兆以太网硬件设计及链路层 MAC 协议格式

以太网系列文章&#xff1a; &#xff08;1&#xff09;千兆以太网硬件设计及链路层 MAC 协议格式 &#xff08;2&#xff09;千兆以太网网络层 ARP 协议的原理与 FPGA 实现 &#xff08;3&#xff09;CRC校验代码原理 文章目录 前言一、以太网 MAC 层接口介绍1.MII 接口2.GMII…

《C++API设计》读书笔记(3):模式

本章内容 本章涵盖了一些与CAPI设计相关的设计模式和惯用法。 “设计模式(Design Pattern)”表示软件设计问题的一些通用解决方案。该术语来源于《设计模式&#xff1a;可复用面向对象软件的基础》&#xff08;Design Patterns: Elements of Reusable Object-Oriented Softwar…

【查缺补漏 女娲补天】2023平安

秋招了&#xff0c;只根据自己的情况记录&#xff0c;大概率不会很全。标题是我觉得的重点。既搬砖也搬博客。 Telnet协议 远程登录和管理网路设备的标准协议TCP传输层之上&#xff1a;应用层工作模型&#xff1a;C/S模式&#xff08;client/server&#xff09;服务端端口号默…

LeNet-5

目录 一、知识点 二、代码 三、查看卷积层的feature map 1. 查看每层信息 ​2. show_featureMap.py 背景&#xff1a;LeNet-5是一个经典的CNN&#xff0c;由Yann LeCun在1998年提出&#xff0c;旨在解决手写数字识别问题。 一、知识点 1. iter()next() iter()&#xff1a;…

【操作系统】聊聊C10K

什么是C10K问题 C10K 就是 Client 10000 问题&#xff0c;即“在同时连接到服务器的客户端数量超过 10000 个的环境中&#xff0c;即便硬件性能足够&#xff0c; 依然无法正常提供服务。 其实说白了就是并发请求1W个请求 同时进行连接服务端&#xff0c;服务端可以支撑服务。…

Linux系统之安装uptime-kuma服务器监控面板

Linux系统之安装uptime-kuma服务器监控面板 一、uptime-kuma介绍1.1 uptime-kuma简介1.2 uptime-kuma特点 二、本次实践环境介绍2.1 环境规划2.2 本次实践介绍2.3 环境要求 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装Node.js 四、部署…

post更新,put相当于删除重新增一条

索引数据 //删除后新增 PUT my_dynamic_temp/_doc/1 { “name”:“test”, “class”:“1204” } //覆盖更新 POST my_dynamic_temp/_update/1 { “doc”: { “name”:“test”, “class”:“1203”, “pernum”:“998” } }

springboot 集成mybatis-plus的使用

一、在spring boot中配置mybatis-plus 1、创建一个spring boot项目&#xff0c;注意勾选mysql 2、在pom.xml文件中添加mybatis-plus的依赖包 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&qu…

瑞芯微RK3568:烧录系统

烧录系统 文章目录 烧录系统windowsLinuxupgrade_tool 工具烧写烧写 update.img擦除操作使用 rkflash.sh 脚本烧写 编译Linux_SDK后得到多个镜像文件 windows Windows 下通过瑞芯微开发工具&#xff08;RKDevTool&#xff09; 来烧写镜像。 Loader parameter uboot …

狂神docker

狂神说 docker 参考文章 -----docker 概述 docker 为什么会出现&#xff1f;–环境部署麻烦&#xff0c;两套环境&#xff08;开发-运维&#xff09; 我的电脑可以运行&#xff0c;到你那就不可用。 开发即运维–开发打包部署上线一条龙 环境配置十分麻烦&#xff0c;机器部署…

Spring Social微信登录

微信登录的appId获得可在微信开放平台申请&#xff0c;以下用测试号 1、完成WeixinProperties 用测试账号登录 public class WeixinProperties {private String appId "wxd99431bbff8305a0";private String appSecret "60f78681d063590a469f1b297feff3c4&q…