当前位置:首页 > 语音信号滤波去噪 - 使用汉宁窗设计的FIR滤波器
《语音信号滤波去噪——使用汉宁窗设计的FIR滤波器》 第9页 共23页
3.3 语音加噪处理
采集完成后在信号中加入一个单频噪声,设计的任务即为从含噪信号中滤除单频噪声,还原原始信号。所以我们首先对采集来的信号进行加噪处理,调用的程序如下:
[x,fs,bits]=wavread('d:\\luo.wav');
% 输入参数为文件的全路径和文件名,输出的第一个参数是每个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。 sound(x,fs,bits);
% 按指定的采样率和每样本编码位数回放 N=length(x); % 计算信号x的长度 fn=1700; % 单频噪声频率 t=0:1/fs:(N-1)/fs;
% 计算时间范围,样本数除以采样频率 y=x'+0.01*sin(fn*2*pi*t);
% 加入一个单频噪声
sound(y,fs,bits);
% 应该可以明显听出有尖锐的单频啸叫声
对语音信号加入单频噪声前后的波形进行分析,首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。调用的程序如下:
X=abs(fft(x)); Y=abs(fft(y)); % 对原始信号和加噪信号进行fft变换 X=X(1:N/2); Y=Y(1:N/2); % 截取前半部分 deltaf=fs/ N; % 计算频谱的谱线间隔
f=0:deltaf:fs/2-deltaf; % 计算频谱频率范围
《语音信号滤波去噪——使用汉宁窗设计的FIR滤波器》 第10页 共23页 用绘图命令分别画出加噪前后信号的时域和频域波形,如下图3-4所示:
图3-4 语音信号加入单频噪声前后的时域和频域波形图
由上图3-4我们可以看到语音信号加入单频噪声后的时域波形比未加之前在幅度范围内有了明显的增加,在频谱方面我们可以看到除了在加了噪声后的频谱图上的1700hz有个明显的冲激外,其余地方与未加时的频谱一模一样,这现象表现在语音播放时我们可以听到一声尖锐的噪声。
3.4 滤波器设计
在Matlab中,可以利用矩形窗、三角窗、汉宁窗、汉明窗、布莱克曼窗、凯塞窗等设计FIR滤波器,在本次课程设计中主要应用汉宁窗设计出FIR滤波器。利用Matlab中的函数freqz画出各滤波器的频率响应,首先利用数字信号处理里面学过的知识,根据自己选定的参数,用汉宁窗函数法设计FIR数字滤波器,得到数字滤波器的参数b,a。其中b为系统函数的分子系数,a为系统函数分母系数。再调用freqz(b,a,512,fs)即可得到该滤波器的频率响应。
主程序如下:
fpd=1600;fsd=1650;fsu=1750;fpu=1800; % FIR滤波器的上下截止频率 Rp=1;As=37;
《语音信号滤波去噪——使用汉宁窗设计的FIR滤波器》 第11页 共23页 % 带阻滤波器设计指标 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.2*pi/dw)+1;
% 计算汉宁窗设计该滤波器时需要的阶数 n=0:M-1; % 定义时间范围 w_ham=hanning(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); % 调用自编函数计算滤波器的频率特性
通过绘图工具我们可以得出滤波器的波形图,如下图3-5所示:
《语音信号滤波去噪——使用汉宁窗设计的FIR滤波器》 第12页 共23页
图3-5 FIR滤波器的频率响应
上图3-5为用汉宁窗函数法设计出的FIR滤波器图,我们可以看出,阻带最大衰减为-75dB,FIR滤波器的主瓣宽度很小,这样可以使过渡带很陡,旁瓣相对于主瓣也比较小。
3.5 信号滤波处理
用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波,对语音信号进行滤波后,仔细对比滤波前和滤波后的语音信号图,得出结论。主程序如下:
y_fil=filter(h_bs,1,y);
% 用设计好的滤波器对y进行滤波 Y_fil=fft(y_fil);Y_fil=Y_fil(1:N/2); % 计算频谱取前一半
由绘图工具我们可以得出滤波后的语音信号波形图、原始语音信号的波形图以及加入噪声后的语音信号波形图,图如下3-6所示:
共分享92篇相关文档