利用脉冲响应不变法设计切比雪夫I型IIR滤波器.docx
《利用脉冲响应不变法设计切比雪夫I型IIR滤波器.docx》由会员分享,可在线阅读,更多相关《利用脉冲响应不变法设计切比雪夫I型IIR滤波器.docx(18页珍藏版)》请在冰点文库上搜索。
利用脉冲响应不变法设计切比雪夫I型IIR滤波器
语音信号滤波去噪
—脉冲响应不变法设计的并联型切比雪夫I型滤波器
学生姓名:
指导教师:
摘要本课程设计要紧内容是利用脉冲响应不变法设计的并联型切比雪夫I型IIR滤波器,对一段含噪语音信号进行滤波去噪处置并依照滤波前后的波形和频谱分析滤波性能。
本课程设计仿真平台为,开发工具是M语言编程。
第一利用录音工具录制一段语音信号,并人为加入一单频噪声,然后对信号进行频谱分析以确信所加噪声频率,并设计滤波器进行滤波去噪处置,最后比较滤波前后的波形和频谱并进行分析。
由分析结果可知,滤波器后的语音信号与原始信号大体一致,即设计的切比雪夫I型IIR滤波器能够去除信号中所加单频噪声,达到了设计目的。
关键词滤波去噪;脉冲响应不变法;切比雪夫I型;IIR滤波器;MATLAB
1引言
本课程设计要紧解决在含噪情形下对语音信号的滤波去噪处置,处置时采纳的是利用脉冲响应不变法设计的切比雪夫I型IIR滤波器。
课程设计目的
(1)熟悉利用MATLAB语言来解决一些简单的课程问题。
(2)锻炼动手能力及独立试探并解决问题的能力
(3)增加对书本知识的明白得和把握,如:
IIR滤波器的工作原理,切比雪夫滤波器的设计,脉冲响应法的应用等等;
(4)对录制好的音频行加噪和过滤,比较前后语音转变;
课程设计内容
(1)利用录音软件;录制一段语音信号,要求为PCM编码格式单声道8K8位7k/s的语音信号,绘制波形并观看频谱特点;
(2)加上噪声并绘制加噪信号波形及观看其频谱特点;
(3)设计滤波器,绘制出滤波器的频谱并查验滤波器是不是合格;
(4)最后利用设计好的滤波器对噪声信号进项过滤,绘制过滤后的波形及观看滤波前后频谱转变;
(5)绘制滤波器的并联型结构图;
2设计原理
录制一段语音信号,绘制波形并观看其频谱,给定相应技术指标,用脉冲响应不变法设计的一个知足指标的切比雪夫I型IIR滤波器,对该语音信号进行滤波去噪处置,比较滤波前后的波形和频谱并进行分析。
IIR滤波器
IIR滤波器具有无穷长脉冲响应,一样来讲,所有的模拟滤波器都有无穷长脉冲响应。
因此,IIR滤波器设计的大体方式是利用复值映射将大伙儿熟知的模拟滤波器变换为数字滤波器。
这种IIR滤波器设计的大体方式存在途径之一[2]如下:
实行滤波器变换S→Z
实行频带变换
S→S
设计模拟低通滤波器
期望的IIR滤波器
切比雪夫I型滤波器
切比雪夫I型滤波器是电子滤波器的一种。
它的特点是在通带具有等波纹响应。
其振幅平方函数如2-1式所示:
(2-1)
式中,N为整数,称为滤波器的阶,ε是通带波纹因子(它与Rp有关)。
其中N阶切比雪夫多项式如2-2式所示:
(2-2)
其中
切比雪夫滤波器存在两种可能的幅度平方响应的形状,当N别离为基数和偶数时如图2-1所示:
图2-2切比雪夫I型滤波器的幅度特性
脉冲响应不变法
脉冲响应不变法是一种将模拟滤波器转化为数字滤波器的大体方式。
它通过对模拟滤波器的单位冲激响应h(t)等距离抽样来获取对应数字滤波器的单位脉冲响应h[k],即h[k]=h(t)|t=kT=h(kT),其中T是等距离抽样。
不失一样性地,假定持续时刻滤波器的系统函数为:
(2-3)
所对应的时域脉冲响应是:
(2-4)
对Tdhc(t)采样取得的离散时刻滤波器的脉冲响应是:
(2-5)
离散时刻滤波器的系统函数为:
(2-6)
3设计步骤
语音信号滤波去噪——利用脉冲响应不变法设计的并联型切比雪夫IIR滤波器,设计流程如以下图:
图3-1步骤图
录制语音信号
利用录音软件(如以下图3-2)录制PCM编码格式单声道8K8位7k/s的语音信号,语音内容不限;
图3-2录制语音信号软件界面
绘制语音信号波形图
利用MATLAB软件,将语音信号放到MATLAB的工作目录中;利用[x,]=wavread(‘’)函数读入语音信号;
源程序如下:
[x,fs,bits]=wavread('');%输入参数为文件的全途径和文件名,输出的第一个参数是每一个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
sound(x,fs,bits);%按指定的采样率和每样本编码位数回放
N=length(x);%计算信号x的长度
t=0:
1/fs:
(N-1)/fs;%计算时刻范围,样本数除以采样频率
x=x';X=abs(fft(x));%对原始信号和加噪信号进行fft变换,取幅度谱
X=X(1:
N/2);%截取前半部份
deltaf=fs/N;%计算频谱的谱线距离
f=0:
deltaf:
fs/2-deltaf;%计算频谱频率范围
绘制的波形图如下:
图3-3原始语音信号的频谱图
绘制加噪后信号波形图
在原始语音信号上加入单频干扰信号,fn=3000Hz,其源程序如下:
[x,fs,bits]=wavread('');%输入参数为文件的全途径和文件名,输出的第一个参数是每一个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
sound(x,fs,bits);%按指定的采样率和每样本编码位数回放
N=length(x);%计算信号x的长度
fn=2000;%单频噪声频率,此参数可改
t=0:
1/fs:
(N-1)/fs;%计算时刻范围,样本数除以采样频率
x=x';y=x+*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;%计算频谱频率范围
绘制的频谱波形如以下图3-4:
通过频谱图能够直观的看到,在3000Hz处有尖锐的单峰,与干扰频率一直;通过sound(y,fs,bits)回放该录音,能够明显的听到尖锐的单频噪鸣声;
图3-4加入噪声后的频谱对照图
滤波器设计
将数字滤波器的设计指标设为通带截止频率fn=3000,fp=fn-200=2800Hz,阻带频率fc=fn-50=2950HZ,通带波纹Rp=1,阻带波纹As=16dB;
滤波器设计源程序如下:
fs=8000;fn=3000;fp=fn-200;fc=fn-50;%概念通带和阻带截止频率
Rp=1;As=16;%概念通带波纹和阻带衰减
wp=(fp/fs)*2*pi;ws=(fc/fs)*2*pi;%计算对应的数字频率
T=1;%概念采样距离
OmegaP=wp/T;OmegaS=ws/T;%截止频率线性变换
Ripple=10^(-Rp/20);Attn=10^(-As/20);%转化为绝对形式
[cs,ds]=afd_chb1(OmegaP,OmegaS,Rp,As);%计算滤波器阶数和截止频率
[b,a]=imp_invr(cs,ds,T);%脉冲响应不变法取得滤波器系统函数分子分母系数
[db,mag,pha,grd,w]=freqz_m(b,a);%验证滤波器是不是达到指定性能
delta=[1,zeros(1,99)];ha=filter(b,a,delta);%计算脉冲响应
运行程序取得的滤波器响应图如下:
图3-5滤波器响应图
在命令行别离输入wp/pi,ws/pi验证滤波器是不是知足设计标准:
>>wp/pi
ans=
>>ws/pi
ans=
对噪声信号进行滤波,观看前后频谱转变
利用设计好的滤波器对噪声信号进行过滤,其源程序如下:
y_fil=filter(b,a,y);%IIR滤波器对信号y进行滤波处置,其中b,a为上面设计好的滤波器参数。
Y_fil=abs(fft(y_fil));%对fft变换,取幅度谱
Y_fil=Y_fil(1:
N/2);%截取前半部份
sound(y_fil,fs,bits);
程序运行结果如以下图:
图3-6语音信号频谱分析图
由图3-6能够看出频率>3000Hz被过滤掉,3000Hz处的单频尖峰噪声幅度明显减弱,利用sound(y_fil,fs,bits)函数播放过滤后的语音,能够听出过滤前后的语音转变,说明滤波器设计大体符合性能要求。
绘制滤波器的并联型结构图
设计完成滤波器后在窗体命令行输入[C,B,A]=dir2par(b,a)能够得出并联型结构的系数CBA,如以下图所示:
图3-7并联型结构系数图
依照并联型结构系数和滤波器阶数能够画出滤波器的结构图如下:
图3-8滤波器并联型结构图
4异样处置
(1)录制语音信号的时候不了解音频的编码方式的区别,因此最初录制的语音信号不能知足课设要求,后来利用步骤中的录音软件解决了问题。
(2)由于对MATLAB利用能力有限,在语音信号加噪时出了错,频谱图中没有显现单频噪声尖峰;然后通过网上搜索资料,并在同窗的帮忙下成功的显示了正确的频谱图;
(3)在利用脉冲响应不变法设计切比雪夫滤波器时得不到理想的滤波器,把通带截止频率与阻带截止频率之间的差值设置的过小或太大,通过适当的调整参数,绘制出来的图像成效比较明显,大体符合设计指标。
通过不断调整As,最后取As=16dB,如此通过MATLAB运算出来的滤波器的阻带波纹达到要求;
(4)在设计切比雪夫I型IIR滤波器进程中,程序运行报错:
Undefinedcommand/’afd_chb1’,刚开始不明白怎么回事儿,后来教师告知我此错误的缘故在于没有将自编挪用函数放进MATLAB的函数挪用库中,将挪用函数’afd_chb1’编写放入MATLAB的work文件夹后,问题就解决了;
5终止语
课程设计的尘嚣渐渐远去,怀着些许不舍,怀着对当初课程设计开始时候的豪情万丈的决心的迷恋,怀着通过这次课程设计积存的信心与斗志,我开始写下了这份终止语,为自己的足迹留下哪怕是微乎其微可是对自己弥足宝贵的痕迹并期望与大伙儿共勉。
这次课程设计给我留下了太多经历深刻的东西,学到了很多讲义上学不到的知识。
第一,我能够运用MATLAB,数字信号处置教程等学科所学的知识,并结合网络,图书馆搜集到的各类各样的材料,进行分析,比较,取舍,对讲义知识有了一个深切的了解,这对我的学业生涯是大有裨益的。
第二,这次课程设计使我有了一次通过理论联系实际,来解决实际问题的经历,它培育了自己分析问题,解决问题的能力,和上网检索信息的能力;而且在和同窗或教师的交流中我体会到了团队的意义,和探讨未知学问的乐趣。
其实学到的知识实际上是次要的,重要的是咱们探讨知识的进程,那个进程即是一个人自主学习能力的表现,它将阻碍着我尔后的进展。
最后,这次的课程设计也激发了我对通行工程本专业的爱好。
曾经我对咱们通信工程专业是一片迷茫,可是通过这次课程设计,通过亲自体验语音信号的加噪过滤进程,我似乎隐约了解了一些咱们同形词专业的以后的进展方向。
这种感悟,这种爱好的来源只靠平常上课教师的说教是确信不可能领会到的。
参考文献
[1]程佩青.数字信号处置教程[M].北京:
清华大学出版社,2021
[2](美)维纳·K·英格尔,(美)约翰·G·普罗克斯(著).刘树棠(译).数字信号处置(MATLAB版).第2版.西安:
西安交通大学出版社,2020
[3]张威.MATLAB基础与编程入门[M].西安:
西安电子科技大学出版社2020
附录1:
语音信号滤波去噪设计源程序清单
%程序名称:
%程序功能:
语音信号去噪——利用脉冲响应不变法设计并联型切比雪夫I型滤波器
%程序作者:
%最后修改日期:
[x,fs,bits]=wavread('');%输入参数为文件的全途径和文件名,输出的第一
个参数是每一个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的
编码位数。
sound(x,fs,bits);%按指定的采样率和每样本编码位数回放
N=length(x);%计算信号x的长度
fn=2000;%单频噪声频率,此参数可改
t=0:
1/fs:
(N-1)/fs;%计算时刻范围,样本数除以采样频率
x=x';y=x+*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;%计算频谱频率范围
subplot(2,2,1);plot(t,x);title('原始信号');xlabel('时刻/s');
ylabel('幅度');axis([0,,-1,1]);gridon
subplot(2,2,2);plot(f,X);title('语音信号幅度谱');
xlabel('频率,单位/Hz');ylabel('幅度谱');gridon
subplot(2,2,3);plot(t,y);title('加入一个单频信号的语音信号');
xlabel('时刻,单位/s');ylabel('幅度');axis([0,,,]);gridon
subplot(2,2,4);plot(f,Y);title('加入一个单频信号的语音信号幅度谱');
xlabel('频率,单位/Hz');ylabel('幅度谱');axis([0,4000,0,800]);gridon
fs=8000;fn=3000;
fp=fn-200;fc=fn-50;%概念通带和阻带截止频率
Rp=1;As=16;%概念通带波纹和阻带衰减
wp=fp/fs*2*pi;ws=fc/fs*2*pi;%计算对应的数字频率
T=1;%概念采样距离
OmegaP=wp/T;OmegaS=ws/T;%截止频率线性变换
Ripple=10^(-Rp/20);Attn=10^(-As/20);%转化为绝对形式
[cs,ds]=afd_chb1(OmegaP,OmegaS,Rp,As);%计算滤波器阶数和截止频率
[b,a]=imp_invr(cs,ds,T);%脉冲响应不变法取得数字滤波器系统函数分子分母系数
[db,mag,pha,grd,w]=freqz_m(b,a);%验证滤波器是不是达到指定性能
delta=[1,zeros(1,99)];ha=filter(b,a,delta);%计算脉冲响应
Subplot(221);plot(w/pi,db)%画出滤波器的幅度响应图
xlabel('w/pi');ylabel('dB');title('滤波器幅度响应图')
Subplot(222);plot(w/pi,mag)%画出滤波器幅度响应图
xlabel('w/pi');ylabel('幅度mag');title('滤波器幅度响应')
Subplot(223);plot(w/pi,pha)%画出滤波器的相位响应图
xlabel('w/pi');ylabel('相位pha');title('滤波器相位响应')
Subplot(224);plot(ha)%画出滤波器的脉冲响应图
xlabel('n');ylabel('h(n)');
title('滤波器脉冲响应')
y_fil=filter(b,a,y);%IIR滤波器对信号y进行滤波处置,其中b,a为上面设计好的滤波器参数。
Y_fil=abs(fft(y_fil));%对fft变换,取幅度谱
Y_fil=Y_fil(1:
N/2);%截取前半部份
figure;
subplot(3,2,1);plot(t,x);xlabel('时刻t');ylabel('幅度');
title('原始语音信号');axis([0,,-1,1]);gridon;
subplot(3,2,2);plot(f,X);xlabel('频率f');ylabel('幅度');
title('原始语音信号幅度谱');axis([0,4000,0,300]);gridon;
subplot(3,2,3);plot(t,y);xlabel('时刻t');ylabel('幅度');
title('加干扰后的语音信号');axis([0,,-1,1]);gridon;
subplot(3,2,4);plot(f,Y);xlabel('频率f');ylabel('幅度');
title('加干扰后的语音信号幅度谱');axis([0,4000,0,300]);gridon;
subplot(3,2,5);plot(t,y_fil);xlabel('时刻t');ylabel('幅度');
title('滤波后语音信号时刻y');axis([0,,-1,1]);gridon;
subplot(3,2,6);plot(f,Y_fil);xlabel('频率f');ylabel('幅度');
title('滤波后语音信号幅度谱Y');axis([0,4000,0,300]);gridon;
sound(y_fil,fs,bits);
[C,B,A]=dir2par(b,a)