matlab中的数字滤波器
2016-05-23 11:42
537 查看
在进行数字信号处理的时候经常需要对时间序列进行滤波。工具箱中常用的函数是filter
常见形式: y = filter(b,a,x)
其中x是输入序列,向量b&a是滤波器的参数。y是输出序列。
下面举一个例子说明一下实际的计算过程。
比如要对一段语音信号做预加重处理,其实就是要让响应的数字序列通过一个高通滤波器。滤波器的传递函数模型为——H(z)=1-μ*z^(-1)。实际计算的时候可以这么处理:y(i) = x(i) - μ*x(i-1),当index小于1的时候按照 x(index) = 0 处理。
代码如下:
结果如下图所示:
原始信号与两种计算方法所得到的铝箔之后的信号:
两种计算方法的差别(实际上是没有差别的):
常见形式: y = filter(b,a,x)
其中x是输入序列,向量b&a是滤波器的参数。y是输出序列。
下面举一个例子说明一下实际的计算过程。
比如要对一段语音信号做预加重处理,其实就是要让响应的数字序列通过一个高通滤波器。滤波器的传递函数模型为——H(z)=1-μ*z^(-1)。实际计算的时候可以这么处理:y(i) = x(i) - μ*x(i-1),当index小于1的时候按照 x(index) = 0 处理。
代码如下:
[y fs]=audioread('anger_03a01Wa.wav'); yy = filter([1 -0.9],1,y); yyy = zeros(length(y),1); yyy(1) = y(1); for k = 2:length(y) yyy(k) = y(k) - 0.9*y(k-1); end %yy = 5*yy; figure(1) subplot(3,1,1);plot((1:length(y)),y);title('原始');xlabel('序号');ylabel('幅值'); grid; subplot(3,1,2);plot((1:length(yy)),yy);title('调用滤波器函数');xlabel('序号');ylabel('幅值'); grid; subplot(3,1,3);plot((1:length(yyy)),yyy);title('按照原理做序列运算');xlabel('序号');ylabel('幅值'); grid; di = yyy - yy;%两个结果的差别 figure(2) plot((1:length(di)),di);title('两个结果的计算差别');xlabel('序号');ylabel('幅值'); grid;
结果如下图所示:
原始信号与两种计算方法所得到的铝箔之后的信号:
两种计算方法的差别(实际上是没有差别的):
相关文章推荐
- jQuery plugin items filter
- 全国哀悼日网站页面变成灰色的filter方法
- 用css filter做鼠标滑过图片效果
- 解析在main函数之前调用函数以及对设计的作用详解
- ASP 使用Filter函数来检索数组的实现代码
- JavaScript 数组some()和filter()的用法及区别
- ASP.NET MVC:Filter和Action的执行介绍
- jQuery遍历DOM节点操作之filter()方法详解
- 详解Matlab中 sort 函数用法
- JSP Filter的应用方法
- PHP中实现Bloom Filter算法
- Jquery find与filter函数区别 说明
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- Event filter with query SELECT * FROM __InstanceModificationEvent WITHIN
- PHP内置过滤器FILTER使用实例
- PHP中filter函数校验数据的方法详解
- Android中的Intent Filter匹配规则简介
- 简述Matlab中size()函数的用法
- javascipt:filter过滤介绍及使用