MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

news2024/11/26 23:51:20

教科书:MATLAB语音信号分析与合成(第2版)

链接(含配套源代码):https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd=32rf 
提取码:32rf

基础入门视频:

视频链接:

清华大学_信号处理与语音分析

配套练习:

任务:利用线性预测模型,寻找 汉语韵母 的共振峰
1 步:在安静的环境中,(建议用手机)录制声音
发音内容: a e i o u (“阿、婀、依、哦、乌”)
建议发音时尽量平稳、清晰
2 步:将一整段声音分为多帧,对每一帧 𝑥[𝑛] 进行 分析
使用 MATLAB 提供的 lpc 函数(或 levinson 函数),得到每一帧的
线性预测系数 𝑎 1 , ⋯ , 𝑎 𝑃 ,进而可得该帧的激励信号 𝑒[𝑛]
3 步:找到滤波器 1/𝐴(𝑧) 幅度谱的前两个共振峰频率值 𝑓 1 𝑓 2
4 步:画出每个韵母的共振峰频率值 𝑓 2 vs 𝑓 1 (横轴为 𝑓 1 ,纵轴为 𝑓 2

实验结果参考:

参考代码(需要对这个代码进行修改才能完成任务,这个代码也是清华老师刘奕汶给学生做这个实验提供的代码):

%% DSP_lab5_2024_LP_demo_rb_v0_1.m
% For the course EEG3024B: DSP Technology and Its Applications at Shantou University
% ZHANG Rongbin,  20 Apr 2024

% Adapted based on ASAS_lab6_LinPred_2015.m by Prof. Yi-Wen Liu
% EE6641 HW: Linear prediction and Levinson-Durbin k-parameter estimation
% Created May 2013 as a homework.
% Last updated Nov 2015 for this year's Lab6 and HW3.
% Yi-Wen Liu


clear; 
close all;
 
DIR = './';

FILENAME = 'a1.mp3';
% FILENAME = 'i1.mp3';

[y, fs1] = audioread([DIR FILENAME]);
y = y(:, 1);  % Obtain the first channel in case the audio file has multiple channels
% figure; plot(y);

y = y(60000 : end - 60000);
% figure; plot(y);

soundsc(y, fs1);
fs = 16000;  % sampling frequency, in Hz

y = resample(y, fs, fs1);

%% Parameters to play with
framelen = 0.04; % Frame length, in second. Please try changing this.
p = 16; % linear prediction order. Please try changing this.

%%
L = framelen*fs; % Frame length, in samples

if L <= p
    disp('Linear prediction requires the num of equations to be greater than the number of variables.');
end

sw.emphasis = 1; % default = 1  (Used to pre-emphasis the high frequency components)

numFrames = floor(length(y)/L);
excitat = zeros(size(y));   % excitation signal 
e_n = zeros(p+L,1);

LPcoeffs = zeros(p+1,numFrames);
Kcoeffs = zeros(p,numFrames); % reflection coeffs

Nfreqs = 1024; % Num points for plotting the inverse filter response
df = fs/2/Nfreqs;
ff = 0:df:fs/2-df;

if sw.emphasis == 1
    y_emph = filter([1 -0.95],1,y);
else
    y_emph = y;
end

h = figure;
h_pos = h.Position; 
set(h, 'Position', [0.5*h_pos(1)   0.5*h_pos(2)   h_pos(3)*1.3   h_pos(4)*1.3]);

%% Linear prediction and estimation of the source e_n
win = ones(L,1); % Rectangular window.
lpc_1_levinson_0 = 0;   % Indicator, 1 for using lpc() function, 0 for using levinson() function
for kk = 1:numFrames
    ind = (kk-1)*L+1 : kk*L;
    ywin = y_emph(ind).*win;
    Y = fft(ywin, 2^nextpow2(2*size(ywin,1)-1));
% 	Y = fft(ywin, Nfreqs*2);
	
    if lpc_1_levinson_0 == 1
        %% Use MATLAB's lpc() function
        A = lpc(ywin, p); %% This is actually the direct way to obtain the LP coefficients. 
    else
        %% Or, use Levinson-Durbin algorithm
        % We can used levinson() instead because it gives us the "reflection coefficients". 
        R = ifft(abs(Y).^2);
        [A, errvar, K] = levinson(R, p);
    end

    if kk == 1
        e_n(p+1 : end) = filter(A, [1], ywin);
    else
        ywin_extended = y((kk-1)*L+1-p : kk*L);
        e_n = filter(A, [1], ywin_extended);
    end
    excitat(ind) = e_n(p+1 : end);
    
    if kk>1
        subplot(311);
        plot(ind/fs*1000, y(ind), 'b', 'LineWidth', 1.5);
        xlabel('Time (in ms)', 'Interpreter', 'latex', 'fontSize', 14);
        ylabel('$x(n)$', 'Interpreter', 'latex', 'fontSize',14);
        title('Time Domain: $x(n)$', 'Interpreter', 'latex', 'fontSize', 16);
        set(gca, 'xlim', [kk-1 kk]*framelen*1000);
        grid on;    ax = gca;         ax.GridLineStyle = '--';        grid minor; 

        subplot(312);
        plot(ind/fs*1000, e_n(p+1:end), 'k', 'LineWidth', 1.5);
        xlabel('Time (in ms)', 'Interpreter', 'latex', 'fontSize', 14);
        ylabel('$e(n)$', 'Interpreter', 'latex', 'fontSize', 14);
        title('Time Domain: $e(n)$', 'Interpreter', 'latex', 'fontSize', 16);
        set(gca, 'xlim', [kk-1 kk]*framelen*1000);
        grid on;    ax = gca;         ax.GridLineStyle = '--';        grid minor; 

        subplot(313);
        [H, W] = freqz(1, A, Nfreqs);
        Hmag = 20*log10(abs(H));
        Ymag = 20*log10(abs(Y(1:Nfreqs)));
        Hmax = max(Hmag);
        offset = max(Hmag) - max(Ymag);
        plot(ff, Ymag+offset, 'b', 'LineWidth', 1); hold on;
        plot(ff, Hmag, 'r', 'LineWidth', 3); hold off;
        if kk == numFrames
            legend('$|X(\omega)|$ of $x(n)$', '$|A(\omega)|$ of LPC $\{ a_k \}$', ...
                'Location', 'NorthEast', 'Interpreter', 'latex', 'fontSize', 14);
        end
        set(gca, 'xlim', [0 fs/2], 'ylim', [Hmax-50, Hmax+5]);
        xlabel('Frequency (in Hz)', 'Interpreter', 'latex', 'fontSize', 14);
        title('Frequency Domain: $|X(\omega)|$ and $|A(\omega)|$', 'Interpreter', 'latex', 'fontSize', 16);
        ylabel('dB', 'Interpreter', 'latex', 'fontSize', 16);
        grid on;    ax = gca;         ax.GridLineStyle = '--';        grid minor; 
        drawnow;
    end
 
end

% play the estimated source signal
soundsc(excitat, fs); 


% Typical values for the pitch period are 8 ms for male speakers, and 4 ms for female speakers.   ——《ECE438 DSP with Apps - Laboratory 9 - Speech Processing (Week 1).pdf》

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

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

相关文章

为什么我的Mac运行速度变慢 mac运行速度慢怎么办 如何使用CleanMyMac X修复它

近些年伴随着苹果生态的蓬勃发展&#xff0c;越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现&#xff0c;它的使用逻辑与Windows存在很多不同&#xff0c;而且随着使用时间的增加&#xff0c;一些奇奇怪怪的文件也会占据有限的磁盘空间&#xff0c;进而影响使用…

红黑树笔记

2-3树 -> 左倾红黑树 红黑树实际上是2-3树的一种基于BST的实现。普通二叉搜索树&#xff08;BST&#xff09;中的每一个节点&#xff0c;只有一个键&#xff0c;两条链接&#xff08;两个子节点&#xff09;&#xff0c;这种节点被称为2节点。2-3树中&#xff0c;引入了一个…

利用二叉检索树将文章中的单词建立索引(正则表达式)

知识储备 链接: 【二叉检索树的实现——增删改查、读取命令文件、将结果写入新文件】 1、正则表达式的处理 &#xff08;1&#xff09;r’前缀的作用 r’前缀的用于定义原始字符串&#xff0c;特点是不会处理反斜杠\作为转义字符 &#xff08;2&#xff09;正则表达式中元…

335GB,台北地区倾斜摄影OSGB数据V0.2版介绍!

前几天发布了台北地区倾斜摄影OSGB数据第一个版本(139GB,台北倾斜摄影OSGB数据V0.1版),虽然数据还是一个半成品&#xff0c;完全没想到热度很高&#xff0c;很多读者对这份数据都有比较浓厚的兴趣&#xff0c;在这里首先感谢各位读者的大力支持与鼓励&#xff0c;给了我持续更新…

Arm Linux 移植 Air724UG 4G模块-USB方式

目录 一、开发环境二、连接方式三、4G模组的 VID 和 PID四、Linux kernel 的配置五、ppp的编译六、测试 一、开发环境 开发板&#xff1a;NUC980 iot开发板 4G模块&#xff1a;银尔达 Core-Air724 二、连接方式 micro usb线&#xff0c;一端连接4G模组&#xff0c;一端连接N…

亚马逊云科技AWS将推出数据工程师全新认证(有资料)

AWS认证体系最近更新&#xff0c;在原有12张的基础上&#xff0c;将在2023年11月27日添加第13张&#xff0c;数据工程师助理级认证(Data Engineer Associate)&#xff0c;并且在2024/1/12前半价(省75刀&#xff1d;544人民币。 原有的数据分析专家级认证(Data Analytics Specia…

Spark-机器学习(7)分类学习之决策树

在之前的文章中&#xff0c;我们学习了分类学习之支持向量机&#xff0c;并带来简单案例&#xff0c;学习用法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。…

java-链表排序

需求 思路 排序&#xff1a;讲所有的值都取出来&#xff0c;存储到ArrayList中&#xff0c;然后排序&#xff0c;将排序之后的元素依次使用add方法添加到自定义链表合并排序&#xff1a;先合并&#xff0c;然后调用刚才写的排序算法合并&#xff1a;将表一的头结点作为新链表的…

kerberos-hive-dbeaver问题总结

一、kerberos安装windows客户端 1、官方下载地址 http://web.mit.edu/kerberos/dist/ 2、环境变量配置 下载msi安装包&#xff0c;无需重启计算机&#xff0c;调整环境变量在jdk的前面&#xff0c;尽量靠前&#xff0c;因为jdk也带了kinit、klist等命令 C:\Program Files\…

[动画+注释详解]数据结构 - 直接插入排序

一. 直接插入排序算法的实现 1.1 基本思想 直接插入排序&#xff08;Straight Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的基本思想是将一个待排序的记录插入到已经排序好的有序表中&#xff0c;从而得到一个新的、记录数增加1的有序表。 实际中&am…

Oracle对空值(NULL)的 聚合函数 排序

除count之外sum、avg、max、min都为null&#xff0c;count为0 Null 不支持加减乘除&#xff0c;大小比较&#xff0c;相等比较&#xff0c;否则只能为空&#xff1b;只能用‘is [not] null’来进行判断&#xff1b; Max等聚合函数会自动“过滤null” null排序默认最大&#xf…

特别的时钟特别的倒计时

念念不忘的歌曲&#xff1a;Thats Why You Go Away <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

线上线下交友社区系统,支持打包小程序/公众号/H5,源码交付!

上网交友的好处有很多&#xff0c;以下是一些主要的好处&#xff1a; 1. 拓展人际关系&#xff1a;通过上网交友可以认识更多的人&#xff0c;拓展自己的社交圈。这有助于扩大自己的视野、增加人生经验和开阔心胸。 2. 找到志同道合的朋友&#xff1a;在网络上&#xff0c;我们…

《面向云计算的零信任体系第1部分:总体架构》行业标准正式发布

中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准&#xff1a;YD/T 4598.1-2024《面向云计算的零信任体系 第1部分&#xff1a;总体架构》&#xff08;后简称“总体架构”&#xff09;&#xff0c;并于2024年7月1日正式施行。 该标准由中国信通院牵头&#xf…

装饰器模式、代理模式、适配器模式对比

装饰器模式、代理模式和适配器模式都是结构型设计模式&#xff0c;它们的主要目标都是将将类或对象按某种布局组成更大的结构&#xff0c;使得程序结构更加清晰。这里将装饰器模式、代理模式和适配器模式进行比较&#xff0c;主要是因为三个设计模式的类图结构相似度较高、且功…

如何讲好ppt演讲技巧(4篇)

如何讲好ppt演讲技巧&#xff08;4篇&#xff09; 如何讲好PPT演讲技巧&#xff08;四篇&#xff09; **篇&#xff1a;精心准备&#xff0c;奠定演讲基础 一个成功的PPT演讲&#xff0c;离不开精心的准备。首先&#xff0c;要确定演讲的主题和目标&#xff0c;确保演讲内容清…

SpringMVC进阶(自定义拦截器以及异常处理)

文章目录 1.自定义拦截器1.基本介绍1.说明2.自定义拦截器的三个方法3.流程图 2.快速入门1.Myinterceptor01.java2.FurnHandler.java3.springDispatcherServlet-servlet.xml配置拦截器4.单元测试 3.拦截特定路径1.拦截指定路径2.通配符配置路径 4.细节说明5.多个拦截器1.执行流程…

七彩虹(Colorful)隐星P16 2023款笔记本电脑原装出厂Win11系统镜像下载 带建Recovery一键还原功能

七彩虹原厂Windows预装OEM专用系统&#xff0c;恢复出厂开箱状态一模一样 适用型号&#xff1a;隐星P16 23 链接&#xff1a;https://pan.baidu.com/s/1Ig5MQMiC8k4VSuCOZRQHUw?pwdak5l 提取码&#xff1a;ak5l 原厂W11系统自带所有驱动、出厂时自带的主题与专用壁纸、系…

第 4 篇 : Netty客户端互发图片和音/视频

说明 因为图片和音/视频不能确定其具体大小, 故引入MinIO。客户端之间只发送消息, 通过上传/下载来获取额外信息 1. MinIO搭建(参考前面文章), 并启动 2. 登录MinIO创建3个Bucket: image、voice、video 3. 客户端改造 3.1 修改 pom.xml <?xml version"1.0" …

浅谈OpenCV 粗略计算工件轮廓面积和外接圆直径(Emgu.CV)

前言 最近领导在做库房工具管理这块的功能&#xff0c;希望能集成OpenCV 粗略的计算出工具的长度&#xff0c;以方便用户再归还工具的时候&#xff0c;提示用户该放在那种尺寸的盒子里面&#xff0c;这便是这篇文章的由来。 我们的系统是基于.net开发的&#xff0c;所以采用的是…