您的位置:首页 > 编程语言 > MATLAB

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 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;


结果如下图所示:

原始信号与两种计算方法所得到的铝箔之后的信号:



两种计算方法的差别(实际上是没有差别的):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab filter