c语言计算循环卷积,循环卷积和离散卷积的计算机计算.DOC

信号与系统

课程设计报告

学院 电气与电子工程学院

班级 电气1004班

学号 U201011867

姓名 彭鸿昌

一 设计题目

循环卷积和离散卷积的计算机计算

二 设计目标

设有两离散序列和,则两序列的循环卷积和离散卷积分别为:

画出计算此两卷积的程序框图,并用C语言编写计算程序,计算出结果。

用C语言编程,分析计算结果。

三 设计原理

在泛函分析中,卷积(卷积)、旋积或摺积(英语:Convolution是通过两个函数f 和g 生成第三个函数的一种数学算子,表徵函数f 与经过翻转和平移与g 的重叠部分的累积。如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均”的推广。

卷积关系最重要的一种情况,就是在信号与线性系统或数字信号处理中的卷积定理。利用该定理,可以将时间域或空间域中的卷积运算等价为频率域的相乘运算,从而利用FFT等快速算法,实现有效的计算,节省运算代价。

1 离散卷积

信号与线性系统中,定义x[n],v[n],其卷积为 计算离散卷积时,首先将x[n],v[n]中的离散时间序号n改为i,得到信号x[i],v[i],下一步确定v[n-i]和乘积x[i]v[n-i]。信号v[n-i]是信号v[i]的反折和平移,通过对x[i]v[n-i]中的i求和即可计算出来,式中i取一定范围的的整数。

计算离散卷积时需要用户输入x[n]和v[m]的值,这样便可以得到所要求的离散卷积的值。

2 循环卷积

循环卷积比起线性卷积,在运算速度上有很大的优越性,它可以采用快速傅里叶变换(FFT)技术,若能利用循环卷积求线性卷积,会带来很大的方便。一般情况下,n≧N时x[n]*v[n]并不等于零,x[n]*v[n]的N点DFT和这些值不一致。因此,有必要定义一种卷积运算,使得n=0,1,…,N-1之外的卷积信号x[n]*v[n]等于零,这就引出循环卷积的概念。离散卷积和循环卷积之间的唯一区别是:用折叠位移(模N)信号代替了离散卷积式中的折叠位移信号。

对于循环卷积来说,不仅要知道这两组数而且要确定N值。

四 程序流程图

1 离散卷积流程图

2 循环卷积流程图

五 程序代码

1 离散卷积代码

#include

using namespace std;

int main(

{

int n,m,k,q;

n=m=k=q=0;

double x[100],v[100],y[200];

cout<

cout<

cin>>n;

cout<

cin>>m;

cout<

for(k=0;k<=n-1;k++

cin>>x[k];

cout<

for(k=0;k<=m-1;k++

cin>>v[k];

for(q=0;q<=m+n-2;q++

for(k=0;k<=n-1;k++

if((q-k>=0

y[q]=x[k]*v[q-k]+y[q];

cout<

for(q=0;q<=m+n-2;q++

cout<

cout<

return 0;

}

2 循环卷积代码

#include

using namespace std;

int main(

{

int i,j;

i=j=0;

int t;

double x[100],v[100],y[200];

cout<

cout<

cin>>t;

cout<

for(i=0;i<=t-1;i++

cin>>x[i];

cout<

for(i=0;i<=t-1;i++

cin>>v[i];

for(j=0;j<=t-1;j++

for(i=0;i<=t-1;i++

if((j-i>=0

y[j]=x[i]*v[j-i]+y[j];

else if((j-i<0

y[j]=x[i]*v[j-i+t]+y[j];

cout<

for(j=0;j<=t-1;j++

cout<

return 0;

}

六 计算结果与验证

编程软件使用Code::Blocks,编译器为GNU GCC Compiler

1 循环卷积

验证循环卷积

=x[0]v[0]+x[1]v[2]+x[2]v[1]=11, n=0

y[n]=x[n] ③v[n] =x[0]v[1]+x[1]v[0]+x[2]v[2]=11, n=1

=x[0]v[2]+x[1]v[1]+x[2]v[0]=14, n=2

验算结果与编程计算结果一致

2 离散卷积

验证离散卷积

1 2 3 4 5

5 4 3 2 1

5 4

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值