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