Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

conv

fi 对象的卷积和多项式乘法

说明

示例

c = conv(a,b) 返回输入向量 ab 的卷积,其中至少一个必须为 fi 对象。

示例

c = conv(a,b,shape) 返回卷积的分段,由 shape 指定。

示例

全部折叠

求使用 16 抽头 FIR 滤波器对含 22 个采样的序列进行的卷积。

x 是一个由有符号值组成的 22 个采样的序列,其字长为 16 位,小数长度为 15 位。h 是 16 抽头 FIR 滤波器。

u = (pi/4)*[1 1 1 -1 -1 -1 1 -1 -1 1 -1]; 
x = fi(kron(u,[1 1]));
h = firls(15, [0 .1 .2 .5]*2, [1 1 0 0]);

由于 xfi 对象,因此不需要将 h 转换为 fi 对象就可以执行卷积运算。conv 函数使用最佳精度定标自动执行此运算。

使用 conv 函数来对这两个向量求卷积。

y = conv(x,h);

该运算生成一个有符号 fi 对象 y,其字长为 36 位,小数长度为 31 位。与输入相关联的默认 fimath 属性确定输出的 numerictype。输出没有局部 fimath

创建两个 fi 向量。求解与 a 大小相同的 ab 的卷积的中心部分。

a = fi([-1 2 3 -2 0 1 2]);
b = fi([2 4 -1 1]);
c = conv(a,b,'same')
c = 

    15     5    -9     7     6     7    -1

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 34
        FractionLength: 25

c 的长度为 7。全卷积的长度将为 length(a)+length(b)-1,在本例中为 10。

输入参数

全部折叠

输入向量,指定为行向量或列向量。

如果有任一输入是内置数据类型,则在执行卷积运算之前,conv 会使用最佳精度规则将其转换为 fi 对象。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
复数支持:

卷积的分段,指定为下列值之一:

  • 'full' - 返回全卷积。此选项是默认形状。

  • 'same' - 返回与输入向量 a 大小相同的卷积的中心部分。

  • 'valid' - 仅返回函数计算的没有补零边缘的卷积部分。使用此选项时,输出向量 c 的长度为 max(length(a)-max(0,length(b)-1),0)

数据类型: char

详细信息

全部折叠

卷积

两个向量 uv 的卷积,表示 v 滑过 u 时依据这些点确定的重叠部分的面积。从代数方法上讲,卷积就是与将其系数为 uv 元素的多项式相乘的运算。

m = length(u)n = length(v)。则 w 是长度为 m+n-1 的向量,其第 k 个元素是

w(k)=ju(j)v(kj+1).

对生成 u(j)v(k-j+1) 的合法下标的 j 的所有值求和,具体而言就是 j = max(1,k+1-n):1:min(k,m)。当 m = n 时,这使

w(1) = u(1)*v(1)
w(2) = u(1)*v(2)+u(2)*v(1)
w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1)
...
w(n) = u(1)*v(n)+u(2)*v(n-1)+ ... +u(n)*v(1)
...
w(2*n-1) = u(n)*v(n)

算法

与输入相关联的 fimath 属性确定输出 fi 对象 cnumerictype 属性:

  • 如果 ab 有局部 fimath 对象,则 conv 使用该 fimath 对象来计算中间量并确定 cnumerictype 属性。

  • 如果 ab 都没有关联的 fimath,则 conv 使用默认 fimath 来计算中间量并确定 cnumerictype 属性。

如果有任一输入是内置数据类型,则在执行卷积运算之前,conv 会使用最佳精度规则将其转换为 fi 对象。

输出 fi 对象 c 始终使用默认值 fimath

扩展功能

版本历史记录

在 R2009b 中推出

另请参阅