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

本文介绍了基于MATLAB的数字滤波器设计,用于语音信号去噪。首先,概述了滤波器的种类,包括模拟和数字滤波器,以及它们的分类。接着,详细描述了设计流程,包括语音信号采集、加噪处理和滤波去噪。通过FIR滤波器对加噪语音信号进行滤波,结果显示噪声成分得到有效去除,证明设计的滤波器达到去噪目的。
摘要由CSDN通过智能技术生成


本课程设计通过分析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]);

matlab 语音除噪 音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。也就是说,课题更多的还是体现了数字信号处理技术[1]。数字信号处理技术主要研究离散线性时不变系统,数字滤波和频谱分析是它的的两个主要分支。数字滤波(Digital filter),即在形形色色的信号中提取所需信号,抑制不必要的干扰。数字滤波器可以在时域实现也可以在频域实现,主要有两种类型;无限长冲击数字滤波器(IIR)和有限长冲击数字滤波器(FIR)。频谱分析(SA,Spectrum Analysis),对各种信号进行频域上的加工处理,其核心内容是快速傅里叶变换(FFT),分析的结果是一频率为坐标的各种物理量的谱线和曲线[2]。从课题的中心来看,课题“基于MATLAB的有噪声语音信号处理”是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音及加噪处理。作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。这一过程的实现,用到了处理数字信号的强有力工具MATLAB[3]。MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。它提供了功能齐全的滤波器设计,与信号处理交互式图形用户界面(Interactive graphical user interface),主要包括FDATool和SPATool两种交互式工具,其中FDATool主要用于数字滤波器设计与分析,而SPATool不仅可以设计分析滤波器,而且可以对信号进行时域与频域的分析[4]。通过MATLAB里几个命令函数的调用,很轻易的在实际语音与数字信号的理论之间搭了一座桥。课题的特色在于它将语音信号看作一个向量,于是就把语音数字化了。那么,就可以完全利用数字信号处理的知识来解决语音及加噪处理问题。我们可以像给一般信号做频谱分析一样,来对语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。[5]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小明n.n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值