《音乐信号滤波去噪——用凯塞窗设计的滤波器》 第5页 共19页
实现,而在IIR滤波器中使用有限精度会产生很大的问题,由于采用的是反馈电路,因此IIR通常用非常少的bit实现,设计者就能解决更少的与非理想算术有关的问题。 (5)可以用小数实现。不像IIR滤波器,FIR滤波器通常可能用小于1的系数来实现。(如果需要,FIR滤波器的总的增益可以在输出调整)。当使用定点DSP的时候,这也是一个考虑因素,它能使得实现更加地简单。
FIR滤波器的缺点在于它的性能不如同样阶数的IIR滤波器,不过由于数字计算硬件的飞速发展,这一点已经不成为问题。再加上引入计算机辅助设计,FIR滤波器的设计也得到极大的简化。基于上述原因,FIR滤波器比IIR滤波器的应用更广。
2.2窗口设计法
窗函数设计法的基本思想是用FIRDF逼近洗完的滤波特性。设希望逼近的滤波器的频率响应函数为
,其单位脉冲响应为
表示。为了设计简单方便,通常选择是无限长非因果序列,不能直接作为FIRDF为有限长的一段因果序列,并用合适的窗函
为具有片段常数特性的理想滤波器。因此的单位脉冲响应。窗函数设计法就是截取
数进行加权作为FIRDF的单位脉冲响应h(n)。
用窗函数法设计FIRDF的具体设计步骤如下: (1)构造希望逼近的频率响应函数(2)求出
。
。
(3)加窗得到FIRDF的单位脉冲响应h(n)。h(n)=w(n)。式中,w(n)称为窗函数,
其长度为N。如果要求设计第一类线性相位FIRDF,则要求h(n)关于(N-1)/2点偶对称。而
关于n=t点偶对称,所以要求t=(N-1)/2。同时要求w(n)关于(N-1)/2点偶对称。 用窗函数法设计第一类线性相位FIRDF的步骤: (1)选择窗函数类型和长度,写出才窗函数根据阻带最小衰减选择窗函数
的表达式。
的的类型,再根据过渡带宽度确定所选窗函数的长
度N。用窗函数法设计的FIRDF通带波纹幅度近似等于阻带波纹幅度。一般阻带最小衰减达到40dB以上,则通带最大衰减就小于0.1dB。所以用窗函数法设计FIRDF时,通常只考虑阻带最小衰减就可以了。
《音乐信号滤波去噪——用凯塞窗设计的滤波器》 第6页 共19页
(2)构造希望逼近的频率响应函数。
根据设计需要,一般选择线性相位理想滤波器(理想低通、理想高通、理想带通、理想带阻)。理想滤波器的截止频率?c近似为最终设计的FIRDF的过渡带中心频率,幅度函数衰减一半(约-6dB)。所以一般取边界频率。
(3)计算
(4)加窗得到设计结果:h(n)=
。
,和分别为通带边界频率和阻带
w(n)。
3设计步骤
3.1 设计流程
开始 用麦克风采集一段音乐将格式改为.wav 加入单频噪声 对语音信号进行频谱分析,画出时域和频域波形图 用汉宁窗设计FIR滤波器 画出其频率响用FIR滤波器对语音信号进行滤波 画出语音信号滤波前后波形并且进行比较分析 结束
《音乐信号滤波去噪——用凯塞窗设计的滤波器》 第7页 共19页
3.2 采集音乐信号
在网络中找到自己想要的歌曲文件,并下载下来,即可对音乐文件进行文件格式转换及声音属性的变化。
在转换过程中,将音乐格式设置为wav格式,属性设置为4.410kHz,8位,单声道,128KB/秒,然后点击确定。然后再点击文件/另存为,即可将该语音文件存在MATLAB文件下的work文件夹里。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函数的使用,让我们很快理解了采样频率、采样位数等概念。采集完成后在信号中加入一个单频噪声。
对应程序如下:
[x,fs,bits]=wavread(‘yuntian.wav’); % 输入参数为文件的全路径和文件名(因为语音文件直接放在Matlab下的work文件夹里,所以直接使用文件名即可),输出的第一个参数是每个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
sound(x,fs,bits); % 按指定的采样率和每样本编码位数回放所录语音文件 N=length(x); % 计算信号x的长度
fn=1900; % 单频噪声频率,此参数可自己设计 t=0:1/fs:(N-1)/fs; % 计算时间范围,样本数除以采样频率 x=x’; %将其转置
y=x+sin(fn*2*pi*t); %在原信号上添加噪声
sound(y,fs,bits); % 应该可以明显听出有尖锐的单频啸叫声
3.3滤波器设计
在该滤波器的设计中,我们给出该滤波器的性能指标如下:
fpd=1800; fsd=1850; fsu=1950; fpu=2000;Rp=1; As=40;
截止频率也可以任意自选,在单频噪声干扰附近即可。在这里,很重要的是通带截止db值的设置。这个值一定要根据我们使用的设计滤波器的方法来设定。因为我使用的是凯塞窗法,凯塞窗函数中,滤波器的过渡带宽为15.4?/M,最小阻带衰减为108db。所以,一定要将通带截止db值设置的小于108,所以,我将其设置为100db。
《音乐信号滤波去噪——用凯塞窗设计的滤波器》 第8页 共19页
在这里我是使用窗函数法设计上面要求的FIR滤波器。在Matlab中,利用凯塞窗设计FIR滤波器,利用Matlab中的函数freqz画出该滤波器的频率响应。
首先,我们利用数字信号处理里面学过的知识,根据自己选定的参数,用指定的方法设计FIR滤波器,得到FIR滤波器的阶数M。随后调用nuttallwin (M)函数产生M阶的凯塞窗。然后,调用自编ideal_lp函数计算理想带阻滤波器的脉冲响应。最后,再调用自编freqz_m(h_bs,1)函数即可计算得到该滤波器的频率特性。
我设计滤波器过程对应的程序如下:
fpd=1800;fsd=1850;fsu=1950;fpu=2000;Rp=1;As=40; % 带阻滤波器设计指标 fcd=(fpd+fsd)/2;fcu=(fpu+fsu)/2;df=min((fsd-fpd),(fpu-fsu)); % 计算上下边带中心频率,和频率间隔 wcd=fcd/fs*2*pi;wcu=fcu/fs*2*pi;dw=df/fs*2*pi;
% 将Hz为单位的模拟频率换算为rad为单位的数字频率 wsd=fsd/fs*2*pi;wsu=fsu/fs*2*pi;
M=ceil(6.6*pi/dw)+1; % 计算凯塞窗设计该滤波器时需要的阶数 n=0:M-1; % 定义时间范围
w_ham= nuttallwin (M); % 产生M阶的凯塞窗 hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M); % 调用自编函数计算理想带阻滤波器的脉冲响应
h_bs=w_ham'.*hd_bs; % 用窗口法计算实际滤波器脉冲响应
[db,mag,pha,grd,w]=freqz_m(h_bs,1); % 调用自编函数计算滤波器的频率特性 在将滤波器设计好,频率特性求出来之后,我编写如下程序,来画出该带阻滤波器的特性图。程序如下:
subplot(2,2,1);plot(w,db); grid on; xlabel('频率');ylabel('db'); subplot(2,2,2);plot(w,mag); grid on; xlabel('频率');ylabel('幅度'); subplot(2,2,3);plot(w,pha); grid on; xlabel('频率');ylabel('相位'); subplot(2,2,4);plot(h_bs);grid on;
相关推荐: