基于PSD-ML算法的语音增强算法matlab仿真

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

1.加窗处理:

2.分帧处理:

3.功率谱密度估计:

4.滤波处理:

5.逆变换处理:

6.合并处理:

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

matlab2022A

3.部分核心程序

............................................................................
% 处理最后一帧,如果最后一帧的长度小于帧长,用零填充至帧长  
y_seg = y(1+(Nframe-1)*(Len_frame-Len_loop):end); 
y_seg = [y_seg; zeros(Len_frame-length(y_seg), 1)];
y_t   = [y_t y_seg];
%应用汉宁窗函数  
window= hann(Len_frame);%apply hanning window
y_fft   = zeros(size(y_t));
for idx = 1 : Nframey_fft(:, idx) = fft(window .* y_t(:, idx)); 
end%计算带噪语音的功率谱密度(PSD)估计值,采用Barlett方法,L为周期图的段数  
L    = 12;  
Pyy  = func_Bartlett(y_fft,L); % 噪声功率谱密度(PSD)估计,选择MS或MMSE方法,这里采用MS方法,M为段数,B为偏差补偿系数 
M     = 12;  
B     = 1;  
Pnn   = func_nPSD(Pyy,M,B);% 目标语音功率谱密度(PSD)估计,选择ML或DD方法,这里采用ML方法,得到SNR的ML估计值SNR_ml  
SNR_ml       = func_PSDML(Pyy,Pnn);%DD方法的代码被注释掉了,alpha为平滑系数,取值一般在0.96-0.99之间 
% 使用wiener函数计算Wiener增益,得到降噪后的频域信号s_hat_k 
y_wiener_fft = func_wiener(y_fft,SNR_ml);% 进行逆变换和重叠相加操作,得到降噪后的时域信号s_t 
y_wiener_ifft= ifft(y_wiener_fft);% Inverse FFT transform
% 取s_t的前半部分作为s_t_est1  
y_wiener2    = y_wiener_ifft(1:Len_frame-Len_loop/2, 1);
% 取s_t的后半部分作为s_t_est2  
y_wiener3    = y_wiener_ifft(1+Len_loop/2:end,end);
% 去掉s_t的第一列和最后一列 
y_wiener_ifft(:, 1)   = [];
y_wiener_ifft(:, end) = [];
% 去掉s_t的前hop_length/2行和后hop_length/2行
y_wiener_ifft(1:Len_loop/2, :)            = [];
y_wiener_ifft(end-(Len_loop/2-1): end, :) = [];
% 将s_t重塑为一列向量  
y_wiener_ifft         = reshape(y_wiener_ifft, [], 1);
% 取s_t的实部作为最终的降噪后的时域信号s_t  
y_wiener_ifft         = real(y_wiener_ifft);
71

4.算法理论概述

       PSD-ML(Power Spectral Density Maximum Likelihood)算法是一种基于最大似然估计的语音增强算法,通过对语音信号的功率谱密度进行估计,并利用估计结果对原始语音信号进行滤波处理,以达到增强语音信号的目的。下面将详细介绍PSD-ML算法的原理和数学公式。

        PSD-ML算法的基本思想是利用最大似然估计对语音信号的功率谱密度进行估计,并根据估计结果对原始语音信号进行滤波处理。具体实现过程中,首先需要将语音信号分成多个重叠的帧,并对每帧信号进行加窗处理以减少频谱泄漏。然后,利用快速傅里叶变换(FFT)将每帧信号转换为频域表示,并根据功率谱密度的估计结果对频域信号进行滤波处理。最后,将滤波后的频域信号通过逆快速傅里叶变换(IFFT)转换回时域表示,并将重叠的帧进行合并以得到增强后的语音信号。

      假设原始语音信号为x(n),加窗后的信号为x_w(n),分帧后的第i帧信号为x_i(n),其对应的功率谱密度为P_i(k),其中k表示频率索引。则PSD-ML算法的数学公式可以表示为:

1.加窗处理:

x_w(n) = w(n) * x(n)

其中,w(n)为窗函数,如汉明窗或汉宁窗等。

2.分帧处理:

x_i(n) = x_w(n+iL)

其中,L为帧长,i为帧索引。

3.功率谱密度估计:

P_i(k) = |X_i(k)|^2 / N

其中,X_i(k)为第i帧信号的FFT变换结果,N为帧长。

4.滤波处理:

Y_i(k) = G_i(k) * X_i(k)

其中,G_i(k)为滤波器的增益函数,可以根据功率谱密度的估计结果计算得到。

5.逆变换处理:

y_i(n) = IFFT{Y_i(k)}

其中,IFFT表示逆快速傅里叶变换。

6.合并处理:

y(n) = ∑ y_i(n-iL)

其中,∑表示对所有重叠的帧进行合并。

       需要注意的是,在实际应用中,为了进一步提高语音增强的效果,可以采用一些优化策略,如自适应滤波器、多通道滤波器等。同时,也需要根据实际应用场景和需求来选择合适的窗函数、帧长、滤波器类型等参数。

5.算法完整程序工程

OOOOO

OOO

O

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023,社交进入大变革时代

社交赛道的发展似乎没有终局,尤其AIGC这一概念出现之后,社交有可能将迎来全新场景。那么在技术的助推下,社交赛道是否有可能跑出下一个超级APP?如何看待2023年的社交赛道变革?不妨来看看本文的解读。 2023社交还有新故…

JavaScript系列从入门到精通系列第十九篇:JavaScript中的this关键字

文章目录 前言 一:什么是this 二:this的灵活妙用 前言 function fun(a,b){console.log(a b); }fun(1,2); 我们通过形参的形式往参数中添加了参数。浏览器也会默默的给我们传递一个参数过去,这个参数被称为this。传递的节点就是在调用函…

阿里云服务器乌兰察布带宽收费价格表

阿里云服务器华北6(乌兰察布)地域公网带宽价格表,1M带宽价格是23元/月,按使用流量价格是0.8元每GB,阿里云服务器网来详细说下1M带宽、5M带宽、6M带宽、10M带宽、20M带宽、50M带宽和100M等带宽收费价格表: …

材质、纹理、贴图的区别和关联

1、材质、纹理、贴图的概念 材质(Material)、纹理(Texture)、贴图(Texture Map)是计算机图形学中的三个概念,它们之间存在关系但也有一些区别。 材质(Material)是描述物…

NPM 常用命令(九)

目录 1、npm link 1.1 使用语法 1.2 描述 2、npm login 2.1 描述 3、npm logout 3.1 描述 4、npm ls 4.1 使用语法 4.2 描述 5、npm org 5.1 使用语法 5.2 示例: 6、npm outdated 6.1 使用语法 6.2 描述 6.3 示例 7、npm owner 7.1 使用语法 7.2…

论文笔记 A theory of learning from different domains

domain adaptation 领域理论方向的重要论文. 这篇笔记主要是推导文章中的定理, 还有分析定理的直观解释. 笔记中的章节号与论文中的保持一致. 1. Introduction domain adaptation 的设定介绍: 有两个域, source domain 与 target domain. source domain: 一组从 source dist.…

Kafka在企业级应用中的实践

前言 前面说了很多Kafka的性能优点,有些童鞋要说了,这Kafka在企业开发或者企业级应用中要怎么用呢?今天咱们就来简单探究一下。 1、 使用 Kafka 进行消息的异步处理 Kafka 提供了一个可靠的消息传递机制,使得企业能够将不同组件…

汽车驾驶 - 四梁六柱是什么

汽车的四梁六柱指的是车辆的两个前纵梁,两个后纵梁和ABC柱。虽然不像车辆上的发动机变速箱这些部件出镜率那么高,但这几个部位的重要作用可一点都不含糊。一辆车在碰撞时能够受力起到保护左右的就是四梁六柱,对我们汽车的安全性起到至关重要的…

使用docker-compose部署Redis(单机部署)

目录 一、查看Redis镜像版本二、拉取自己需要的镜像版本三、创建挂载目录四、添加配置文件五、编写 docker-compose.yml 文件六、启动容器七、连接测试 一、查看Redis镜像版本 先去Docker Hub查看Redis镜像有那些版本,我部署的时候Redis最新已经到7.x的版本了&…

Go运算操作符全解与实战:编写更高效的代码!

目录 简介file 基础数学运算操作符加法操作符 语法示例类型描述 减法操作符 -语法示例类型描述 乘法操作符 *语法示例类型描述 除法操作符 /语法示例类型描述 取模操作符 %语法示例类型描述 位运算操作符按位与操作符 &语法示例类型描述 按位或操作符 |语法示例类型描述 按…

phpstudy本地域名伪静态

环境:WNMP(Windows10 Nginx1.15.11 MySQL5.7.26 【PHP 7.4.3 (cli) (built: Feb 18 2020 17:29:57) ( NTS Visual C 2017 x64 ) 】) 使用PhpStudy配置本地域名后,设置伪静态,这样在Web端打开网站就不需要输入index.php了,很简单…

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测,多特…