信号与系统连续时间系统的频率响应

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

实验报告

实验名称:连续时间系统的频率响应

一、实验目的:

1 加深对连续时间系统频率响应理解;

2 掌握借助计算机计算任意连续时间系统频率响应的方法。

二、实验原理:

连续时间系统的频率响应可以直接通过所得表达式计算,也可以通过零极点

图通过用几何的方法来计算,而且通过零极点图可以迅速地判断系统的滤波特

性。

根据系统函数H(s)在s平面的零、极点分布可以绘制频响特性曲线,包括幅

频特性 H(jw) 曲线和相频特性?(w)曲线。这种方法的原理如下:

假定,系统函数H(s)的表达式为

当收敛域含虚轴时,取s = jw,也即在s平面中,s沿虚轴从- j∞移动到+ j∞时,

得到

容易看出,频率特性取决于零、极点的分布,即取决于Zj 、Pi 的位置,而式中K

是系数,对于频率特性的研究无关紧要。分母中任一因子(jw- Pi )相当于由极点 p 引向虚轴上某点 jw的一个矢量;分子中任一因子(jw-Zj)相当于由零点Zj引至虚轴上某点 jw的一个矢量。

在右图示意画出由零点Zj和极点 Pi 与 jw点连接构成的两个矢量,图中Nj、Mi 分别表示矢量的模,ψj、θi 表示矢量的辐角(矢量与正实轴的夹角,逆时针为正)。对于任意零点Zj 、极点Pi ,相应的复数因子(矢量)都可表示为:

于是,系统函数可以改写为

当ω延虚轴移动时,各复数因子(矢量)的模和辐角都随之改变,于是得出幅频特性曲线和相频特性曲线。这种方法称为s 平面几何分析。通过零极点图进行计算的方法是: 1 在S 平面上标出系统的零、极点位置;

2 选择S 平面的坐标原点为起始点,沿虚轴向上移动,计算此时各极点和零点与该点的膜模和夹角;

3 将所有零点的模相乘,再除以各极点的模,得到对应频率处的幅频特性的值;

4 将所有零点的幅角相加,减去各极点的幅角,得到对应频率处的相角。

三、实验内容

用 C 语言编制相应的计算程序进行计算,要求程序具有零极点输入模块, 可以手工输入不同数目的零极点。

计算频率从0~5频段的频谱,计算步长为0.1,分别计算上面两个系统的幅频特性和相频特性,将所得结果用表格列出,并画出相应的幅频特性曲线和相频特性曲线。

判断所给系统的滤波特性,对于带通滤波器,计算出 3dB 带宽的起始频点和结束频点;对于低通或高通滤波器,计算出3dB 带宽的截止或开始的频率。

四、画出系统一和系统二的零极点图

系统一 系统二 五、程序流程图和程序代码 程序流程图如下:

#include

#include

#define Pi 3.1415926 struct fushu{

float re;

float im;

};

struct shuchu{

float w;

float fu;

float xiang;

};

struct fushu jianfa(struct fushu,struct fushu);

float MO(struct fushu);

float FU(struct fushu);

main()

{

char i,j;

int Li,Ji;

float w,Hw,Jw,ZH;

struct fushu lingdian[10],jidian[10],ww,LJ;

struct shuchu jieguo[51]; //根据分析,可知本实验中最后只有51个结果FILE *fp;

fp=fopen("D:\\实验二第二个.txt","w");

ZH=180/Pi;

printf("请输入零点个数:\n");

scanf("%d",&Li);

printf("请输入零点:\n");

for(i=0;i

scanf("%f%f",&lingdian[i].re,&lingdian[i].im);

printf("请输入极点个数:\n");

scanf("%d",&Ji);

printf("请输入极点:\n");

for(i=0;i

scanf("%f%f",&jidian[i].re,&jidian[i].im);

for(i=0,w=0;w<=5;w=w+0.1,i++) //求相频和幅频,循环执行{

Hw=1;Jw=0;

ww.re=0;ww.im=w;

for(j=0;j

LJ=jianfa(ww,lingdian[j]);

Hw=MO(LJ)*Hw;

Jw+=FU(LJ);

}

for(j=0;j

LJ=jianfa(ww,jidian[j]);

Hw=Hw/MO(LJ);

Jw-=FU(LJ);

}

jieguo[i].w=w; //存储数据

jieguo[i].fu=Hw;

jieguo[i].xiang=Jw;

}

for(i=0;i<51;i++)

{

while(1) //将角度限定合适范围{

if(jieguo[i].xiang<=-Pi)

jieguo[i].xiang=jieguo[i].xiang+2*Pi;

else if(jieguo[i].xiang>Pi)

jieguo[i].xiang=jieguo[i].xiang-2*Pi;

else break;

}

jieguo[i].xiang=ZH*jieguo[i].xiang;

}

printf("最终结果为:\n");

printf(" w值\tH(w)值\t F(w)值\n");

fprintf(fp,"最终结果为:\n");

fprintf(fp," w值\tH(w)值\t F(w)值\n");

for(i=0;i<51;i++) //列表输出结果

{

printf("%3.2f\t%5.3f\t%5.3f\n",jieguo[i].w,jieguo[i].fu,jieguo[i].xiang);

fprintf(fp,"%3.2f\t%5.3f\t%5.3f\n",jieguo[i].w,jieguo[i].fu,jieguo[i].xiang) ;

}

printf("输出完毕\n");

fprintf(fp,"输出完毕");

}

struct fushu jianfa(struct fushu a,struct fushu b) //两个复数相减

{

struct fushu m;

m.re=a.re-b.re;

m.im=a.im-b.im;

return(m);

}

float MO(struct fushu a) //计算a的模

{

相关文档
最新文档