| 查看: 2105 | 回复: 1 | |||
| 【奖励】 本帖被评价1次,作者baobiao007增加金币 0.6 个 | |||
[资源]
【分享】线性卷积与循环卷积的比较c程序
|
|||
|
#include #include #include const int L1=4; const int L2=6; //普通线性卷积 void conv(float x[],int m,float y[],int n,float z[],int l) { int i,j; for(i=0; i z=0.0; for(j=0; j z+=y[j]*x[i-j]; } } //圆周移位,x1-原始有限长序列,x2-移位后的有限长序列,m-移动长度(>0右移,<0左移) void CircleMove(float x1[],float x2[],int m,int num) { int rr; for(int i=0; i x2=0.0; rr=(i-m)%num; if(r>=0) x2=x1[rr]; else x2=x1[num+rr]; } } //时域圆周卷积,两等长序列x,y圆周卷积后得到z //三序列长度都是num void CircleConvolution(float x[],float y[],float z[],int num) { float *y1,t; int i,j; y1=(float *)calloc(num,sizeof(float)); for(i=1; i<=num/2; i++) { t=y;y=y[num-i];y[num-i]=t;} for(j=0; j CircleMove(y,y1,j,num); for(i=0; i } free(y1); } void main() { float x[L1]={1,1,1,1}; float y[L2]={1,1,1,1,1,1}; float z1[L1+L2-1],z2[L1+L2-1]; //直接线性卷积 conv(x,L1,y,L2,z1,L1+L2-1); //要使循环卷积与线性卷积的结果相同,首先要将x,y的 //长度扩大为L1+L2-1 float *x1,*y1; x1=(float *)calloc(L1+L2-1,sizeof(float)); y1=(float *)calloc(L1+L2-1,sizeof(float)); for(int i=0; i for(i=0; i CircleConvolution(x1,y1,z2,L1+L2-1); printf("线性卷积: 圆周卷积:\n" ;for(i=0; i free(x1);free(y1); } |
» 猜你喜欢
计划投资2亿的特提斯计划动力机制问题,魔都民工挑战中科院相关人员,谁的更有道理?
已经有11人回复
城乡规划学招收调剂 1名
已经有0人回复
地球物理学和空间物理学论文润色/翻译怎么收费?
已经有162人回复
【招聘】科研助理+五险一金
已经有19人回复
» 本主题相关价值贴推荐,对您同样有帮助:
C++2011标准_ISO_IEC-14882-2011
已经有3人回复
循环伏安 电位差
已经有8人回复
循环伏安法沉积聚苯胺太不稳定了
已经有5人回复
循环利用????
已经有3人回复
【求助】信号与系统中的卷积问题
已经有7人回复
【分享】线性卷积c程序
已经有4人回复
【原创】求英国Hansatech公司生产的FMS-2型便携调制式叶绿素荧光仪数据导出驱动程序
已经有9人回复
【求助】请教这个是否算高斯卷积核?
已经有7人回复
【求助】最小二乘法编写指数拟合方程
已经有19人回复
【分享】转一篇好文——谈谈卷积的物理意义
已经有18人回复
2楼2011-02-10 22:06:22












;
回复此楼