用C语言实现线性卷积和圆周卷积
已知x(n)={1,0,2,1,3},求x(n)∗x(n),x(n)⑤x(n),x(n)⑩x(n)
#include"graphics.h"
#include<conio.h>
#include<math.h>
#include<stdio.h>
#include<string.h>
//线性卷积代码
void conv(int x[],int y[])
{
int n,s=0;
for(n=1;n<=9;n++)
{
y[n-1]=0;
for(int m=0;m<=n-1;m++)
{
s=(n-m-1);
if(s>4||s<0){x[s]=0;}
else if(m>4||m<0){x[m]=0;}
else
y[n-1]+=x[m]*x[s];
}
}
}
//圆周卷积代码,N表示圆周卷积的N
void cir_conv(int a[],int b[],int N)
{
int t=0;
for(int i=0;i<N;i++)
{
b[i]=0;
for(int j=0;j<N;j++)
{
t=i-j;
if(t<0) t=t+N;
b[i]+=a[t]*a[j];
}
}
}
void main()
{
int x[10]={1,0,2,1,3};
int y[10]={0},y_cir5[10]={0},y_cir10[10]={0};//数组必须赋初值,不然会乱
conv(x,y);
cir_conv(x,y_cir5,5);
cir_conv(x,y_cir10,10);
for(int i=0;i<10;i++)
{
printf("y[%d]=%d ",i,y[i]);
printf("y_cir5[%d]=%d ",i,y_cir5[i]);
printf("y_cir10[%d]=%d\n",i,y_cir10[i]);
}
}
运行结果如下
本程序是对清华大学出版的数字信号处理(第四版)的题3-10进行C语言实现。