数字信号处理的课程设计数字滤波器的设计歌曲中的人声抑制.docx
- 文档编号:4093262
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:17
- 大小:623.29KB
数字信号处理的课程设计数字滤波器的设计歌曲中的人声抑制.docx
《数字信号处理的课程设计数字滤波器的设计歌曲中的人声抑制.docx》由会员分享,可在线阅读,更多相关《数字信号处理的课程设计数字滤波器的设计歌曲中的人声抑制.docx(17页珍藏版)》请在冰豆网上搜索。
数字信号处理的课程设计数字滤波器的设计歌曲中的人声抑制
实验报告
数字滤波器的设计
课程名称数字信号处理
题目名称_歌曲中的人声抑制
学生学院
专业班级
学号
学生姓名
指导教师
2012年7月1日
广东工业大学课程设计任务书
题目名称
歌曲中的人声抑制
学生学院
专业班级
姓名
学号
一、课程设计的内容
运用数字信号处理的理论知识进行频谱分析和滤波器设计。
先通过理论分析和推导设计出符合技术指标要求的数字滤波器,并推断出相应的结论;再利用MATLAB或C/C++作为编程工具进行数字滤波的计算机实现。
二、课程设计的要求与数据
1.选择一段带有演唱人声的高保真歌曲文件,利用某种格式转换软件将其转换为单声道的.wav文件,并记录下采样频率等参数。
用MATLAB或C/C++编程显示出该.wav文件的时域波形图和频谱图。
2.针对FIR和IIR数字滤波器,各选择一种,根据以下给定的技术指标设计数字滤波器得出滤波器系数(给出理论计算过程)。
并显示出各滤波器的频率响应。
滤波器技术指标类型:
带阻滤波器
3dB截止频率:
fc1=500Hz,fc2=2700Hz
通带内幅频响应波纹起伏:
<2dB
阻带截止频率:
fs1=650Hz,fs2=1900Hz
阻带内幅频响应衰减:
<-20dB
3.用自己设计的滤波器对以上.wav文件进行滤波,显示出滤波后信号的时域波形图和频谱图,并从主观听觉和客观数据上对滤波前后的信号进行对比,分析信号的变化。
三、课程设计应完成的工作
运用数字信号处理的理论知识进行频谱分析和滤波器设计。
先通过理论分析和推导设计出符合技术指标要求的数字滤波器,并推断出相应的结论;再利用MATLAB或C/C++作为编程工具进行数字滤波的计算机实现。
四、应收集的资料及主要参考文献
1、赵健,李勇,数字信号处理,清华大学出版社,北京,2010
发出任务书日期:
2012年6月12日指导教师签名:
计划完成日期:
2012年7月1日基层教学单位责任人签章:
主管院长签章:
1.实验目的与要求——————————————————————————————5
2.实验方案———————————————————————————————5
3.实验结果及数据处理————————————————————————————20
4.结论—————————————————————————————————23
5.问题与讨论——————————————————————————————23
参考文献—————————————————————————————————24
附录———————————————————————————————————24
一、实验目的与要求
1.实验目的
高保真歌曲可涵盖20-20000Hz频率范围,而其中的演唱人声的人耳敏感内容则只占一部分中间频段。
我们可以利用带阻滤波器来对歌曲中的演唱人声加以抑制,从而获得一个伴唱版的歌曲。
本实验综合运用数字信号处理的理论知识进行频谱分析和滤波器设计。
先通过理论分析和推导设计出符合技术指标要求的数字滤波器,并推断出相应的结论;再利用MATLAB或C/C++作为编程工具进行数字滤波的计算机实现。
1)掌握数字信号处理的基本概念、基本理论和基本方法;
2)掌握用MATLAB或C/C++设计FIR和IIR数字滤波器的方法;
3)实现对一个音频信号进行数字滤波的完整过程。
2.实验要求
1.选择一段带有演唱人声的高保真歌曲文件,利用某种格式转换软件将其转换为单声道的.wav文件,并记录下采样频率等参数。
用MATLAB或C/C++编程显示出该.wav文件的时域波形图和频谱图。
2.针对FIR和IIR数字滤波器,各选择一种,根据以下给定的技术指标设计数字滤波器得出滤波器系数(给出理论计算过程)。
并显示出各滤波器的频率响应。
滤波器技术指标类型:
带阻滤波器
3dB截止频率:
fc1=500Hz,fc2=2700Hz
通带内幅频响应波纹起伏:
<2dB
阻带截止频率:
fs1=650Hz,fs2=1900Hz
阻带内幅频响应衰减:
<-20dB
3.用自己设计的滤波器对以上.wav文件进行滤波,显示出滤波后信号的时域波形图和频谱图,并从主观听觉和客观数据上对滤波前后的信号进行对比,分析信号的变化。
二、实验方案
1.转换格式。
2.Matlab的功能十分强大,已经为我们提供了很多设计滤波器的函数。
下面列举一些下面需要用到的函数。
(一)。
语音的录入与打开:
1 [y,fs,bits]=wavread('Blip',[N1N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。
[N1N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值)。
2 sound(x,fs,bits);用于对声音的回放。
向量y则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
3 函数FFT用于序列快速傅立叶变换。
函数的一种调用格式为y=fft(x)
其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT。
且和x相同长度。
若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
4 函数abs(x)用于计算复向量x的幅值,函数angle(x)用于计算复向量的相角,介于和之间,以弧度表示。
(二)、滤波器设计:
1、相关原理:
设计数字滤波器的任务就是寻求一个因果稳定的线性时不变系统,并使系统函数H(z)具有指定的频率特性。
数字滤波器从实现的网络结构或者从单位冲激响应分类,可以分成无限长单位冲激响应(IIR)数字滤波器和有限长单位冲激响应(FIR)数字滤波器。
数字滤波器频率响应的三个参数:
(1)幅度平方响应:
(2)相位响应
(3)群时延响应
IIR数字滤波器:
IIR数字滤波器的系统函数为的有理分数,即
IIR数字滤波器的逼近问题就是求解滤波器的系数和,使得在规定的物理意义上逼近所要求的特性的问题。
如果是在s平面上逼近,就得到模拟滤波器,如果是在z平面上逼近,则得到数字滤波器。
FIR数字滤波器:
设FIR的单位脉冲响应h(n)为实数,长度为N,则其z变换和频率响应分别为
按频域采样定理FIR数字滤波器的传输函数H(z)和单位脉冲响应h(n)可由它的N个频域采样值H(k)唯一确定。
MATLAB中提供了几个函数,分别用于实现IIR滤波器和FIR滤波器。
(1)卷积函数conv
卷积函数conv的调用格式为c=conv(a,b)
该格式可以计算两向量a和b的卷积,可以直接用于对有限长信号采用FIR滤波器的滤波。
(2)函数filter
函数filter的调用格式为y=filter(b,a,x)
该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。
其中向量b和a分别表示系统函数的分子、分母多项式的系数,若a=1,此时表示FIR滤波器,否则就是IIR滤波器。
该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放入向量y。
(3)函数fftfilt
函数fftfilt的调用格式为y=fftfilt(b,x)
该格式是利用基于FFT的重叠相加法对数据进行滤波,这种频域滤波技术只对FIR滤波器有效。
该函数是通过向量b描述的滤波器对x数据进行滤波。
(4)关于用butter函数求系统函数分子与分母系数的几种形式。
[b,a]=butter(N,wc,'high'):
设计N阶高通滤波器,wc为它的3dB边缘频率,以为单位,故。
[b,a]=butter(N,wc):
当wc为具有两个元素的矢量wc=[w1,w2]时,它设计2N阶带通滤波器,3dB通带为,w的单位为。
[b,a]=butter(N,wc,'stop'):
若wc=[w1,w2],则它设计2N阶带阻滤波器,3dB通带为,w的单位为。
如果在这个函数输入变元的最后,加一个变元“s”,表示设计的是模拟滤波器。
这里不作讨论。
为了设计任意的选项巴特沃斯滤波器,必须知道阶数N和3dB边缘频率矢量wc。
这可以直接利用信号处理工具箱中的buttord函数来计算。
如果已知滤波器指标,,和,则调用格式为
[N,wc]=buttord(wp,ws,Rp,As)
对于不同类型的滤波器,参数wp和ws有一些限制:
对于低通滤波器,wp (5)窗函数滤波器,即FIR有限冲激相应滤波器,这样取得: b=fir1(n,Wn,'stop'),n是一个合适的阶数,适当选取,要求不高,Wn上面取得了,stop表示带阻。 y=filter2(b,x) x为滤波器输入,y即输出。 (6) Bartlett函数: 生成巴特利特窗 n=51; window=bartlett(n); [h,w]=freqz(window,1); subplot(1,2,1) stem(window); subplot(1,2,2); plot(w/pi,20*log(abs(h)/abs(h (1)))); 3.记录下采样频率等参数。 用MATLAB或C/C++编程显示出该.wav文件的时域波形图和频谱图。 [x,fs,bits]=wavread('slowsoul.wav',[10245120]); sound(x,fs,bits); X=fft(x,44100); magX=abs(X); angX=angle(X); subplot(221);plot(x);title('原始信号波形'); subplot(222);plot(X);title('原始信号频谱'); subplot(223);plot(magX);title('原始信号幅值'); subplot(224);plot(angX);title('原始信号相位'); 原始信号波形记录: 采样频率为: 44100HZ 4.进行IIR滤波器的设计。 MATLAB强大的功能已经具备IIR设计的函数,所以我们可以直接调用得出滤波器的各种参数及结果。 首先确定IIR滤波器的频率响应: [x,fs,nbits]=wavread('slowsoul.wav'); fp1=500;%通带频率 fp2=2700;%通带频率 fc1=650;%阻带频率 fc2=1900;%阻带频率 wp1=2*fp1/fs;%采样频率归一化的通带角频率 ws1=2*fc1/fs;%采样频率归一化的阻带角频率 wp2=2*fp2/fs;%采样频率归一化的通带角频率 ws2=2*fc2/fs;%采样频率归一化的阻带角频率 wp=[wp1,wp2]; ws=[ws1,ws2]; rp=2;%通带波动系数 rs=20;%阻带波动系数 [n,wc]=buttord(wp,ws,rp,rs);%求巴特沃兹滤波器的系数及3db截止频率 [b,a]=butter(n,wc,'stop');%计算滤波器系数 [h,f]=freqz(b,a,2*fs,fs); mag=abs(h); ph=angle(h); ph=ph*180/pi; subplot(2,1,1); plot(f,mag); gridon; xlabel('频率(Hz)'); ylabel('幅频特性'); subplot(2,1,2); plot(f,ph); gridon; xlabel('频率(Hz)'); ylabel('相频特性'); 结果: 接着进行滤波,观察滤波后波形。 代码: [x,fs,nbits]=wavread('slowsoul.wav'); fp1=500;%通带频率 fp2=2700;%通带频率 fc1=650;%阻带频率 fc2=1900;%阻带频率 wp1=2*fp1/fs;%采样频率归一化的通带角频率 ws1=2*fc1/fs;%采样频率归一化的阻带角频率 wp2=2*fp2/fs;%采样频率归一化的通带角频率 ws2=2*fc2/fs;%采样频率归一化的阻带角频率 wp=[wp1,wp2]; ws=[ws1,ws2]; rp=2;%通带波动系数 rs=20;%阻带波动系数 [n,wc]=buttord(wp,ws,rp,rs);%求巴特沃兹滤波器的系数及3db截止频率 [b,a]=butter(n,wc,'stop');%计算滤波器系数 y=filter(b,a,x); Y=fft(y); magY=abs(Y); angY=angle(Y); subplot(221);plot(y);title('IIR滤波后信号的波形'); subplot(222);plot(Y);title('IIR滤波后信号的频谱'); subplot(223);plot(magY);title('IIR滤波后信号的幅值'); subplot(224);plot(angY);title('IIR滤波后信号的相位'); 结果: 5.进行FIR滤波器的设计。 该设计使用窗函数法,MATLAB中也已经包含了窗口函数的功能,根据参数,查表后选用三角窗。 可以直接调用,具体使用方法看看实验方案。 首先确定FIR频率响应: 代码: [x,fs,nbits]=wavread('slowsoul.wav'); fp1=500;%通带频率 fp2=2700;%通带频率 fc1=650;%阻带频率 fc2=1900;%阻带频率 wp1=2*fp1/fs;%采样频率归一化的通带角频率 ws1=2*fc1/fs;%采样频率归一化的阻带角频率 wp2=2*fp2/fs;%采样频率归一化的通带角频率 ws2=2*fc2/fs;%采样频率归一化的阻带角频率 wp=[wp1,wp2]; ws=[ws1,ws2]; rp=2;%通带波动系数 rs=20;%阻带波动系数 wc=(wp+ws)/2; N=51; n=0: N-1; window=bartlett(N); [h1,w]=freqz(window,1) subplot(2,2,1) stem(window,'.'); xlabel('n'); title('bartlett(窗函数'); subplot(2,2,2) plot(w/pi,20*log(abs(h1)/abs(h1 (1)))); grid; xlabel('w/pi'); ylabel('幅度(dB)'); title('bartlett窗函数的频谱'); hn=fir1(N-1,wc,'stop'); [h2,w]=freqz(hn,1,512); subplot(2,2,3) stem(n,hn,'.'); xlabel('n'); ylabel('h(n)'); title('bartlett窗函数的单位脉冲响应'); subplot(2,2,4) plot(w/pi,20*log(abs(h2)/abs(h2 (1)))); grid; xlabel('w/pi'); ylabel('幅度(dB)'); title('bartlett带阻滤波器的幅度特性'); 接着进行滤波,观察滤波后结果: 代码: [x,fs,nbits]=wavread('slowsoul.wav'); fp1=500;%通带频率 fp2=2700;%通带频率 fc1=650;%阻带频率 fc2=1900;%阻带频率 wp1=2*fp1/fs;%采样频率归一化的通带角频率 ws1=2*fc1/fs;%采样频率归一化的阻带角频率 wp2=2*fp2/fs;%采样频率归一化的通带角频率 ws2=2*fc2/fs;%采样频率归一化的阻带角频率 wp=[wp1,wp2]; ws=[ws1,ws2]; rp=2;%通带波动系数 rs=20;%阻带波动系数 wc=(wp+ws)/2; N=6; n=N-1; window=bartlett(N); c=fir1(n,wc,bartlett(N));%窗函数调用 z=filter2(c,x); Z=fft(z); magZ=abs(Z); angZ=angle(Z); subplot(221);plot(z);title('FIR滤波后信号的波形'); subplot(2,2,2);plot(Z);title('FIR滤波后信号的频谱'); subplot(2,2,3);plot(magZ);title('FIR滤波后信号的幅值'); subplot(2,2,4);plot(angZ);title('FIR滤波后信号的相位'); 结果: 提高阶次后: N=51; 三、实验结果和数据处理 如上面实验步骤中的图。 四、结论 1.从滤波前后的波形信号可以看出,原信号经过IIR滤波器或者FIR滤波器后确实过滤掉了一部份的信号。 2.由IIR和FIR的相位频谱可以看出,原信号经过IIR滤波后,相位频谱发生了混叠的现象,这容易使信号产生失真,而经过FIR滤波后不会发生此现象。 3.经过再一次实验,FIR提高阶次后,滤波后的频谱图效果更好,由此可以知道再相同频率特性情况下,FIR数字滤波器阶次比较高。 五、问题与讨论 1.IIR数字滤波器得主要优点是在满足一定技术要求和频幅响应的情况下,IIR数字滤波器设计成为具有递归运算的环节,所以它的阶次一般比FIR数字滤波器低,所用的存储单元少,滤波器体积也小,而FIR所需要的存储单元多,从而提高了硬件设计成本。 2.IIR数字滤波器只能设计出有限频段的低,高,带通和带阻等选平频滤波器,但它的相频特性往往是非线性的,会使信号产生失真,而FIR可以设计出线性相位的FIR数字滤波器,从而保证信号在传输过程中不会产生失真。 3.从以可以看出,IIR和FIR各有所长,所以在实际应用时应该从多方面考虑,例如,在对于相位要求不敏感的场合,如一些检测信号,语音通信等,可以选用IIR,这样可以充分发挥其经济高效的特点;而对于图像处理,数据传输等以波形携带信息的系统,测对线性相位要求高,这时应该采用FIR。 4.从本次实验中,再次感受到了MATLAB对于信号处理的强大的功能与方便,它为我们信号处理提供了非常多有用的函数,为我们省去了很多设计过程中复杂的过程。 在设计滤波器得过程中,还是遇到了非常多的问题,例如同样使用窗口法来设计FIR数字滤波器时,有很多实现的方法,fir1()的函数用法非常多样,所以必须上网搜寻它的用法或者使用MATLAB的HELP指令进行学习使用。 5.在实验的过程中,加深了对MATLAB认识和了解,也对课程有了充分的了解和认识。 学跟用要相结合在一起。 参考文献 1、赵健,李勇,数字信号处理,清华大学出版社,北京,2010 附录 无
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 课程设计 数字滤波器 设计 歌曲 中的 人声 抑制