卷积
卷积(Convolution)应该可以说成翻卷积分,其实本质上是一个积分变换的数学方法,在离散上对应着卷积和,由于卷积跟傅里叶变化等手段都有着密切的关系,因此极为重要。几乎是如果涉及到了信号系统,都离不开卷积。
1.卷积的定义
离散卷积和可以定义为:
忽略具体计算,将卷积和表示为,这里的(*)代表卷积,交换律在卷积中成立
在一个离散时间线性移不变系统中,x(n)代表着输入,h(n)表示系统函数,y(n)是系统的输出
2.卷积的计算
从代数的角度看,卷积其实代表着多项式的乘法,多项式的乘法有多重要,卷积就有多重要
举例:
这就是小学二年级的多项式计算过程,可以发现,3项*2项 = 3+2-1 =4项
其实多项式的信息全包含在了系数里面,这样就可以写成:
这就是卷积的常用手算方法,也是由多项式的乘法演变而来
根据上面可以发现,卷积后的输出长度应是:
卷积的过程如果用图像来表达,这个过程应该为:翻转、移位、相乘、相加。头脑中应该有这样一个卷积过程,将x(n)和h(n)画在上下两个坐标系中,一般以n=0为起始。将h(n)翻转过去最左边,然后向右移位直到与x(n)有重合的位置,然后同位置的相乘,然后累加就得到一个y(n=*),再不断右移重复这个过程,直到没有重合点。一般情况下把系统函数h(n)作为翻转移位,x(n)不动。
卷积的计算还可以使用矩阵表示,例如:
3.在matlab中进行卷积
matlab的卷积命令为: w = conv(u,v)
x = [3,6,2];
h = [2,1];
y = conv(x,h);
y
结果为:
y =
6 15 10 2
4.利用卷积进行滤波
例如,FIR滤波器其实就是一个完完全全的卷积,通过设计合适的系统函数h(n),再计算卷积,就可以达到想要的滤波效果。例如,均匀移动平均滤波器。
load bostemp
days = (1:31*24)/24;
plot(days, tempC)
win_size = 10;
h = ones(win_size,1)/win_size;
y = conv(tempC,h,'same'); %same可以使输出长度保持与tempC一致
plot(days,tempC,days,y);
legend('原始数据','卷积后的输出数据','location','best')
xlabel('时间/天');
ylabel('温度/摄氏度');
可以看到,通过卷积实现均匀移动平均滤波器可以平滑信号,滤除高频分量