简单卷积程序
来源:互联网 发布:java数组倒置 编辑:程序博客网 时间:2024/06/13 21:38
#include<iostream>using namespace std;#define numberOfElement(array) sizeof(array)/sizeof(array[0])/*设输入数据的采样点是m个 响应函数的采样点是n个 卷积后输出的数据点个数是m+n-1*/int conv(int *arr,int *acc,int firt,int sec){ int lastSum = firt+sec-1; cout<<"lastSum is "<<lastSum<<endl; int *recordSum = new int[lastSum]; for(int i=0;i<lastSum;i++) recordSum[i] = 0; for(int i=0;i<lastSum;i++) { /*需要判断对相应输出数据产生影响的输入数据的范围*/ /*这个范围当然要收到响应函数的影响*/ /*sec是相应的响应函数采样点的数量 这决定了每个采样点可以影响的输入数据的范围*/ /*max(i-(sec-1),0)是可以影响的输入数据的起始点*/ for(int j = max(i-(sec-1),0);j<=min(firt-1,i);j++) { recordSum[i] += arr[j]*acc[i-j]; } } cout<<"the result of convolution is"<<endl; for(int i=0;i<lastSum;i++) { cout<<recordSum[i]<<" "; } cout<<endl; return 1;} int main(){ /*experiment*/ int first[] = {4,3,2,1}; int sec[] = {3,2,1}; conv(first,sec,numberOfElement(first),numberOfElement(sec)); system("pause"); return 1;}