【语音去噪】谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

news2025/7/5 16:39:17

⛄一、谱减法+维纳滤波+卡尔曼滤波语音去噪简介

1 维纳滤波算法
在传统的去噪算法中,维纳滤波因其操作简单、去噪效果好,被公认为一种经典的去噪算法。语音信号在时域的表示为: yi( t) = si( t) + ni( t) ,其中si( t) 、ni( t) 和yi( t) 分别是第i帧原始语音信号、噪声和被噪声污染的语音信号。维纳滤波原理是寻求一个线性滤波器H( n) ,使含噪语音yi( t) 经过线性滤波器后的估计值 ^si( t) = yi( t) * Hi( n) 与si( t) 之间的均方误差最小,进而从噪声ni( t) 干扰的含噪语音中分离出原纯净语音的理论。在si( t) 和ni( t) 都是平稳信号而且不相关的情况下,维纳滤波器在频域的最优估计函数为:
在这里插入图片描述
其中ps( w) 和pn( w) 分别是原始信号的功率谱和噪声的功率谱,则第i帧信号滤波后有用信号的谱估计为:
在这里插入图片描述

2 基本谱减法
S.Boll假设噪声信号是平稳的或变化缓慢的加性噪声,且在语音信号和噪声信号不相关的前提下提出谱减法,假定噪声是平稳的,人耳对相位信息不敏感,将含噪语音的相位作为处理后语音的相位,根据处理后的幅度和相位进行IFFT变换,得到增强后的时域信号。

设含噪语音为y (n),纯净语音为s (n),平稳加性高斯白噪声为d (n),有:
在这里插入图片描述
由傅里叶变换和纯净语音与含噪语音不相关,有:
在这里插入图片描述
选取适当帧长语音信号为短时平稳过程后:
在这里插入图片描述
式中λn (k)为|D(k)|2的统计平均,这样就得到基本谱减法求出原始语音信号的估计值|S(k)|。

3 基于卡尔曼滤波的语音增强
现实中的噪声大都是非平稳的,因而研究非平稳噪声状态下的语音增强具有重要意义。

卡尔曼滤波在语音去噪已有许多研究应用,其结合语音生成模型,用信号的线性预测系数作为状态转移矩阵,增强后语音中残留的音乐噪声减少,语音自然度提高,其模型参数估计的准确与否直接影响增强语音的质量。卡尔曼滤波算法在语音信号去噪方面的应用研究较多,主要归功于其处理数据和计算算法实现等较为方便。

卡尔曼滤波器的主要过程有两个,分别是预估和校正。预估就是根据时间更新方程建立对当前状态的先验估计,方便构造下一状态的先验估计值;校正即是反馈过程,根据更新方程预估的先验估计值和当前测量值对现状态分析,改进后验估计值。

对含噪语音信号的计算式为:
在这里插入图片描述
式中:s (k)为纯净语音;n (k)为与s (k)不相关的背景噪声。纯净语音s (k)在短时间段内认为是平稳的,其p阶AR预测方程为:
在这里插入图片描述
进一步得到系统的状态空间方程为:
在这里插入图片描述
式中:S (k)是k时刻的系统状态,即语音实际值;F是LPC系数构成的状态转移矩阵;y (k)是k时刻的测量值;n (k)和u (k)分别为测量噪声和过程噪声,均值始终为零,且其方差分别为δn2和δu2的不相关白噪声;H和G分别为观测向量和输入向量。
在这里插入图片描述
分帧后的语音信号在假设初始条件值后,通过卡尔曼滤波递推求出相应的结果:
在这里插入图片描述
迭代计算后最终得出增强后的语音信号在k时刻的最佳估值:
在这里插入图片描述

⛄二、部分源代码

%%三种语音增强方法的测试脚本
%******************************************************
% 在audioread函数中可以设置读入的语音信号
% 改变SNR的值即可改变加入的噪声
%
[Input, Fs] = audioread(‘sp01.wav’);
Time = (0:1/Fs:(length(Input)-1)/Fs)';
%取单声道
Input = Input(:,1);
%SNR为加入噪声与纯净信号的信噪比(dB)
SNR=10;
[NoisyInput,Noise] = add_noise(Input,SNR);%NoisyInput为加噪信号,Noise是噪声

%% 三种语音增强方法的实现
[spectruesub_enspeech] = spectruesub(NoisyInput);
[wiener_enspeech] = wienerfilter(NoisyInput);
[Klaman_Output] = kalman(NoisyInput,Fs,Noise);

%% spectruesub绘制
%将信号长度对齐
sig_len=length(spectruesub_enspeech);
NoisyInput=NoisyInput(1:sig_len);
Input=Input(1:sig_len);
wiener_enspeech=wiener_enspeech(1:sig_len);
Klaman_Output=Klaman_Output(1:sig_len);
Time = (0:1/Fs:(sig_len-1)/Fs)‘;
% Time= ((0:1/Fs:(sig_len)-1)/Fs)’;
figure(1)
MAX_Am(1)=max(Input);
MAX_Am(2)=max(NoisyInput);
MAX_Am(3)=max(spectruesub_enspeech);
subplot(3,1,1);
plot(Time, Input)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘原始信号’)

subplot(3,1,2);
plot(Time, NoisyInput)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘加噪信号’)

subplot(3,1,3);
plot(Time, spectruesub_enspeech)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘谱减法’)

%% spectruesub绘制
% Time_wiener = (0:1/Fs:(length(wiener_enspeech)-1)/Fs)';
figure(2)
MAX_Am(1)=max(Input);
MAX_Am(2)=max(NoisyInput);
MAX_Am(3)=max(wiener_enspeech);
subplot(3,1,1);
plot(Time, Input)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘原始信号’)

subplot(3,1,2);
plot(Time, NoisyInput)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘加噪信号’)

subplot(3,1,3);
plot(Time, wiener_enspeech)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘维纳滤波法’)

%% Kalman绘制
figure(3)
MAX_Am(1)=max(Input);
MAX_Am(2)=max(NoisyInput);
MAX_Am(3)=max(Klaman_Output);
subplot(3,1,1);
plot(Time, Input)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘原始信号’)

subplot(3,1,2);
plot(Time, NoisyInput)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘加噪信号’)

subplot(3,1,3);
plot(Time, Klaman_Output)
ylim([-max(MAX_Am),max(MAX_Am)]);
xlabel(‘Time’)
ylabel(‘Amlitude’)
title(‘Kalman滤波’)

%% 求语音降噪后的信噪比
SNR(1)=snr(Input,Input-spectruesub_enspeech);
SNR(2)=snr(Input,Input-wiener_enspeech);
SNR(3)=snr(Input,Input-Klaman_Output);


## ⛄三、运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/283f1956b862471ca709c6e12324a9de.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/62fcb01039814a98a0a02e7bca7a87bd.jpeg#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/56401992b693499f83c33c8441520e37.jpeg#pic_center)

## ⛄四、matlab版本及参考文献
**1 matlab版本**
2014a

**2 参考文献**
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]郑展恒,曾庆宁.语音增强算法的研究与改进[J].现代电子技术. 2020,43(21)
[3]靳立燕,陈莉,樊泰亭,高晶.基于奇异谱分析和维纳滤波的语音去噪算法[J].计算机应用. 2015,35(08)

**3 备注**
简介此部分摘自互联网,仅供参考,若侵权,联系删除
 

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

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

相关文章

springboot反射执行private方法@Autowired字段为空

springboot反射执行private方法Autowired字段为空描述错误复现controllerserviceReflectServiceImplReflectCallServiceservice 层切面debug 结果图调用 reflectTest 方法(public反射)调用 reflectTest1方法(private反射)分析参考描述 业务代码写完之后,懒得写mock代…

Python基础(四):Python必需掌握基础注释、变量、输出

文章目录 Python必需掌握基础注释、变量、输出 一、注释 1、作用 2、分类及语法 3、快速体验 4、总结 二、变量 1、作用 2、定义变量 三、输出 1、格式化符号 2、体验 3、转义字符 4、结束符 Python必需掌握基础注释、变量、输出 14天学习训练营导师课程&#xf…

[附源码]计算机毕业设计JAVA汽车租赁系统

[附源码]计算机毕业设计JAVA汽车租赁系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成(Continuous Integration,CI)和持续发布&#xff0…

C/C++编译器配置——MinGW下载安装

一. 前言 由于重装Win11系统,所有配置环境需要重装,对于C/C编译器MinGW配置做一个简单记录。 VS code等软件只提供编辑器,不提供编译器,因此windows系统上的C/C编译器需要通过安装MinGW实现。 二. 安装过程 在MinGW官网下载安装…

元宇宙产业委风语筑董事长李晖:到更多城市探索元宇宙“虚实结合”

导语:近期李晖和风语筑团队在深度探索“虚实结合”,布局元宇宙,谋求更多的创新。他受中国移动通信联合会元宇宙产业委员会委托,参与研究编撰《元宇宙十大技术》,并为该书做序《元宇宙:数字技术构建美好生活…

(十)延迟队列

延迟队列1. 延迟队列概念2. 延迟队列使用场景3. 整合Springboot4. TTL队列1. 代码架构图2.MQ组件配置文件类代码3. 消息生产者代码4. 消息消费者代码5. 延时队列优化1. 代码架构图2. 配置文件类代码3. 消息生产者代码6. Rabbitmq插件实现延迟队列1.安装延时队列插件2.代码实现7…

强强联合:OpenFeign 整合 Sentinel

书接前文: 微服务间的远程接口调用:OpenFeign 的使用 当项目中使用了 OpenFeign 后,可以很方便的进行远程服务调用,现在有个问题,假如远程服务出现故障了,调不了远程的接口,这边又着急等着返回…

系统启动其实就2个步骤BIOS和MBR(和之后的init/systemd的关系)

1.让计算机知道系统被放在哪个设备上了(BIOS) 计算机启动先启动bios,再去读MBR,MBR动了才会启动操作系统 2.让计算机知道哪里的分区是活动分区(MBR),找出来把系统引导到这里来 这两部类似于早先游戏里的红色警报和星…

springcloud20:springcloudalibaba之Nacos

为什么会出现spring alibaba 整个Netflix项目进入维护模式(不会添加新功能) springcloud: Nerflix:eureka ribbon feign ruul config springcloud一些小技术和其整合 此时内部出问题 SpringCloud 吸收了springcloud alibaba 此时springcloud带了了什么呢…

【笔试强训】Day 3

🌈欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&#x…

python中pytest库用法详解

Pytest 是用于测试 Python 应用的 Python 库。 官方文档:Full pytest documentation — pytest documentation 安装: pip install pytest pytest 测试发现约定规范 如果未指定任何参数,则在testpaths(如果已配置)或…

智慧水利数字孪生案例分享:数字孪生水利,助力三峡科学防洪防汛

长江是我国第一大河流,长江流域在我国经济发展中,占据举足轻重的地位。与此同时,长江流域频繁的洪涝、气象灾害,严重影响危害着流域内经济社会发展和生态环境,因此长江流域防汛管理被作为我国防洪体系中的关键工程。水…

阿里大咖纯手写的微服务入门笔记,从基础到进阶直接封神

前言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生的…

通讯/服务器公司 测试|测试开发 面试真题|面经 汇总

浪潮 测试开发 一面 8.24 三个面试官。一个HR,两个技术官。 1 为什么选择测开?意向工作地点。 2 软件质量模型 3 测试要做哪些测试 4 集成测试和验收测试的区别? 5 黑盒测试和白盒测试的理解 6 知道哪些黑盒测试和白盒测试的方法 7 手工测试…

【观察】“中国算力网”向全社会开放,意味着什么?

今天,算力的重要性已被提升到全新的高度,这是因为算力作为数字经济时代新的生产力,对推动科技进步、行业数字化转型以及经济社会发展都发挥着至关重要的作用。根据中国信通院发布《中国算力发展指数白皮书(2022年)》显…

AE插件:流体渐变着色特效动画生成 Potok mac

Potok是After Effects的流体渐变插件。它会产生噪波并使用渐变对其进行着色。可以从UI Gradient Control或任何图层设置渐变。噪波可以用任何层掩盖。 Noise噪波:Potok 插件有一个内置的噪音发生器,有四种噪音类型。噪声动画可以无缝循环。此外&#xf…

ASM3142 USB 3.1控制芯片_ ASM3242 USB 3.2 2x2 控制器

一、ASM3142 USB 3.1控制芯片 ASM3142 USB 3.1控制芯片将成为通过USB进行快速数据传输的新标准。是全球最快的USB解决方案, 可提高性能并实现更高的功效,节省高达50%的功耗。 与ASM 2142 USB控制芯片相比,新的ASM 3142超高速USB控…

pandas数据分析:pandas基础函数入门教程【w3school学习笔记】

系列文章目录 pandas数据分析:十分钟快速入门重点函数速查 文章目录系列文章目录前言一、Pandas作用二、数据结构2.1 Series2.2 DataFrame三、读取数据3.1 读取CSV文件数据3.2 读取JSON文件数据四、分析数据五、清洗数据5.1 空值5.1.1 删除包含空值的行5.1.2 填充空…

微信群发工具,纯Python编写~

前言 接到了一个需求:现微信有8000好友,需要给所有好友发送一则一样的消息。网上搜索一番后,发现uiautomation 可以解决该需求,遂有此文。这是第五篇,也是最后一篇。 正如上面所见,这是uiautomition 微信群…