基于MATLAB的数字滤波器语音信号去噪

news2024/9/30 11:25:06

文章目录

  • 一、滤波器的种类及简介
  • 二、设计流程
  • 三、滤波器设计实现与结果仿真
  • 参考文献
  • 基于MATLAB的FPR滤波器设计源代码

本课程设计通过分析FIR滤波器的基本原理,在MATLAB环境下利用窗函数法设计出FIR滤波器,实现FIR滤波器的仿真。首先是采集一段语音信号,对其进行时域和频域的分析,然后对所采集的语音信号加入噪声,并对加噪后的信号进行频谱分析,再用窗函数法设计出FIR滤波器,对加入噪声后的语音信号进行滤波处理,以去除噪声,并绘出滤波前后时域和频域的波形图,对其进行对比分析,通过仿真结果表明所设计的FIR滤波器可以有效的滤除干扰信号,设计结果满足性能指标要求。

一、滤波器的种类及简介

滤波器按照信号处理来分可以分为模拟滤波的数字滤波;按照通过信号的频段来分可以问为低通滤波器、高通滤波器、带通滤波器、带阻滤波器、全通滤波器;按照采用的元器件来分可以分为无源滤波器和有源滤波器;按照安放位置的不同可以分为上滤波器和面板滤波器。
模拟滤波器是一种使用模拟电路来实现的滤波设备,其主要作用是将电路中的信号经过滤波器后,只留下想要的频率成分,而滤掉其他频率成分。滤波器通常使用基本电学元件组成,如电感、电容、电阻等构建,其工作原理依赖于这些元件对电压和电流处理的方式。模拟滤波器通常用来处理连续时间的信号,如音频信号、射频信号等。与数字滤波器相比,模拟滤波器具有更高的精度和更宽的频率响应范围,但在工艺和稳定等方面存在一定的限制。
数字滤波器是指输入输出均为数字信号,通过数值运算处理改变输入信号所含频率成分的相对比例,或者滤除某些频率成分的数字器件或程序。因此,数字滤波的概念和模拟滤波相同,只是信号的形式和实现滤波方法不同。正因为数字滤波通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活、不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊滤波功能。
低通滤波器是指将频率低于某个截止频率的信号通过,而将频率高于截止频率的信号进行滤波;而高通滤波器正好相反,高通滤波器指将频率高于某个截止频率的信号通过,而将滤除低于截止频率的信号进行滤波;带通滤波器是一种可以通过一段频率范围内的信号,同时过滤掉低于和高于这个频率的滤波器。带阻滤波器正好相反,它可以滤掉一定频率范围内的信号,而将低于和高于这个范围的信号通过;全波滤波器是一个可逆的滤波器,其特殊之处在于其输出的信号与输入的信号波形相似,但是相位不同。全波滤波器的作用是将信号中的所有频率成分通过,即不增强也不做任何衰减。因此全波滤波器通常用于相位校正、降噪处理、信号合成等方面。

在这里插入图片描述
无源滤波器基本上是由电容电感等“被动元件”构成,电路只有使用时提供给电路,滤波器电路不会向电源提供功率。传统的滤波器如RC滤波器和LC滤波器就是属于无源滤波器;有源滤波器则包含一个或多个放大器,并使用电源来提供放大器所需的能量。有源元件操作的有源滤波器性能相对于无源滤波器更优秀,具有更好的传输特性,更小的铜带衰减和更陡的阻带衰减。因此,有源滤波器在信号增强、滤波和滤波器级联方面得到了广泛应用。但是有源滤波器相对于无源滤波器来说,在电路设计和布局方面有计数层面的挑战性。
上滤波器是一种应用于车载音响系统的滤波器,可以消除发动机、风噪等原因引起的低频杂音。该滤波器通过增加低频衰减度,使得低频信号传输更清晰、更平稳。通常上滤波器安装在主机或者放大器的输出信号上;面板滤波器则是在音频或视频制作中经常使用的一种沉浸式滤波器,它可以同时调整信号的频率、幅度和相位特性。通常面板滤波器在混音或后期制作中使用,因为它可以快速精确的调整信号的特性。这种滤波器常常是木制的,并且集成了各种旋钮和控制面板,可以根据需要进行滤波器的高度和定制化程度。两种滤波器应用在不同领域,具有不同的特点和作用。

二、设计流程

本设计总体分为三大模块:语音信号采集与分析模块,语音信号加噪处理模块,滤波去噪模块。
在这里插入图片描述
总体设计流程为:采集一段语音信号。将语音信号的文件名命名为aa.wav,再用MATLAB中的wavread函数求出语音信号的三个参数,分别为:每个样本的值,生成该语音波形文件时的采样频率,波形文件样本的码数,再对语音信号以及加入了高频噪声后的语音信号做快速傅立叶变化,绘制出时域波形和频谱图。然后让加噪信号通过所设计的滤波器,绘制滤波前后时域波形对比图和幅频特性对比图,并回放滤波前后的语音信号来验证是否达到去噪的目的。
在这里插入图片描述

三、滤波器设计实现与结果仿真

3.1语音信号下载和转换读取
在网上下载一段MP3格式的音频,利用格式工厂将MP3文件转换成WAV文件,并重命名为“aa.wav”。利用 MATLAB 中的 wavread 命令来读入语音信号,将它赋值给某一向量。[y,fs,bits]=wavread(‘ aa.wav‘);用于读取语音,采样值放在向量 y 中, fs表示采样频率(Hz), bits 表示采样位数。
3.2原始语音信号的分析
本次设计首先获得时间长为9s的语音信号x。对x信号进行时域绘图,然后采样y=fft(x,m),其中m=length(x)。最后利用plot函数分别画出x信号的时域图和频域图。
在这里插入图片描述
3.3语音信号加噪处理
本设计主要加入一种2khz的高频噪声如下:noise_hig=0.02sin(2pi2000t/fs);
使用绘图命令即可画出语音信号加噪后的时域波形和频域波形。
在这里插入图片描述
由上图中可以明显看到,加了噪声的时域波形比未加之前幅度明显增大。从频谱来看,加了噪声的频谱在2KHz频率出有尖锐的幅度频率,这个频率会让我们听到音频信号明显的杂音。
3.4低通滤波器设计
由频谱图可以观察到,音频信号主要在低频段上,在2KHz处有一处尖锐的噪声,我们只需设计一个低通滤波器截止频率为1.7KHz以上的频率的音频全部滤除掉即可。源码如下:

fs = 44100; % 采样率
fc = 1700; % 截止频率
N =200; % 阶数
b = fir1(N, fc/(fs/2)); % 使用fir1函数设计低通滤波器系数
figure;
freqz(b, 1); % 绘制滤波器的频率响应特性

通过绘图工具,可以得出这个滤波器的波形图,如下图:
在这里插入图片描述
3.5 FIR数字滤波器对加噪语音信号滤波
用设计好的各滤波器分别对加噪的语音信号进行滤波[9],在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。函数fftfilt用的是重叠相加法实现线性卷积的计算。结果可以通过绘图工具看出滤波后的效果,对比滤波前的效果如下图所示。
在这里插入图片描述
在这里插入图片描述
可以看出噪声信号和滤波后的信号的时域图和频谱图可看出噪声信号中的噪声成分已成功的去除,并通过回放滤波以后的语音信号,也可以听出滤波后基本与原始语音信号相同,因而设计成功由滤波器的幅频和相频图可看出滤波器的设计也符合要求。

参考文献

[1]丁玉美,高西泉.数字信号处理(第二版).西安电子科技大学出版社
[2]王卫东.高频电子电路(第3版).电子工程出版社

基于MATLAB的FPR滤波器设计源代码

clc;
clear;
%读取音频文件,x-音频数据矩阵 fs-采样率
[x,fs]=audioread('D:\file\matlab_demo\aa.wav'); 
%sound(x,fs);%播放音频

%绘制音频时域图
subplot 211;plot(x);
xlabel('时间(s)');title('原始信号时域');
xlim([-10000 660000]);

%绘制音频信号的频谱图
n=length(x);%求音频数组纬度的长度
y=fft(x,n);%对录制信号进行傅里叶变换
y_mag=abs(y);
f=fs*(0:n-1)/n;
subplot 212;plot(f,y_mag);
xlabel('频率(hz)');title('原始信号频谱');
xlim([-10 2500]);

%添加高频噪声
t=0:n-1;
noise_hig=0.02*sin(2*pi*2000*t/fs);%产生一个2KHZ的高频噪声
noise_hig=noise_hig';
x2=x+noise_hig;%将噪音添加到音频
%sound(x2,fs);%回放添加噪声信号的音频 
figure;%创建新的图窗窗口
subplot 211;plot(x2);
xlabel('时间(s)');title('添加噪音信号时域');
xlim([-10000 660000]);
y2=fft(x2,n);%对加了噪音信号的音频进行傅里叶变换
subplot 212;plot(f,abs(y2));
xlabel('频率(hz)');title('添加噪音信号频谱');
xlim([-10 2500]);

% 设计一个低通滤波器,滤除1.7KHz以上的频率
fs = 44100; % 采样率
fc = 1700; % 截止频率
N =200; % 阶数
b = fir1(N, fc/(fs/2)); % 使用fir1函数设计低通滤波器系数
figure;
freqz(b, 1); % 绘制滤波器的频率响应特性
x1get=filter(b,2,x2);
%sound(x1get,fs);%回放滤波后信号的音频 
y1get=fft(x1get,n);%对除噪音的信号进行傅里叶变换
figure;
subplot(211);plot(x1get);
xlabel('时间(s)');title('滤除噪音信号时域');
xlim([-10000 660000]);
subplot(212);plot(f,abs(y1get));
xlabel('频率(hz)');title('滤除噪音信号频谱');
xlim([-10 2500]);

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

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

相关文章

C++高级数据结构——ST表(倍增表)

从上次写文章到现在已经27天了,将近一个月蒟蒻没有更新了。 最近学的ST表太难理解了,再加上忙,一直没时间…… ----------------------------------------------------------------------------------------------------------------------…

Tarball管理

文章目录 Tarball管理Tarball安装的基本步骤一般 Tarball 软件安装的建议事项 Tarball管理 从源代码的说明我们知道制作一个二进制程序需要很多东西,这包括下面这些基础的软件。 gcc或cc等C语言编译器make及autoconfig等软件需要内核提供的Library以及相关的inclu…

win11使用命令行建立wifi热点,并可以设定名称密码等

主要是想自动化的实现打开wifi热点,ssid和wifi密码可控!手机设定比较简单,但是用程序行来设定还真是比较麻烦。 查了一下,有人使用netsh 无法解决,也就是说无法使用如下命令启动移动热点: netsh wlan set hostednetwork mode=allow ssid=wifi888 key=88888888 netsh wl…

信息安全实践1.2(重放攻击)

前言 这个实验是看一本书做的,就是李华峰老师的书——《Metasploit Web 渗透测试实战》,我之前写过一篇Slowloris DoS攻击的博客,也是看这本书写的,总的来说,有用处。这篇博客其实也只是很浅显的去做一下重放攻击。 要…

PyTorch 深度学习 || 专题二:PyTorch 编程基础

PyTorch 编程基础 文章目录 PyTorch 编程基础1. backword 求梯度2. 常用损失函数2.1 均方误差损失函数2.2 L1范数误差损失函数2.3 交叉熵损失函数 3. 优化器 1. backword 求梯度 import torchw torch.tensor([1.], requires_gradTrue) x torch.tensor([2.], requires_gradTr…

R实践——【rgplates】安装、介绍、入门

【rgplates】安装、介绍、入门 1. rgplates 安装1.1 easy way1.2 备案方法 2. rgplates 介绍3. rgplates 在线方法入门3.1 加载rgplates3.2 板块重建3.3 独立的地点坐标3.3.1 单个现存坐标点3.3.2 单个点的古坐标3.3.3 多个点的古坐标 3.4 现今的海岸线3.5 其他的重建模型3.6 在…

JMeter 性能测试基本过程及示例

jmeter 为性能测试提供了一下特色: 2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!_哔哩哔哩_bilibili2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!共计11条视频&…

javascript获取对象的键名列表、键值列表

Object.keys&#xff1a;获取对象的键名列表 Object.values&#xff1a;获取对象的键值列表 <script>var obj {name: 1,age: 2,order: 3}const klist Object.keys(obj)const vals Object.values(obj)console.log(obj, obj)console.log(键名列表, klist)console.log(键…

STM32F4_位带操作

目录 1. 位带简介 2. 别名区地址的计算 2.1 合并计算 3. 位带操作访问ODR和IDR寄存器 4. GPIOB->MODER&~(3<<(9*2));GPIOB->MODER|0<<9*2 / GPIOB->MODER&~(3<<(9*2));GPIOB->MODER|1<<9*2 位带操作在写单片机程序时&#xf…

springboot+vue 刘老师

课程内容 前端&#xff1a;vue elementui 后端&#xff1a;springboot mybatisplus 公共云部署 ------boot-------- 热部署 不用devtools&#xff0c;交给jrebel工具 RequestMapping ​ 参数 value 路径 method 方法consumes 请求媒体类型 如 application/jsonproduces …

DJ5-7 缓冲区管理

目录 5.7.1 缓冲的引入 5.7.2 单缓冲和双缓冲 1、单缓冲&#xff08;Single Buffer&#xff09; 2、双缓冲&#xff08;Double Buffer&#xff09; 3、双机通信时缓冲区的设置 5.7.3 循环缓冲 1、循环缓冲的组成 2、循环缓冲区的使用 3、进程同步 5.7.4 缓冲池 …

Spring Security源码剖析从入门到精通.跟学尚硅谷

1.1 概要 Spring 是非常流行和成功的 Java 应用开发框架&#xff0c;Spring Security 正是 Spring 家族中的成员。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。 正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”…

Mediapipe人体识别库

一、简介 官网&#xff1a;MediaPipe | Google for Developershttps://developers.google.cn/mediapipe Mediapipe 是2012年起开始公司内部使用&#xff0c;2019年google的一个开源项目&#xff0c;可以提供开源的、跨平台的常用机器学习(machine learning)方案。Mediapipe…

python-sqlite3使用指南

python下sqlite3使用指南 文章目录 python下sqlite3使用指南开发环境sqlite3常用APICRUD实例参考 开发环境 vscode ​ 开发语言&#xff1a; python vscode SQLite插件使用方法&#xff1a; 之后在这里就可以发现可视化数据&#xff1a; sqlite3常用API Python 2.5.x 以上…

信息安全实践1.3(HTTPS)

前言 做这个实验对Tomcat的版本有要求&#xff0c;最好是使用Tomcat8。因为我之前使用Tomcat10&#xff0c;然后一直做不出来。 要求 部署Web服务器端HTTPS功能&#xff0c;通过网络嗅探分析HTTPS通过SSL实施安全保护的效果 关键步骤 首先要给tomcat配置https&#xff0c;也…

设计模式之美-实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗?

领域驱动设计&#xff08;Domain Driven Design&#xff0c;简称DDD&#xff09;盛行之后&#xff0c;这种基于贫血模型的传统的开发模式就更加被人诟病。而基于充血模型的DDD开发模式越来越被人提倡。所以&#xff0c;我打算用两节课的时间&#xff0c;结合一个虚拟钱包系统的…

超低功耗三通道低频无线唤醒ASK接收 125k soc芯片UM2082F08

UM2082F08 是基于单周期 8051 内核的超低功耗 8 位、、具有三通道低频无线唤醒 ASK 接收功能的 SOC 芯片。芯片可检测 30KHz~300KHz 范围的 LF&#xff08;低频&#xff09;载波频率数据并触发唤醒信号&#xff0c;同时可以调节接收灵敏度&#xff0c;确保在各种应用环境下实现…

代码随想录算法训练营15期 Day 6 | 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和

由于昨天是周日&#xff0c;周日是休息日&#xff0c;所以就是什么也没有写啦。今天是day06天&#xff0c;继续加油。 哈希表理论基础 建议&#xff1a;大家要了解哈希表的内部实现原理&#xff0c;哈希函数&#xff0c;哈希碰撞&#xff0c;以及常见哈希表的区别&#xff0c;…

Toolkit.getDefaultToolkit()获得的java.awt.Toolkit是不是同一个? 是否为单例设计模式?答案是**是**

Toolkit.getDefaultToolkit()获得的java.awt.Toolkit是不是同一个? 是否为单例设计模式? 答案是是 反复调用Toolkit.getDefaultToolkit()获得的 java.awt.Toolkit 是同一个 import java.awt.Toolkit;public class GetDefaultToolkit是不是获得单例Toolkit {static public …

【P43】JMeter 吞吐量控制器(Throughput Controller)

文章目录 一、吞吐量控制器&#xff08;Throughput Controller&#xff09;参数说明二、测试计划设计2.1、Total Executions2.2、Percent Executions2.3、Per User 一、吞吐量控制器&#xff08;Throughput Controller&#xff09;参数说明 允许用户控制后代元素的执行的次数。…