您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 南昌航空大学实验报告
南昌航空大学实验报告课程名称:C语言程序设计实验名称:正弦信号模拟采样及特征参数分析软件设计班级:姓名:同组人:指导教师评定:签名:一、实验目的1、了解正弦信号采样的基本原理;2、了解正弦信号采样的离散处理方法;3、进一步掌握C语言输入输出语句的使用和编程方法;4、进一步掌握C语言顺序结构、选择结构和循环结构程序的编写;5、进一步掌握C语言函数的定义和调用,数组、结构体及文件的使用及编程方法;6、进一步培养把实际问题转化为C语言模型和模块化程序设计的能力。二、实验内容该实验要求对一输入正弦信号进行离散处理并对该信号的基本特征进行定量分析。采用不同的抽样频率分别求出该信号的有效值、峰峰值、平均值。三、实验要求具体功能指标要求如下:1、生成模拟信号)2cos()(0ftAnY+B;其中A(幅度值)、f(频率)、0(初相角)、B(直流分量)由键盘输入;2、对该信号在一个周期内分别等间隔采样32、64点,并把采样的值分别存放在不同的数组中;注:采样的计算方法如下:设信号的频率为f,采样N点,则周期为T=1/f;每两个采样点的间隔为⊿t=T/N。第n点的采样值为:)/2cos()(0NnAnY+B分别计算信号的有效值、峰峰值、平均值,并在屏幕上显示;其中有效值计算公式为:NnYNn02)(平均值计算公式为:NnYY)(平峰峰值计算公式为:minmaxnnYYY峰峰3、完成对信号的幅度值、频率、初相角、有效值、峰峰值、平均值的显示并以文件形式存储。四、实验流程图开始输入A(幅度值)、f(频率)、x(初相角)、B(直流分量)各采样点数据:f(n)=A*cos(2*PI*f*t+x)+B注:(t=n/(f*N))NnYY)(平输出有效值、平均值、峰峰值,并将各点的值存入结构体数组中,将结构体数组写入磁盘结束N分别取值为32、64Y峰峰=Ymax-Ymin四、实验源程序/***********************************************************************************************//**************************正弦信号模拟采样及特征参数分析软件设计*******************************//***********************************************************************************************/#includestdio.h#includemath.h#includestdlib.h#definePI3.1415926structshuju//结构体数组存放数据{doubleaverage;//平均值doublevirt;//有效值doublepeak;//峰峰值doubledata[64];//存储每个采样点的数据}str[2];//两次采样的数据分开存放structshuju*p=str;voidvalue(double*fp,intn,intm)//用于求各个采样点的平均值{inti;doublesum=0,aver;for(i=0;in;i++){sum=sum+fp[i];}aver=sum/n;printf(平均值:%lf\n,aver);p[m].average=aver;}voidfun(double*fp,intn,intm)//用于求每次不同间隔采样后的峰峰值{inti;doublemin,max;for(min=max=fp[0],i=0;in;i++)//遍历找出最大值最小值{if(minfp[i]){min=fp[i];}if(maxfp[i]){max=fp[i];}}printf(峰峰值为:%lf\n,max-min);p[m].peak=(max-min);}voidfun1(double*fp,intn,intm)//用于求每次采样的有效值{inti;doublesum=0,yx;//sum用于寄存累加数据yx存放有效值for(i=0;in;i++){sum=sum+fp[i]*fp[i];}yx=sqrt(sum/n);printf(有效值为:%lf\n,yx);p[m].virt=yx;}voidwrite(){inti;FILE*fp;if((fp=fopen(G:\\b.txt,w))==NULL)//判断文件写入是否出错{printf(写入文件出错!\n);exit(1);}else{fprintf(fp,32点采样数据:\n);for(i=1;i=32;i++){fprintf(fp,%lf,p[0].data[i-1]);if(i=8&&i%8==0)fprintf(fp,\n);}fprintf(fp,平均值峰峰值有效值\n);fprintf(fp,%lf,p[0].average);fprintf(fp,%lf,p[0].peak);fprintf(fp,%lf,p[0].virt);fprintf(fp,\n);fprintf(fp,\n64点采样数据:\n);for(i=1;i=64;i++){fprintf(fp,%lf,p[1].data[i-1]);if(i=8&&i%8==0)fprintf(fp,\n);}fprintf(fp,平均值峰峰值有效值\n);fprintf(fp,%lf,p[1].average);fprintf(fp,%lf,p[1].peak);fprintf(fp,%lf,p[1].virt);fprintf(fp,\n);fclose(fp);}}intmain(){inti;doubleA,f,x,B,t;//A(幅度值)、f(频率)、x(初相角)、B(直流分量)printf(请输入A(幅度值)、f(频率)、x(初相角)、B(直流分量)\n);scanf(%lf%lf%lf%lf,&A,&f,&x,&B);for(i=0;i32;i++){t=(i+1)/(f*32);p[0].data[i]=A*cos(2*PI*f*t+x)+B;}printf(32点采样的数据为:\n);for(i=1;i=32;i++){printf(%lf,p[0].data[i-1]);if(i=8&&(i%8)==0)//控制每行输出的数据个数{printf(\n);}}value(p[0].data,32,0);fun(p[0].data,32,0);fun1(p[0].data,32,0);for(i=0;i64;i++){t=(i+1)/(f*64);p[1].data[i]=A*cos(2*PI*f*t+x)+B;}printf(64点采样数据为:\n);for(i=1;i=64;i++){printf(%lf,p[1].data[i-1]);if(i=8&&(i%8)==0)//控制每行输出的数据个数{printf(\n);}}value(p[1].data,64,1);fun(p[1].data,64,1);fun1(p[1].data,64,1);write();//调用文件写入函数将数据写入到磁盘中return0;}四、结果分析程序通过输入A(幅度值)、f(频率)、x(初相角)、B(直流分量),生成模拟信号数据,分别建立32、64个采样点进行数据采集,然后调用函数进行计算有效值、平均值、峰峰值,并将结果写入磁盘中。五、实验小结1、程序较长,在定义变量时注意是否与函数名重复,变量的定义尽量做到见名知意,在关键位置程序函数开头进行注释,方便程序阅读。2、在编程过程中,参数的类型注意一致,参数的类型不一可能会影响到数据结果,根据题目的实际要求适当调整参数的形式。3、对概念要清楚,在调用函数时明确该传递什么信息、参数,该返回什么内容,防止在函数调用过程中出错!4、学会调试程序,在程序输出结果与预期不相符时,试着动手调试程序,修改程序。
本文标题:南昌航空大学实验报告
链接地址:https://www.777doc.com/doc-2597492 .html