实验六 函数

合集下载

matlab实验六

matlab实验六

实验六M-文件结构与编写、函数文件格式、编写与调用、程序结构与流程控制一、实验目的:Matlab文件类型及其编写、程序结构、流程控制认识二、实验原理:1、建立M文件将多个可执行的系统命令,用文本编辑器编辑后并存放在后缀为 .m 的文件中,若在MATLAB命令窗口中输入该m-文件的文件名(不跟后缀.m!),即可依次执行该文件中的多个命令。

这个后缀为.m的文件,也称为Matlab的命令文件(Script File)。

注意:文件存放路径必须在Matlab能搜索的范围内。

2、建立函数文件对于一些特殊用户函数,系统提供了一个用于创建用户函数的命令function,以备用户随时调用。

(1).格式:function [输出变量列表]=fun_name(输入变量列表)用户自定义的函数体(2).函数文件名为:fun_name,注意:保存时文件名与函数名最好相同;(3).存储路径:最好在系统的搜索路径上。

(4). 调用方法:输出参量=fun_name (输入变量)例1:计算s = n!,在文本编辑器中输入:function s=pp(n);s=1;for i=1:ns=s*i;ends;在MATLAB命令窗口中输入:s=pp(5)结果为s = 1202、无条件循环当需要无条件重复执行某些命令时,可以使用for循环:for 循环变量t=表达式1 : 达式2 : 表达式3语句体end说明:表达式1为循环初值,表达式2为步长,表达式3为循环终值;当表达式2省略时则默认步长为1;for语句允许嵌套。

例2:如:矩阵输入程序m=input('矩阵行数:m=');n=input('矩阵列数:n=');for i=1:mfor j=1:ndisp(['输入第',num2str(i),'行,第', num2str(j),'列元素'])A(i, j) = input ('')endend生成3×4阶的Hiltber矩阵。

实验六-方波—三角波—正弦波函数发生器

实验六-方波—三角波—正弦波函数发生器

实验六-方波—三角波—正弦波函数发生器六.方波-三角波-正弦波函数发生器一、实验目的函数信号发生器是一种可以同时产生正弦波、三角波和方波信号电压波形的电路,调节外部电路参数,还可以获得占空比可调的锯齿波、阶梯波等信号的电压波形。

本实验主要是掌握方波-三角波-正弦波函数发生器的设计方法。

二、设计任务要求频率范围:100~1000Hz,1000~10000Hz输出电压:方波V pp≤24V三角波V pp=6V正弦波V pp=1V波形特征:方波t r<100μs三、实验原理本实验方波-三角波-正弦波的设计电路如下图所示:由比较器、积分器和反馈网络组成振荡器,比较器所产生的方波通过积分器变成三角波,最后利用差分放大器传输特性曲线,将三角波转换成正弦波。

具体的电路设计如下图所示,三角波-方波产生电路是把比较器与积分器首尾相连,而三角波-正弦波的变换电路采用的是单端输入-单端输出差动放大电路输入输出方式。

下面将仔细分析两个子电路。

①方波-三角波产生器方波-三角波产生器有很多种,此次试验是采用把比较器和积分器首尾相连构成方波-三角波产生器的方式,具体分析电路如下所示:集成运放A 2的输出信号三角波V O2为A 1的输入信号V 1,又因为A1的反相端接地,可得三角波输出V O2的峰值V O2m 为V O2m =ZP V R R R 132+式中的V Z 为方波的峰值电压。

因积分电路输出电压从0上升到V 1m 所需时间为1/4T,故RCT V dt R V CV R R R V Z TZ Z P MO 4141322==+=⎰其中R=R 4+R P2 ()C R R R R R T p p 132424++=从上述分析关系可得,调节R P2和电容C 的大小可改变振荡频率,改变R 2/(R P1+R 3)的比值可调节三角波的峰值。

② 三角波-正弦波产生电路三角波-正弦波产生电路的设计简图如下所示:在电路两边对称的理想条件下,流过理想的恒流源R E 的电流I O 不会随差模输入电压而变化,晶体管工作在放大区时,它的集电极电流近似为: TBE V V S E C e I I I 1111=≈α TBE V V S E C eI I I 2222=≈α假设α≈1时, )1()1(12112121TBE BE V V VC C C C C C O eI I I I I I I -+=+=+≈由于V id =V BE1-V BE2 则TidV V OC eI I -+=11同理Tid V V OC eI I+=12分析表明,如果差分电路的差模输入V id 为三角波,则I c1与I c2的波形近似为正弦波,因为单端输出电压V o3也近似为正弦波,实现了三角波-正弦波变换。

实验六 金属线胀系数测定

实验六 金属线胀系数测定

实验六金属线胀系数测定
本实验主要是用物理实验的方法来测量金属线胀系数,以了解材料的物理性质并评估
其使用范围。

金属线的胀系数是指其长度随温度变化而发生的变化。

胀系数通常是温度的函数,可
以用以下公式来计算:
α = (L –L0) / (L0 × ΔT)
其中,α为胀系数,L为材料长度,L0为初始长度,ΔT为温度变化量。

在本实验中,我们将使用蓝铜丝和一台称重器来测量其胀系数。

蓝铜丝是一种优良的
电导率材料,适合用于制造电线和电缆。

它具有良好的弹性和塑性,能够耐受高温和高压;而其胀系数随温度的变化也是非常小的。

实验步骤:
1.将一根3米长的蓝铜丝固定起来,确定其长度为L0。

2.将蓝铜丝放入烘箱中,在温度为100℃的条件下加热30分钟。

3.取出蓝铜丝,将其放置到室温下自然冷却至恒定温度,记录其长度为L1。

7.重复上述步骤,测量蓝铜丝在不同温度下的胀系数,得出其与温度的关系。

实验注意事项:
1.在实验中要注意安全,避免触电或烧伤等意外情况的发生。

2.烘箱的温度要稳定,确保加热的均匀性和准确性。

3.在蓝铜丝加热和冷却过程中,要避免其与其他物体摩擦或外力作用。

4.测量过程中要准确记录数据,并保证实验环境的稳定性。

实验结果分析:
根据测量获得的数据,可以得出蓝铜丝的胀系数与温度的函数关系,得到其随温度的
变化规律。

这为材料的设计和应用提供了必要的参考信息。

通过本实验,我们可以深入了解金属材料的物理性质,为材料的选择和使用提供科学
依据,有助于提高制造工艺和产品质量。

窗函数及其对信号频谱的影响

窗函数及其对信号频谱的影响

实验六窗函数及其对信号频谱的影响一.实验目的1. 掌握几种典型窗函数的性质、特点,比较几种典型的窗函数对信号频谱的影响。

2. 通过实验认识它们在克服 FFT 频谱分析的能量泄漏和栅栏效应误差中的作用,以便在实际工作中能根据具体情况正确选用窗函数二、实验原理实际应用的窗函数,可分为以下主要类型:1. 幂窗--采用时间变量某种幂次的函数,如矩形、三角形、梯形或其它时间(t)的高次幂;2. 三角函数窗--应用三角函数,即正弦或余弦函数等组合成复合函数,例如汉宁窗、海明窗等;3. 指数窗--采用指数时间函数,如e-st形式,例如高斯窗等。

下面介绍几种常用窗函数的性质和特点。

a) 矩形窗——矩形窗属于时间变量的零次幂窗,函数形式为:相应的窗谱为:矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。

这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。

b) 汉宁(Hanning)窗——汉宁窗又称升余弦窗,其时域表达式为:相应的窗谱为:由此式可以看出,汉宁窗可以看作是3个矩形时间窗的频谱之和,或者说是 3个 sine(t)型函数之和,而括号中的两项相对于第一个谱窗向左、右各移动了π/T,从而使旁瓣互相抵消,消去高频干扰和漏能。

可以看出,汉宁窗主瓣加宽并降低,旁瓣则显著减小,从减小泄漏观点出发,汉宁窗优于矩形窗.但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。

c)海明(Hamming)窗——海明窗也是余弦窗的一种,又称改进的升余弦窗,其时间函数表达式为:相应的窗谱为:海明窗与汉宁窗都是余弦窗,只是加权系数不同。

海明窗加权的系数能使旁瓣达到更小。

分析表明,海明窗的第一旁瓣衰减为一42dB.海明窗的频谱也是由3个矩形时窗的频谱合成,但其旁瓣衰减速度为20dB/(10oct),这比汉宁窗衰减速度慢。

海明窗与汉宁窗都是很有用的窗函数。

不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。

实验六用窗函数法设计FIR滤波器分析解析

实验六用窗函数法设计FIR滤波器分析解析

实验六用窗函数法设计FIR滤波器分析解析一、引言数字滤波器是数字信号处理中的重要组成部分。

滤波器可以用于去除噪声、调整频率响应以及提取感兴趣的信号。

有许多方法可以设计数字滤波器,包括窗函数法、频域法和优化法等。

本实验将重点介绍窗函数法设计FIR滤波器的原理和过程。

二、窗函数法设计FIR滤波器窗函数法是设计FIR滤波器的一种常用方法。

其基本原理是将滤波器的频率响应与理想滤波器的频率响应进行乘积。

理想滤波器的频率响应通常为矩形函数,而窗函数则用于提取有限长度的理想滤波器的频率响应。

窗函数的选择在FIR滤波器的设计中起着重要的作用。

常用的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等。

对于每种窗函数,都有不同的特性和性能指标,如主瓣宽度、副瓣抑制比等。

根据不同的应用需求,可以选择合适的窗函数。

窗函数法设计FIR滤波器的具体步骤如下:1.确定滤波器的阶数N。

阶数N决定了滤波器的复杂度,一般情况下,阶数越低,滤波器的简单度越高,但频率响应的近似程度也会降低。

2.确定滤波器的截止频率。

根据应用需求,确定滤波器的截止频率,并选择合适的窗函数。

3.根据窗函数长度和截止频率计算理想滤波器的频率响应。

根据所选窗函数的特性,计算理想滤波器的频率响应。

4.根据理想滤波器的频率响应和窗函数的频率响应,得到所需的FIR滤波器的频率响应。

将理想滤波器的频率响应与窗函数的频率响应进行乘积,即可得到所需滤波器的频率响应。

5.对所得到的频率响应进行逆傅里叶变换,得到时域的滤波器系数。

6.实现滤波器。

利用所得到的滤波器系数,可以通过卷积运算实现滤波器。

三、实验结果与分析本实验以Matlab软件为平台,利用窗函数法设计了一个低通滤波器。

滤波器的阶数为16,截止频率为500Hz,采样频率为1000Hz,选择了汉宁窗。

根据上述步骤,计算得到了所需的滤波器的频率响应和时域的滤波器系数。

利用这些系数,通过卷积运算,实现了滤波器。

为了验证滤波器的性能,将滤波器应用于输入信号,观察输出信号的变化。

实验六Hermite 插值

实验六Hermite 插值
x=x1;
while(x<x2)
{
pDC->SetPixel(int(300*x+0.5),int(-300.0*Hermite(x)+0.5),RGB(255,0,0));
//Hermite方法逼近函数
x=x+0.002;
}
}
结果截图:
原函数图像
Hermite两点三次分段插值函数图像
Hermite两点三次分段插值函数图像与原函数图像的对照
xqHii=Daof(cx[i+1])*(x-cx[i+1])*(x-cx[i])*(x-cx[i])/(cx[i+1]-cx[i])/(cx[i+1]-cx[i]);
return xqHi+xqHii;
}
此段返回:H0(x)*f(cx[i])+H1(x)*f(cx[i]);
在(x1,x2)区间函数的三次两点插值函数
分段线性插值函数得到的是一个分段函数。根据传入的自变量的值确定其属于某一区间段,进而调用该段的对应函数。程序实现细则如下:
源代码:
在(X【i】,X【i+1】)区间的h0(x),H0(x),h1(x),H1(x);
double CMyView::h(int i, double x)
{
double xqhi,xqhii;
结果分析:
Hermite两点三次分段插值函数在形值点之间满足函数值与原函数相等,一阶导数相等的较为严格的条件,故其图像与原函数非常相近。
double CMyView::Hermite(double x)
{
int i;
for(i=0;i<N;i++)

实验六用窗函数设计FIR滤波器

实验六用窗函数设计FIR滤波器

实验六用窗函数设计FIR滤波器一、引言数字滤波器是用于处理数字信号的重要工具,而FIR(Finite Impulse Response)滤波器是其中一类常见的滤波器。

在FIR滤波器中,输出信号的每个样本值仅依赖于输入信号在过去固定时间窗口内的样本值。

窗函数则是用于设计FIR滤波器的一种常见方法。

本实验将介绍如何用窗函数设计FIR滤波器,并通过一系列实验验证其性能。

二、实验目的1.了解FIR滤波器的原理和窗函数设计方法。

2.利用MATLAB工具进行FIR滤波器设计与性能评估。

3.分析不同窗函数对FIR滤波器的影响。

三、窗函数设计方法在设计FIR滤波器时,可以通过选择不同的窗函数来实现不同的频率响应。

常见的窗函数有矩形窗、汉宁窗、汉明窗、布莱克曼窗等。

在本实验中,我们将以汉宁窗为例进行讲解。

1.首先确定滤波器的截止频率和通带误差。

2.根据通带误差和滤波器的截止频率计算阶数。

3.根据阶数选择合适大小的窗口长度。

4.选择合适的窗函数,如汉宁窗。

5.计算窗函数的系数,并与理想滤波器的冲击响应相乘得到最终的滤波器系数。

四、实验步骤1.确定滤波器参数:截止频率、通带误差等。

2.根据通带误差和截止频率计算滤波器的阶数。

3.选择合适大小的窗口长度,通常选择大于滤波器阶数的2倍。

4.选择窗函数,如汉宁窗,计算窗函数的系数。

5.根据窗函数系数和截止频率计算滤波器的系数。

6.绘制滤波器的频率响应曲线。

7.利用设计好的FIR滤波器对输入信号进行滤波,并观察滤波效果。

五、实验结果与分析在本实验中,我们选择了截止频率为1kHz的低通滤波器。

首先计算滤波器的阶数,假设通带误差为0.01,根据公式可得N=3.32/((截止频率*通带误差)/采样频率)≈60。

我们选择窗口长度为120,即滤波器的阶数的两倍。

接下来选择汉宁窗作为窗函数,并计算其系数。

最后通过窗函数系数和截止频率计算得到滤波器的系数。

实验采用不同窗函数设计的FIR滤波器进行滤波,观察不同窗函数对滤波器性能的影响。

C语言程序设计实验六函数答案《西北民大电气学院》

C语言程序设计实验六函数答案《西北民大电气学院》

实验六函数一,实验目的:1,掌握定义函数的方法.2,掌握函数实参与形参的对应关系,以及"值传递"的方式.3,掌握函数的嵌套调用和递归调用的方法.4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.二,实验准备:1,复习函数调用的基本理论知识.2,复习函数的嵌套调用和递归调用的方法.3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用. 4,源程序.三,实验步骤及内容:1,运行程序并回答问题(1)程序main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n")}void print_message(){ printf("Good Friend! \n");}void play(n)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}}问题:运行后出现什么错误为什么应如何修改请上机调试.修改:main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n");(缺少分号)}void print_message(){ printf("Good Friend! \n");}play(n)(原先void的与声明类型不同)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}getch();}运行结果(2)以下程序用于计算1+2+3+4+5.main(){ int i,sum;for(i=1;i<=5;++i)sum=add(i);printf("sum=%d\n",sum);getch();}add (a)int a;{static int s=0;s=s+a;return(s);}运行结果:问题:此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.(3)程序int x=567,y=890;main(){ printf("x=%d,y=%d\n",x,y);}运行结果:问题:运行程序后出现什么错误为什么如何修改答:定义位置出错,y的定义在主函数之后了,将y的定义改在和x一样的位置处。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六 函数
一、实验目的
1.掌握自定义函数的一般结构及定义函数的方法。

2.掌握形参、实参、函数原型等重要概念。

3.掌握函数声明、函数调用的一般方法。

4. 了解函数的嵌套调用以及函数的递归调用的格式。

二、实验预习
1 .理解为什么要在程序中引入函数?函数的引入对程序的整体结构有什么样的影响?
2. 函数的定义格式,理解函数的类型说明符根据什么来确定?
3. 充分理解函数实参和形参的联系和区别,掌握单向值传递的意义。

4. 了解针对不同返回类型的函数返回值的应用,尤其是有无return 语句的区别。

5. 掌握函数调用与函数声明的格式,了解什么情况下需要进行函数声明?什么情况下不需要?
6. 了解函数嵌套调用和递归调用的原理及使用原则。

三、实验内容
(一)阅读并调试下列程序,根据要求给出程序结果。

1.求三角形面积函数。

⑴ 编程分析
① 设三角形边长为a 、b 、c ,面积area 的算法是s=(a+b+c)/2, area=))()((c s b s a s s --- ,其中 显然,要计算三角形面积,需要用到三个参数,面积函数的返回值的数据类型应为实型。

② 尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。

⑵ 参考程序
/* 定义和使用求三角形面积函数的程序 */
#include "math.h"
#include "stdio.h"
float area(float,float,float); /*函数的声明*/
void main()
{
float a,b,c;
printf("请输入三角形的三个边长值:\n")
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a&&a>0.0&&b>0.0&&c>0.0)
printf("Area=%-7.2f\n",area(a,b,c));
/* 以下是计算任意三角形面积的函数 */
float area(float a,float b,float c)
{
float s,area_s;
s=(a+b+c)/2.0;
area_s=sqrt(s*(s-a)*(s-b)*(s-c));
return(area_s);
}
⑶ 程序调试
① 三角形面积函数area()不能单独调试,需要通过主函数调用来进行调试。

② 输入多个边长数据进行测试,在输入时,应考虑多种情况,如:负数值、零值、构不成三角形的数值等。

2.菜单程序。

编写一个菜单程序,运行后首先在屏幕显示如下菜单,当输入数值1后,调用显示“&”图案的函数程序;输入数值2后,调用显示“$”图案的函数程序;输入数值3后结束程序。

**********************************
* Menu section *
* 1. Design(&) *
* 2. Design($) *
* 3. Exit *
**********************************
⑴ 编程分析
① 在主程序中生成菜单,并提供数值输入和函数调用功能。

② 分别设计显示“&”图案的design1()函数和显示“$”图案的
design2()函数,以供主函数调用。

design1()和design2()都为void型
函数,无返回值,函数参数也可以缺省。

⑵ 参考程序
/* 菜单程序 */
#include "stdio.h"
void design1(),design2();
void main()
{
int op; /* 以下代码生成菜单 */
printf("\n*************************************");
printf("\n* Menu section *");
printf("\n* 1. Design(&) *");
printf("\n* 2. Design($) *");
printf("\n* 3. Exit *");
printf("\n*************************************");
printf("\nPlease enter selection:");
scanf("%d",&op);
if(op==1)
design1();
else if(op==2)
design2();
else
exit(0);
}
/* 以下是显示&图案的函数 */
void design1()
{
int i;
char str[31]="&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&";
for(i=1;i<10;i++)
puts(str);
return;
}
/* 以下是显示$图案的函数 */
void design2()
{
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<i;j++)
putchar(' ');
for(j=1;j<30;j++)
putchar('$');
printf("\n");
}
return;
}
⑶ 程序调试
① 为提高程序的调试效率,在设计使用菜单程序之前,首先调试两个图案显示函数。

② 在调试菜单程序时,可以使用简单的空函数,即函数体只包含一个“return;”语句的函数。

③将主函数中的if-else结构尝试采用switch结构来实现,给出最后结果,并分析两种实现方法的异同。

3. 分析下面的程序,根据所学内容对上述程序进行调试,调试通过后写出运行结果。

(1)程序分析
①下面这个程序运行有些错误,学生应该从以下几点来考虑如何修改,使程序正常运行。

在函数被调用前是否需要函数声明?函数返回值是否需要return语句?函数定义时的类型标识符应该根据什么来确定?
②根据以上的提示对程序进行调试,并总结出这一类程序的关于函数声明,函数调用以及函数的返回值等相关的语法点。

(2)参考程序
#include <stdio.h>
main()
{
float n;
float x=1.0,y=2.0;
n=s(x,y);
printf("x=%5.2f,y=%5.2f,n=%5.2f",x,y,n);
}
s(float x,float y)
{
float z;
float x=3.0,y=4.0;
z=x+y;
}
(3)程序的执行结果为____________________________________________。

(二)程序编制题
1. 写一个函数,使给定的一个二维整型数组(3×3)转置,即行列互换。

2. 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

3. 用递归法将一个整数n转换成字符串。

例如,输入483,应输出字符串“483”。

n的位数不确定,可以是任意位数的整数。

四、思考题
1.理解局部变量和全局变量的概念区别。

以及如何在程序中使用静态变量。

2.在本实验的菜单程序中再增加一些菜单项,需要调用的用户函数名及其功能自己确定。

3. 比较地址传递和值传递的异同点。

相关文档
最新文档