对于 线性时不变系统 ( LTI - Linear time-invariant ) 来说 ,
假设
是 LTI 系统的 " 输入序列 " ,
是 " 输出序列 " ,
则有 :
线性时不变系统 ( LTI - Linear time-invariant ) 的
" 输出序列 "
等于
" 输入序列 " 与 " 系统单位脉冲响应 " 的 线性卷积 ;
输出序列 的元素个数 :
给定 输入序列 :
单位脉冲响应 :
计算卷积 :
;
卷积结果序列对应的元素个数是
根据如下 卷积 公式 :
计算
:
取值
时 , 有
, 则
, 累加没有意义 ;
时 , 有
时 , 有
, 则
, 累加没有意义 ;
最终 :
计算
:
取值
时 , 有
, 则
, 累加没有意义 ;
时 , 有
时 , 有
时 , 有
, 则
, 累加没有意义 ;
最终 :
计算
:
取值
时 , 有
, 则
, 累加没有意义 ;
时 , 有
,
仅在
索引有值 ,
索引值为 0 ;
时 , 有
时 , 有
, 则
, 累加没有意义 ,
仅在
索引有值 , 小于
的索引值为 0 ;
最终 :
matlab 源码 :
x = [1, 2];
h = [1, 2];
y = conv(x, h);
最终计算结果 :
从百度百科找了个源码 : convolution
是卷积计算的函数 , 仅做参考 ;
void convolution(double *input1, double *input2, double *output, int mm, int nn)
{
double *xx = new double[mm + nn - 1];
// do convolution
for (int i = 0; i < mm + nn - 1; i++)
{
xx[i] = 0.0;
for (int j = 0; j < mm; j++)
{
if (i - j >= 0 && i - j < nn)
xx[i] += input1[j] * input2[i - j];
}
}
// set value to the output array
for (int i = 0; i < mm + nn - 1; i++)
output[i] = xx[i];
delete[] xx;
}
源码参考 https://baike.baidu.com/item/卷积 百度百科 ;