1.函数简介
w = conv(u,v)
w = conv(u,v)
返回向量 u
和 v
的卷积结果,卷积运算是对信号的移位加权求和。
y=filter(b,a,x)
使用由分子和分母系数 b 和 a 定义的有理传递函数对输入数据 x 进行滤波。要将 filter
函数与来自 FIR 滤波器的 b
系数结合使用,请使用 y = filter(b,1,x)
。
有理传递函数:Z 变换域中这种 filter 运算的输入-输出说明是一种有理传递函数。有理传递函数采用如下形式:
Y
(
z
)
=
b
(
1
)
+
b
(
2
)
z
−
1
+
.
.
.
+
b
(
n
b
+
1
)
z
−
n
b
1
+
a
(
2
)
z
−
1
+
.
.
.
+
a
(
n
a
+
1
)
z
−
n
a
X
(
z
)
Y(z)=\frac{b(1)+b(2)z^{-1}+...+b(n_b+1)z^{-n_b}}{1+a(2)z^{-1}+...+a(n_a+1)z^{-n_a}}X(z)
Y(z)=1+a(2)z−1+...+a(na+1)z−nab(1)+b(2)z−1+...+b(nb+1)z−nbX(z)
可同时处理 FIR 和 IIR 滤波器 。na 是反馈滤波器阶数,nb 是前馈滤波器阶数。
讨论情况
由于conv(u,v)与filter(b,1,x)运算类似,本文只讨论这两种的区别。
2.先说结论
filter(b,1,x)运算的结果可以简单理解为:将conv运算后的结果取前面x向量的长度。
3.代码验证
MATLAB代码:
clear all;close all;clc; %清理工作区,关闭所有窗口,清空文本
% 数据
M=[1,2,3,4,5,6,7,8,9,10];
N=[1,2,3,4];
N_long = [N,zeros(1,4)];%N后面加4个0,长度为8
% 卷积或滤波
N_conv_M = conv(N,M)
M_conv_N = conv(M,N)
N_filter_M=filter(N,1,M)
M_filter_N=filter(M,1,N)
M_filter_N_long=filter(M,1,N_long)
%长度
disp(['N_conv_M长度为M+N-1=', num2str(length(N_conv_M))]);
disp(['M_conv_N长度为M+N-1=', num2str(length(M_conv_N))]);
disp(['N_filter_M长度为M=', num2str(length(N_filter_M))]);
disp(['M_filter_N长度为N=', num2str(length(M_filter_N))]);
disp(['M_filter_N_long长度为N_long=', num2str(length(M_filter_N_long))]);
命令行打印结果:
N_conv_M =
1 4 10 20 30 40 50 60 70 80 79 66 40
M_conv_N =
1 4 10 20 30 40 50 60 70 80 79 66 40
N_filter_M =
1 4 10 20 30 40 50 60 70 80
M_filter_N =
1 4 10 20
M_filter_N_long =
1 4 10 20 30 40 50 60
N_conv_M长度为M+N-1=13
M_conv_N长度为M+N-1=13
N_filter_M长度为M=10
M_filter_N长度为N=4
M_filter_N_long长度为N_long=8