Visual C++实现离散序列圆周卷积

发布网友 发布时间:2022-04-24 13:26

我来回答

1个回答

热心网友 时间:2022-04-27 07:28

这个我来回答一下吧, 虽然我是学物理的, 但是我考过北邮的通信专业, 自学通信原理, 虽然只考110但分数不无论是单科还是总分都是还我们小组当年最高的.
不用再追加其它分数了, 把我的采纳为最佳答案尊重下劳动成果就行了.
有其它问题可以再联系, 原来代码错误的部分我已经加了注释, 可以运行了.
代码如下:
#include <iostream>
using namespace std;

void Cir_conv(double[],double[],int,int); //函数声明放在main函数外面
void main()
{
double h[]={1.1,1.2,1.8} , x[]={1.9,2.8,3.0,1.9,3.7};
int N1=sizeof(h)/sizeof(double) , N2=sizeof(x)/sizeof(double); // 这儿有笔误, 原来是N2=sizeof(double)/sizeof(double)
Cir_conv(h,x,N1,N2);
}

void Cir_conv(double h[],double x[],int h_size,int x_size)
{
double *y1=NULL;
y1=new double [h_size+x_size-1];
double *h1=NULL;
h1=new double[h_size+x_size-1];

for (int i=0;i<h_size+x_size-1;i++)
{
if (i<h_size)
h1[i]=h[i];
else
h1[i]=0;
}

double *x1=NULL;
x1=new double[h_size+x_size-1];
for(int p=0;p<h_size+x_size-1;p++)
{
if (p<x_size)
x1[p]=x[p];
else
x1[p]=0;
}

for(int k=0;k<h_size+x_size-1;k++)
{
y1[k]=0; //这儿是原来最大的错误, 忘记赋初值了
for(int j=0,m=k;j<=k&&m>=0;j++,m--) //这儿原来多了一个int
y1[k]+= h1[j]*x1[m];
}

for (int n=0;n<h_size+x_size-1;n++)
{
cout<<y1[n]<<" ";
if((n+1)%5==0) cout<<endl;
// cout<<endl; //这句应该没用, 原来的代码意思应该是每行放五个, 所以这行没有用了
}

}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com