三,滤波器设计:

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数据进行滤波。

关于用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有一些限制:对于低通滤波器,wpws;对于带通滤波器,wp和ws分别为具有两个元素的矢量,wp=[wp1,wp2]和ws=[ws1,ws2],并且 ws1

2、设计内容:

(1)滤波器示例:

在这里为了说明如何用MATLAB来实现滤波,特举出一个简单的函数信号滤波实例(对信号x(n)=sin( n/4)+5cos( n/2)进行滤波,信号长度为500点),从中了解滤波的实现过程。程序如下:

Wn=0.2*pi;

N=5;

[b,a]=butter(N,Wn/pi);

n=0:499;

x=sin(pi*n/4)+5*cos(pi*n/2);

X=fft(x,4096);

subplot(221);plot(x);title('滤波前信号的波形');

subplot(222);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y,4096);

subplot(223);plot(y);title('滤波后信号的波形');

subplot(224);plot(Y);title('滤波后信号的频谱');

在这里,是采用了butter命令,设计出一个巴特沃斯低通滤波器,从频谱图中可以很明显的看出来。下面,也就是本课题的主要内容,也都是运用到了butter函数,以便容易的得到系统函数的分子与分母系数,最终以此来实现信号的滤波。

(2)N阶高通滤波器的设计(在这里,以5阶为例,其中wc为其3dB边缘频率,以 为单位),程序设计如下:

x=wavread('ding.wav');

sound(x);

N=5;wc=0.3;

[b,a]=butter(N,wc,'high');

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326);plot(Z);title('FIR滤波后信号的频谱');

得到结果如图:

(3)N阶低通滤波器的设计(在这里,同样以5阶为例,其中wc为其3dB边缘频率,以 为单位),程序设计如下:

x=wavread('ding.wav');

sound(x);

N=5;wc=0.3;

[b,a]=butter(N,wc);

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326);plot(Z);title('FIR滤波后信号的频谱');

得到结果如图:

(4)2N阶带通滤波器的设计(在这里,以10阶为例,其中wc为其3dB边缘频率,以 为单位,wc=[w1,w2],w1 wc w2),程序设计如下:

x=wavread('ding.wav');

sound(x);

N=5;wc=[0.3,0.6];

[b,a]=butter(N,wc);

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326);plot(Z);title('FIR滤波后信号的频谱');

得到结果如图:

(5)2N阶带阻滤波器的设计(在这里,以10阶为例,其中wc为其3dB边缘频率,以 为单位,wc=[w1,w2],w1 wc w2),程序设计如下:

x=wavread('ding.wav');

sound(x);

N=5;wc=[0.2,0.7];

[b,a]=butter(N,wc,'stop');

X=fft(x);

subplot(321);plot(x);title('滤波前信号的波形');

subplot(322);plot(X);title('滤波前信号的频谱');

y=filter(b,a,x);

Y=fft(y);

subplot(323);plot(y);title('IIR滤波后信号的波形');

subplot(324);plot(Y);title('IIR滤波后信号的频谱');

z=fftfilt(b,x);

Z=fft(z);

subplot(325);plot(z);title('FIR滤波后信号的波形');

subplot(326);plot(Z);title('FIR滤波后信号的频谱');

得到结果如图:

(6)小结:以上几种滤波,我们都可以从信号滤波前后的波形图以及频谱图上看出变化。当然,也可以用sound()函数来播放滤波后的语音,从听觉上直接感受语音信号的变化,但由于人耳听力的限制,有些情况下我们是很难听出异同的。

同样,通过函数的调用,也可以将信号的频谱进行“分离观察”,如显出信号的幅值或相位。下面,通过改变系统函数的分子与分母系数比,来观察信号滤波前后的幅值与相位。并且使结果更加明显,使人耳得以很容易的辨听。

x=wavread('ding.wav');

sound(x);

b=100;a=5;

y=filter(b,a,x);

X=fft(x,4096);

subplot(221);plot(x);title('滤波前信号的波形');

subplot(222);plot(abs(X));title('滤波前信号的幅值');

Y=fft(y,4096);

subplot(223);plot(y);title('滤波后信号的波形');

subplot(224);plot(abs(Y));title('滤波后信号的幅值');

结果如图:

>> sound(y);

可以听到声音明显变得高亢了。从上面的波形与幅值(即幅频)图,也可看出,滤波后的幅值变成了滤波前的20倍。

>> figure,

subplot(211);plot(angle(X));title('滤波前信号相位');

subplot(212);plot(angle(Y));title('滤波后信号相位');

得图:

可以看到相位谱没什么变化。

(四)、界面设计:

直接用M文件编写GUI程序很繁琐,而使用GUIDE设计工具可以大大提高工作效率。GUIDE相当于一个控制面板,从中可以调用各种设计工具以辅助完成界面设计任务,例如控件的创建和布局、控件属性的编辑和菜单设计等。

使用GUIDE设计GUI程序的一般步骤如下:

1. 将所需控件从控件面板拖拽到GUIDE的设计区域;

2. 利用工具条中的工具(或相应的菜单和现场菜单),快速完成界面布局;

3. 设置控件的属性。尤其是tag属性,它是控件在程序内部的唯一标识;

4. 如果需要,打开菜单编辑器为界面添加菜单或现场菜单;

5. 保存设计。GUIDE默认把GUI程序保存为两个同名文件:一个是.fig文件,用来保存窗体布局和所有控件的界面信息;一个是.m文件,该文件的初始内容是GUIDE自动产生的程序框架,其中包括了各个控件回调函数的定义。该M文件与一般的M文件没有本质区别,但是鉴于它的特殊性,MATALAB把这类文件统称为GUI-M文件。保存完后GUI-M文件自动在编辑调试器中打开以供编辑。

6. 为每个回调函数添加代码以实现GUI程序的具体功能。这一步与一般函数文件的编辑调试过程相同。

设计过程及内容:

在MATLAB版面上,通过键入GUIDE弹出一个菜单栏进入gui制作界面(或者在File到new来进入gui),从而开始应用界面的制作。

该界面主要实现了以下几个功能:

①打开wav格式的音频文件,并将该音频信号的值读取并赋予某一向量;

②播放音频文件,可以选择性的显示该音频信号的波形、频谱、幅值以及相位;

③对音频信号进行IIR与FIR的5阶固定滤波处理,可以选择性的显示滤波前后信号的波形、频谱、幅值以及相位,以及播放滤波后的声音。

界面如图所示:

通过该界面,可以方便用户进行语音信号的处理。

界面主程序见附件。

(五)、校验:

1、本设计圆满的完成了对语音信号的读取与打开,与课题的要求十分相符;

2、本设计也较好的完成了对语音信号的频谱分析,通过fft变换,得出了语音信号的频谱图;

3、在滤波这一块,课题主要是从巴特沃斯滤波器入手来设计滤波器,也从一方面基本实现了滤波;

4、初略的完成了界面的设计,但也存在相当的不足,只是很勉强的达到了打开语音文件、显示已定滤波前后的波形等图。

四、 结论:

语音信号处理是语音学与数字信号处理技术相结合的交叉学科,课题在这里不讨论语音学,而是将语音当做一种特殊的信号,即一种“复杂向量”来看待。也就是说,课题更多的还是体现了数字信号处理技术。

从课题的中心来看,课题是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音的处理。作为存储于计算机中的语音信号,其本身就是离散化了的向量,我们只需将这些离散的量提取出来,就可以对其进行处理了。

MATLAB调试滤波器,matlab 滤波器相关推荐

  1. 双线性变换 matlab,matlab和双线性变换的滤波器设计.doc

    matlab和双线性变换的滤波器设计.doc 武汉理工大学MATLAB课程设计报告书题目MATLAB课程设计基于MATLAB和双线性变换的滤波器设计初始条件MATLAB仿真软件数字信号处理与图像处理基 ...

  2. 【 MATLAB 】使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法

    例题: 一个3阶低通滤波器由下面差分方程描述: y(n) = 0.0181 x(n) + 0.0543 x(n-1) + 0.0543 x(n-2) + 0.0181 x(n-3) + 1.76 y( ...

  3. 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)

    文章目录 0.引言及友情链接 1.场景预设 2.扩展卡尔曼滤波器 3.仿真及效果 0.引言及友情链接 \qquad卡尔曼滤波器(Kalman Filter, KF)是传感器融合(Sensor Fusi ...

  4. matlab编程设计fir滤波器,用MATLAB设计FIR滤波器

    滤波器 滤波器定义 "滤波器(filter),是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的直流电.对特定频率的频点或该频点以外的频率进行有效滤除的电路,就是滤波器,其功能就 ...

  5. matlab函数 无限冲激响应滤波器,MATLAB代码 有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器...

    MATLAB有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器设计 附MATLAB代码 摘要 文章设计了一个数字信号处理仿真实验,产生一个信号,其频率成分为f1和f2,并对其进行理想采样,采样 ...

  6. matlab滤波器设计双陷滤波,基于MATLAB 双线性变换法IIR 滤波器的设计

    摘要:滤波是信号处理的基础,因此滤波器的设计也就成为数字信号处理的基本问题之一.数字滤波是对数字信号处理不可或缺的环节,其好处远远大于模拟滤波器.本文应用MATLAB,实现了用双线性变换法设计IIR滤 ...

  7. matlab 有源电力滤波器,基于MATLAB的有源电力滤波器研究

    第 3 卷第 4 期 南 阳 理 工 学 院 学 报 Vol. 3 No. 4 2 0 1 1 年 7 月 JOURNAL OF NANYANG INSTITUTE OF TECHNOLOGY Jul ...

  8. 升余弦滤波器MATLAB分析

    作用 升余弦滤波器常常作为发送端的成型滤波器,用来抑制信号带外辐射. MATLAB实现 在maltab中,主要用rcosdesign函数来实现FIR脉冲成型滤波器,其他相关的函数还有comm.Rais ...

  9. MATLAB实现一阶RC滤波器

    MATLAB仿真分别实现一阶RC低通和高通滤波器,输入信号为正弦信号或者方波信号. 注意截止频率为f = 1/(2*pi*R*C) 低通滤波器下所示: %功能:一阶RC低通滤波器仿真 %说明: %1. ...

  10. 常用滤波器Matlab程序设计

    常用滤波器Matlab程序设计 (低通滤波器.高通滤波器.带通滤波器.带阻滤波器) 以下四个滤波器都是切比雪夫I型数字滤波器 1.低通滤波器 ​ 低通滤波(Low-pass filter) 是一种过滤 ...

最新文章

  1. 【LeetCode】002 Add Two Numbers
  2. NetBeans 6.7.1、6.8界面美化
  3. 对HTTP/2 支持
  4. Ubuntu开启NFS、SSH服务(驱动开发用到、电脑端登录ARM板用到)
  5. Echart折线图 柱状图
  6. 卫星通信知识点梳理(一)
  7. 桌面云之深信服VDC管理
  8. c# 服务器打印word文档,C#中5步完成word文档打印的方法
  9. 记录一次自己搭建服务器的历程(机架式服务器,Linux系统)
  10. vue+element 实现时间选择器切换周月选择
  11. 短网址还原 php,php简单实现短网址(短链)还原的方法(测试可用)
  12. EndNote修改导入文献格式的方法
  13. 算法复杂性分析及运算规则证明(一)
  14. 在html中让图片旋转180度,gif图片旋转教程:怎么把gif旋转90度/180度 附gif图片旋转软件...
  15. Android~老项目项目升级GradleAGP 7.0踩坑
  16. 软件测试中常用的简称
  17. c语言程序设计结论,C语言程序设计报告.docx
  18. Fast Planner——ESDF地图中距离计算(欧几里得距离转换EDT)
  19. 为什么说现在IT toB发展的拐点
  20. 【python作业】编写一个函数,由实参传来一个字符串,统计此字符串中字母和数字的个数,在主函数中输入字符串并输出上述的结果。

热门文章

  1. 北京大学ACM在线评测系统
  2. 碰见参数错误咋解决?
  3. outlook配置126邮箱
  4. Multiple primary key defined
  5. redis源码浅见之sds
  6. IO流读取文件拒绝访问
  7. 中科院生物信息学题目整理
  8. 程序员多次下载的浏览器竟然是它!
  9. php curl 417,PHP Curl 417 Expectation Failed解决办法
  10. [历朝通俗演义-蔡东藩-前汉]第011回 降真龙光韬泗水 斩大蛇夜走丰乡