这是我的代码,用于查找两个信号的卷积,但每次有人解释我的代码中的错误,我的输出变为零? 我尝试编译它但我无法找出问题,我的整个代码是正确的 提前谢谢
#include<stdio.h>
#include<stdlib.h>
#define array_len(x) (sizeof(x)/sizeof(double))
void convolution(double *signal, int nt, double *wind, int r, double *rm)
{
int i,j;
printf("%u\n", sizeof(wind));
int l = (nt+r-1);
for(i=r;i<=l;i++)
{
wind[i]=0;
}
for(i=nt;i<=l;i++)
{
signal[i]=0;
}
printf("signal\n");
for(i=0; i<=l; i++)
{
printf("%lf\n",signal[i]);
}
for(i=0;i<=l;i++)
{
rm[i]=0;
for(j=0;j<=i;j++)
{
rm[i] = (rm[i]+(signal[j]*wind[i-j]) );
}
}
}
void main()
{
double a[] = {1,2,3,4};
int i;
int la = array_len(a);
printf("\nc1\t%ld",la);
double b[] = {1,1,1,1} ;
int lb = array_len(b);
printf("\nc2\t%ld\n",lb);
double r[la+lb-1];
int lr = array_len(r);
printf("\nc3\t%ld\n",lr);
printf("entering convolution\n");
convolution(a,la,b,lb,r);
for(i=0;i<(lr);i++)
{
printf("rm[%d]=%lf\n",i,r[i]);
}
}
答案 0 :(得分:0)
你试试这个!
void convolution(double *signal, int nt, double *wind, int r, double *rm)
{
int i,j;
printf("%u\n", sizeof(wind)); // Why you do this? this just returns the size of the pointer only
int l = (nt+r-1);
double one[l];
double two[l];
for(i=0;i<l;i++)
{
if (i < nt)
one[i] = signal[i];
else
one[i] = 0;
if (i < r)
two[i] = wind[i];
else
two[i] = 0;
}
printf("signal\n");
for(i=0; i<l; i++)
printf("%lf\n",one[i]);
for(i=0;i<l;i++)
{
rm[i]=0;
for(j=0;j<=i;j++)
{
rm[i] = (rm[i]+(one[j]*two[i-j]) );
}
}
}
答案 1 :(得分:0)
可能不是你为什么看到0作为答案的答案,但
for(i=r;i<=l;i++)
{
wind[i]=0;
}
for(i=nt;i<=l;i++)
{
signal[i]=0;
}
长度变量'l'是(nb + r-1),即7,而数组传递给卷积函数,'b'和'a'只有4个元素,而存储器只分配给4个元素。因此,使用您的代码,您将跨越阵列边界以获取风和信号。我想知道为什么它不会崩溃。