C++实现两个一维数组的卷积

必须吐槽一下,数学咋这么牛逼呢??卷积啊卷积 牛啊 !!!

一维连续卷积公式:

h(x)=f(x)*g(x) = \int_{-oo}^{+oo} f(\tau )g(x-\tau )d\tau

一维离散卷积公式:

h(n)=f(n)*g(n) =\sum_{-oo}^{+oo}f(\tau )g(n-\tau )

觉得首先把公式熟练一些 在看资料比较方便,下面附上两个一维数组卷积的实现。

卷积是可以交换次序的,只是把相对简单的那个做移动。

下面是计算原理:转自https://blog.csdn.net/appleyuchi/article/details/78597054

f(n) = [1 2 3]; g(n) = [2 3 1];

s(0) = f(0)g(0-0) + f(1)g(0-1)+f(2)g(0-2) = 1*2 + 2*0 + 3*0 =2

s(1) = f(0)g(1-0) + f(1)g(1-1) + f(2)g(1-2) = 1*3 + 2*2 + 3*0 = 7

s(2) = f(0)g(2-0) + f(1)g(2-1) + f(2)g(2-2) =1*1 + 2*3 + 3*2=13

s(3) = f(0)g(3-0) + f(1)g(3-1) + f(2)g(3-2) =1*0 + 2*1 + 3*3=11

s(4) = f(0)g(4-0) + f(1)g(4-1) + f(2)g(4-2) =1*0 + 2*0 + 3*1=3

#include<iostream>
using namespace std;
int main()
{
	int Array1[] = { 1,2,3 }, Array2[] = { 2,3,1 };
	int temp;
	int n = sizeof(Array1) / sizeof(int) + sizeof(Array2) / sizeof(int) - 1;
	int Array3[sizeof(Array1) / sizeof(int) + sizeof(Array2) / sizeof(int) - 1] = {0,0,0,0,0};
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			//之所以加上这个判断 是因为在C和C++数组元素的下表不能是负数  
			//目前所知 只有在python中 数组元素可以为下标 a[-1]代表数组的倒数第一个元素  
			if (i - j < 0||i-j>2)
			{
				temp = 0;
			}
			else
			{
				temp = Array2[i - j];
			}
			Array3[i] = Array3[i] + Array1[j] * temp;
		}
	}
	for (int i = 0; i < n; i++)
	{
		cout << Array3[i] << endl;
	}
	return 0;
}

 

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值