y=filter(b,a,x)
其中y为输出信号,x为输入信号,b是滤波器传递函数的分子系数,a是滤波器传递函数的分母系数。
当a为1(a0=1)时,filter函数执行的是卷积操作,为FIR滤波器的工作方式, 如果a包含多个元素,那么filter函数执行的是IIR的工作方式。IIR滤波器是递归的,意味着它用输入信号的历史值来计算当前值。虽然IIR滤波器通常使用更少的系数来实现相同的滤波效果,但可能存在稳定性问题,引入相位失真。
下面举一个不同长度CIC滤波器的频谱特性应用:
clc;
clear all;
M = 2;
b = ones(1,M);
delta = [1 zeros(1,1023)];
s = filter(b,1,delta);
spec = 20*log10(abs(fft(s)));
spec2 = spec - max(spec);
f = 0:length(spec)-1;
f = 2*f/(length(spec)-1);
M = 5;
b = ones(1,M);
delta = [1 zeros(1,1023)];
s = filter(b,1,delta);
spec = 20*log10(abs(fft(s)));
spec5 = spec - max(spec);
M = 8;
b = ones(1,M);
delta = [1 zeros(1,1023)];
s = filter(b,1,delta);
spec = 20*log10(abs(fft(s)));
spec8 = spec - max(spec);
plot(f,spec2,'-',f,spec5,'.',f,spec8,'--');
axis([0 1 -50 5]);
xlabel('归一化频率');ylabel('幅度(dB)');
legend('M=2','M=5','M=8');
grid;