信号与系统_课程设计_卷积

信号与系统
课程设计报告
学院  电气与电子工程学院
班级  电气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)技术,若能利用循环卷积求线性卷积,会带来很大的方便。一般情况下,nNx[n]*v[n]并不等于零,新台网x[n]*v[n]NDFT和这些值不一致。因此,有必要定义一种卷积运
算,使得n=0,1,…,N-1之外的卷积信号x[n]*v[n]等于零,这就引出循环卷积的概念。离散卷积和循环卷积之间的唯一区别是:用折叠位移(模N)信号代替了离散卷积式中的折叠位移信号。
对于循环卷积来说,不仅要知道这两组数而且要确定N值。
程序流程图
1 离散卷积流程图
2 循环卷积流程图
程序代码
1 离散卷积代码
#include <iostream>
using namespace std;
int main()
{
    int n,m,k,q;
    n=m=k=q=0;
    double x[100],v[100],y[200];
    cout<<"离散卷积y\n";
    cout<<"输入x[n]的长度\n";
    cin>>n;
    cout<<"输入v[m]的长度\n";
    cin>>m;
    cout<<"输入x[n]\n";
    for(k=0;k<=n-1;k++)计算机毕业论文
        cin>>x[k];
    cout<<"输入v[m]\n";
    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<<"离散卷积y[n]\n";
    for(q=0;q<=m+n-2;q++)
    cout<<"y["<<q<<"]="<<y[q]<<"\n";
    cout<<"其余值均为0\n";
    return 0;
}
2 循环卷积代码
#include <iostream>
using namespace std;
int main()
氰酸酯树脂{
    int i,j;
    i=j=0;
    int t;体能训练服
    double x[100],v[100],y[200];
    cout<<"循环卷积y\n";
    cout<<"输入N的值\n";
    cin>>t;
    cout<<"输入x[n]\n";
    for(i=0;i<=t-1;i++)
        cin>>x[i];
    cout<<"输入v[m]\n";
    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<<"循环卷积y[n]\n";
    for(j=0;j<=t-1;j++)
        cout<<"y["<<j<<"]="<<y[j]<<"\n";
    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      3    2    1
      10    8    6    4    2
            15    12    9    6    3
                  20    16    12    8    4
                        25    20    15  10  5
5    14    26    40    55    40    26  14  5
验算结果与编程计算结果一致
体会与感想
在本次课程设计中,通过运用信号与系统、C/C++语言有关知识以及Code::Blockswps
软件的应用,对所学的内容有了更为清楚的认识,学会了如何利用图书馆、网络及各种常用软件,了解研究报告的格式。
在这次实践中,虽然在学校理论的学习很多,而且是多方面的,几乎是面面俱到;而在实际工作中,可能会遇到书本上没学到的,又可能是书本上的知识一点都用不上的情况。
总而言之,在课程设计过程中受益匪浅,不仅巩固了以前学习过的知识,还学习到了新知识,实际操作,把理论应用于现实。

本文发布于:2024-09-21 22:35:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/293353.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:卷积   循环   离散卷积   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议