【语音去噪】基于matlab GUI IIR滤波器语音去噪【含Matlab源码 1864期】_语音信号去噪matlab-程序员宅基地

技术标签: matlab  Matlab语音处理 (进阶版)  

博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
个人主页:海神之光
代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

一、语音处理简介

语言是人们获得各类有效信息的主要途径, 而语音是语言的表现形式。语音在一定程度上可影响人们的生活, 因此, 语音信号的研究对科学领域和人们日常生活具有一定的研究价值和意义。噪声广泛存在于生活, 信号在传输过程中不可避免会受到各类噪声的干扰, 降低了信号的可读性, 因此对携带噪声的信号进行去噪处理十分必要。语音信号是一种特殊的信号, 其在传输过程中, 由于外界环境和设备的影响不可避免会被噪声干扰, 一定程度上影响了人们所接收信息的准确性。人们提出了各种语音去噪方法, 其中, 常用的有滤波器去噪法、小波分析去噪法以及小波包分析去噪法。

MATLAB是一种功能强大, 具有很好的交互性的数值计算和可视化计算高级语言, 其强大的矩阵运算, 数值分析以及信号处理功能使其广泛应用于众多科学领域中。因此作者使用MATLAB作为设计工具软件来进行语音信号去噪处理。

作者在MATLAB环境下应用滤波器去噪方法对加噪声的语音信号进行时域、频域的分析和滤波。通过MATLAB编程对语音信号被噪声污染进行仿真处理, 并对加噪声前后的频谱图进行对比;然后根据语音信号特点设计各类滤波器;最后将所设计的滤波器分别应用于含噪声的语音信号, 并对其频谱图进行对比分析, 确定最优化方法。

1 总体设计
利用MATLAB作为平台实现滤波和频谱分析, 主要分为语音信号采集、语音信号分析、语音信号加噪、滤波分析以及GUI设计五个模块, 系统框图如图1所示。
在这里插入图片描述
首先对采集的语音信号进行频谱分析, 然后对其进行加噪并对加噪后的信号进行频谱分析。而滤除噪声的方法选择了噪性能较好的滤波器方法, 即通过设计无限脉冲相应IIR滤波器来完成, 并利用这两种方法对加噪后的语音信号进行去噪处理, 然后从频域角度对结果进行了对比分析。最后为了加强程序的友好性和可视性, 采用GUI编程的方法来设计语音信号去噪系统用户界面。

2 语音信号采集和加噪
2.1 语音信号采集

文章利用PC机声卡对语音信号进行采集。PC机的声卡采样率一般在64 KHz以上, 即一秒钟可以采集64 000个声音样本。而人们正常的语音信号一般在300 Hz至34 000 Hz之间, 根据奈奎斯特采样定理, 一般的正常的语音信号均可以利用声卡采集并且保证其不失真。在安静环境下的正常交流可以近似为纯语音信号, 声音信号的长度最好控制在10 s内以便后期分析处理。

2.2 语音信号加噪
对已经获得的纯语音信号进行加噪处理来模拟在实际生活中语音信号被噪声污染的情况。利用MATLAB中的audioread函数把语音信号转换成序列, 得到信号信息;sound函数可以将采样序列通过声卡转换成声音, 可直观听出加噪前后的区别。高斯白噪声可用具体的数学表达式表示, 且可以贴近反映实际信道中的加性噪声的情况。

文章选择对语音信号加入高斯白噪声来模拟声音被污染的情况。利用MATLAB中的随机函数 (rand或randn) 产生符合高斯分布序列的噪声序列并将其加到语音信号中, 用来模拟语音信号被污染。通过对其频谱分析, 声音的回放可以很清楚的听出加噪前后的区别。也可以通过sound函数便可以听到加噪后的语音信号, 与原始语音信号相比, 声音刺耳根本不能分辨出原始语音信号。

3 语音信号去噪方法
对于语音去噪现在已经有一些比较成熟的方法, 如小波变换法, 小波包变换法, 以及滤波器法。利用小波的方法去噪设计过程相对繁琐, 因此, 选用滤波器方法来实现去噪功能。

3.1 IIR滤波器语音去噪
IIR滤波器一般有三种设计方法, 分别为:零极点位置累试法、利用模拟滤波器设计数字滤波器和最优化设计法。本文选用滤波器方法, 在设计IIR滤波器的时候可以借鉴经典的成熟的模拟滤波器, 如巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器等。文章将使用巴特沃斯低通滤波器来设计数字滤波器。

由原始语音信号及其加噪前后的频谱分析可知, 所设计滤波器应该要实现的功能是滤除掉出语音信号之外的噪声部分的频率, 根据要求给出技术指标如下:
低通滤波器的性能指标:fp=1 000 Hz, fs=1200 Hz, αs=50 db, αp=1 d B
高通滤波器的性能指标:fp=3 500 Hz, fs=4000 Hz, αs=50 d B, αp=1 d B
带通滤波器的性能指标:fp1=1 200 Hz, fp2=3 000 HZ, fs1=1 000 Hz, fs2=3 200 Hz, αs=100d B, αp=1 d B
其中fp表示通带截止频率;fs为阻带截止频率;αp表示最大通带衰减;αs表示最小阻带衰减。

当得出相关的技术指标后便可以利用经典滤波器来设计低通滤波器, 这里采用巴特沃斯滤波器来设计模拟低通滤波器, 并得到低通滤波器的系统函数, 即H (s) 。得到一个可以实现相关功能的模拟低通滤波器后将会采用频率变换的方法通过低通滤波器的系统函数变换出相关的高通、带通或带阻滤波器的系统函数。

二、部分源代码

function varargout = main(varargin)
% MAIN MATLAB code for main.fig
% MAIN, by itself, creates a new MAIN or raises the existing
% singleton*.
%
% H = MAIN returns the handle to a new MAIN or the handle to
% the existing singleton*.
%
% MAIN(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in MAIN.M with the given input arguments.
%
% MAIN(‘Property’,‘Value’,…) creates a new MAIN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before main_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to main_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help main

% Last Modified by GUIDE v2.5 25-Dec-2017 23:52:39

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @main_OpeningFcn, …
‘gui_OutputFcn’, @main_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before main is made visible.
function main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to main (see VARARGIN)

% Choose default command line output for main
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes main wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = main_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%---------------------------利用函数wavread对语音信号的采集--------------------------------%
global wav_in;
global wav_in_1;
global Fs;
global bits;
global n;
global f1;
[filename pathname]=uigetfile({‘*.wav’}, ‘File Selector’);
[wav_in,Fs] = audioread([pathname ‘’ filename]);

handles.wav_in = wav_in;
guidata(hObject, handles);
axes(handles.axes1);
% aa=abs(fftshift(wav_in));
% plot(aa);title(‘’)
N=length(wav_in);
n=0:N-1;
plot(n,wav_in); %画出原始语音信号的波形
xlabel(‘n’);
ylabel(‘x(n)’);
title(‘原始语音信号’);
f1=fft(wav_in,N); %对语音号进行快速傅里叶变换,得出频谱
% GX=fft(wav_in,512);

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]宋云飞,姜占才,魏中华.基于MATLAB GUI的语音处理界面设计[J].科技信息. 2013,(02)
[4]韩长军.基于MATLAB的语音信号去噪方法应用[J].辽东学院学报(自然科学版). 2017,24(01)

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

仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TIQCmatlab/article/details/125171384

智能推荐

hdu 1229 还是A+B(水)-程序员宅基地

文章浏览阅读122次。还是A+BTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24568Accepted Submission(s): 11729Problem Description读入两个小于10000的正整数A和B,计算A+B。...

http客户端Feign——日志配置_feign 日志设置-程序员宅基地

文章浏览阅读419次。HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息。FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。BASIC:仅记录请求的方法,URL以及响应状态码和执行时间。NONE:不记录任何日志信息,这是默认值。配置Feign日志有两种方式;方式二:java代码实现。注解中声明则代表某服务。方式一:配置文件方式。_feign 日志设置

[转载]将容器管理的持久性 Bean 用于面向服务的体系结构-程序员宅基地

文章浏览阅读155次。将容器管理的持久性 Bean 用于面向服务的体系结构本文将介绍如何使用 IBM WebSphere Process Server 对容器管理的持久性 (CMP) Bean的连接和持久性逻辑加以控制,使其可以存储在非关系数据库..._javax.ejb.objectnotfoundexception: no such entity!

基础java练习题(递归)_java 递归例题-程序员宅基地

文章浏览阅读1.5k次。基础java练习题一、递归实现跳台阶从第一级跳到第n级,有多少种跳法一次可跳一级,也可跳两级。还能跳三级import java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[]args){ Scanner reader=new Scanner(System.in); while(reader.hasNext()){ _java 递归例题

面向对象程序设计(荣誉)实验一 String_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏6次。目录1.串应用- 计算一个串的最长的真前后缀题目描述输入输出样例输入样例输出题解2.字符串替换(string)题目描述输入输出样例输入样例输出题解3.可重叠子串 (Ver. I)题目描述输入输出样例输入样例输出题解4.字符串操作(string)题目描述输入输出样例输入样例输出题解1.串应用- 计算一个串的最长的真前后缀题目描述给定一个串,如ABCDAB,则ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA }ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB_对存储在string数组内的所有以字符‘a’开始并以字符‘e’结尾的单词做加密处理。

算法设计与问题求解/西安交通大学本科课程MOOC/C_算法设计与问题求解西安交通大学-程序员宅基地

文章浏览阅读68次。西安交通大学/算法设计与问题求解/树与二叉树/MOOC_算法设计与问题求解西安交通大学

随便推点

[Vue warn]: Computed property “totalPrice“ was assigned to but it has no setter._computed property "totalprice" was assigned to but-程序员宅基地

文章浏览阅读1.6k次。问题:在Vue项目中出现如下错误提示:[Vue warn]: Computed property "totalPrice" was assigned to but it has no setter. (found in <Anonymous>)代码:<input v-model="totalPrice"/>原因:v-model命令,因Vue 的双向数据绑定原理 , 会自动操作 totalPrice, 对其进行set 操作而 totalPrice 作为计..._computed property "totalprice" was assigned to but it has no setter.

basic1003-我要通过!13行搞定:也许是全网最奇葩解法_basic 1003 case 1-程序员宅基地

文章浏览阅读60次。十分暴力而简洁的解决方式:读取P和T的位置并自动生成唯一正确答案,将题给测点与之对比,不一样就给我爬!_basic 1003 case 1

服务器浏览war文件,详解将Web项目War包部署到Tomcat服务器基本步骤-程序员宅基地

文章浏览阅读422次。原标题:详解将Web项目War包部署到Tomcat服务器基本步骤详解将Web项目War包部署到Tomcat服务器基本步骤1 War包War包一般是在进行Web开发时,通常是一个网站Project下的所有源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码。当开发人员在自己的开发机器上调试所有代码并通过后,为了交给测试人员测试和未来进行产品发布,都需要将开发人员的源码打包成Wa..._/opt/bosssoft/war/medical-web.war/web-inf/web.xml of module medical-web.war.

python组成三位无重复数字_python组合无重复三位数的实例-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏13次。# -*- coding: utf-8 -*-# 简述:这里有四个数字,分别是:1、2、3、4#提问:能组成多少个互不相同且无重复数字的三位数?各是多少?def f(n):list=[]count=0for i in range(1,n+1):for j in range(1, n+1):for k in range(1, n+1):if i!=j and j!=k and i!=k:list.a..._python求从0到9任意组合成三位数数字不能重复并输出

ElementUl中的el-table怎样吧0和1改变为男和女_elementui table 性别-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏2次。<el-table-column prop="studentSex" label="性别" :formatter="sex"></el-table-column>然后就在vue的methods中写方法就OK了methods: { sex(row,index){ if(row.studentSex == 1){ return '男'; }else{ return '女'; }..._elementui table 性别

java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下-程序员宅基地

文章浏览阅读1.1k次。java文件操作之移动文件到指定的目录_java中怎么将pro.txt移动到design_mode_code根目录下

推荐文章

热门文章

相关标签