大佬教程收集整理的这篇文章主要介绍了ANSI C代码中的1d线性卷积?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,对于阵列A,B和C,分别输出A和B为输入和C的所有双精度,分别具有长度len_A,len_B和len_C = len_A len_B-1.
#include <stddef.h> #include <st@L_674_8@.h> void convolve(const double Signal[/* SignALLEN */],size_t SignALLEN,const double Kernel[/* KernelLen */],size_t KernelLen,double result[/* SignALLEN + KernelLen - 1 */]) { size_t n; for (n = 0; n < SignALLEN + KernelLen - 1; n++) { size_t kmin,kmax,k; result[n] = 0; kmin = (n >= KernelLen - 1) ? n - (KernelLen - 1) : 0; kmax = (n < SignALLEN - 1) ? n : SignALLEN - 1; for (k = kmin; k <= kmax; k++) { result[n] += Signal[k] * Kernel[n - k]; } } } void printSignal(const char* Name,double Signal[/* SignALLEN */],size_t SignALLEN) { size_t i; for (i = 0; i < SignALLEN; i++) { printf("%s[%zu] = %f\n",Name,i,Signal[i]); } printf("\n"); } #define ELEMENT_COUNT(X) (sizeof(X) / sizeof((X)[0])) int main(void) { double signal[] = { 1,1,1 }; double kernel[] = { 1,1 }; double result[ELEMENT_COUNT(signal) + ELEMENT_COUNT(kernel) - 1]; convolve(signal,ELEMENT_COUNT(signal),kernel,ELEMENT_COUNT(kernel),result); printSignal("signal",signal,ELEMENT_COUNT(signal)); printSignal("kernel",ELEMENT_COUNT(kernel)); printSignal("result",result,ELEMENT_COUNT(result)); return 0; }
输出:
signal[0] = 1.000000 signal[1] = 1.000000 signal[2] = 1.000000 signal[3] = 1.000000 signal[4] = 1.000000 kernel[0] = 1.000000 kernel[1] = 1.000000 kernel[2] = 1.000000 kernel[3] = 1.000000 kernel[4] = 1.000000 result[0] = 1.000000 result[1] = 2.000000 result[2] = 3.000000 result[3] = 4.000000 result[4] = 5.000000 result[5] = 4.000000 result[6] = 3.000000 result[7] = 2.000000 result[8] = 1.000000
以上是大佬教程为你收集整理的ANSI C代码中的1d线性卷积?全部内容,希望文章能够帮你解决ANSI C代码中的1d线性卷积?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。