实验五实验报告
实验名称:离散时间系统特性分析
一、实验目的:
1 。
深入理解单位样值响应,离散系统的频率响应的概念;
2。
掌握通过计算机进行求得离散系统的单位样值响应,以及离散系统的频率 响应的方法。
二、实验原理:
对于离散系统的单位样值而言,在实际处理过程中,不可能选取无穷多项的取值。
往往是选取有限项的取值,当然这里会产生一个截尾误差,但只要这个误差在相对小一个范围里,可以忽略不计。
另外,在一些实际的离散系统中,往往不是事先就能得到描述系统的差分方程的,而是通过得到系统的某些相应值,则此时系统的分析就需借助计算机的数值处理来进行,得到描述系统的某些特征,甚至进而得到描述系统的数学模型。
本实验首先给出描述系统的差分方程,通过迭代的方法求得系统的单位样值响应,进而求得该离散系统的频率响应。
限于试验条件,虽然给出了系统方程,但处理的方法依然具有同样的实际意义。
具体的方法是:
1 在给定系统方程的条件下,选取激励信号为δ(n),系统的起始状态为零 状态,通过迭代法,求得系统的单位样值响应h(n)(n=0,…,N )。
2 利用公式
其中Ω的取值范围为0~2π 。
计算系统的频率响应。
三、实验内容
1 已知系统的差分方程为
利用迭代法求得系统的单位样值响应,取N =10。
2 利用公式
#include <stdio.h>
#include <math.h>
#define N 10
#define M 20
#define pi 3.1415926
struct pinlv{ double fu;
double xiang;};
double h[N+1],x[N+1];
struct pinlv PL(double w)
{
double a=0, b=0,fu,xiang;
int k;
struct pinlv FX;
for(k=0;k<=N;k++){
a=a+h[k]*cos(-k*w);
b=b+h[k]*sin(-k*w);}
fu=sqrt(a*a+b*b);
xiang=atan(b/a);
if((a<0)&(b>0))
xiang=xiang+pi;
if((a<0)&(b<0))
xiang=xiang-pi;
FX.fu=fu;
FX.xiang=xiang;
return(FX);
}
main()
{
int i,j;
double w0;
struct pinlv FX[M+1];
FILE *fp1,*fp2;
fp1=fopen("H:\\单位样值响应.txt","w");
fp2=fopen("H:\\频率特性.txt","w");
h[-1]=0;h[-2]=0;
for(i=-1;i<=N;i++)
x[i]=0;
x[0]=1;
for(i=0;i<=N;i++)
h[i]=1.3*h[i-1]-0.4*h[i-2]+x[i-1];
printf("系统的单位样值响应为\n");
fprintf(fp1,"系统的单位样值响应(从x[0]开始)为\n");
fprintf(fp1,"激励x[i] 响应y[i]\n");
for(i=0;i<=N;i++)
{
printf("x[%d]=%6.3f\th[%d]=%6.3f\n",i,x[i],i,h[i]);
fprintf(fp1,"%6.3f\t%6.3f\n",x[i],h[i]);
}
printf("\n");
printf("系统的幅频和相频特性为\n");
fprintf(fp2,"系统的幅频和相频特性为\n");
fprintf(fp2,"w0\t幅度值\t相位值\n");
for(j=0;j<=M;j++)
{
w0=j*0.1*pi;
FX[j].fu=PL(w0).fu;
FX[j].xiang=PL(w0).xiang;
printf("w0=%6.3f\t fu=%6.3f\t xiang=%6.3f\n",w0,FX[j].fu,FX[j].xiang);
fprintf(fp2,"%6.3f\t%6.3f\t%6.3f\n",w0,FX[j].fu,FX[j].xiang);
}
printf("\n");
}
五、实验所得数据如下:
幅频特性曲线
相频特性曲线
虽然离散系统的信号是离散的,但是其频谱图是连续的,并且0时对应的是低频,Pi(3.14)时对应的为高频。
根据幅频图可以看出该系统为低通滤波器。