#include<stdio.h>
#include<math.h>
#define dt 0.001 //时间采样间隔
#define NP 2001 //函数长度,样点数
#define df 0.5 //频率采样间隔
#define Hf 40 //最大频率
#define fc 20 //方波的高频
#define PI 3.1415926
int main(void)
{
FILE *fp;
float ft[NP];
float t,Xr,Xi,Xamp;
int i,k,Nf = Hf/df+1;
fp = fopen("Sinc_AMP2.xls","w");
for(i = -NP/2;i<=NP/2;i++)
{
t = i*dt;
if(t==0)
ft[i+NP/2]=1.0;
else
ft[i+NP/2] = sin(2*PI*fc*t)/(2*PI*fc*t);
//fprintf(fp,"%10.4f\t%10.4f\n",i*dt,ft[i+NP/2]);
}
for(k=-Nf;k<=Nf;k++)
{
Xr = 0;
Xi = 0;
for(i = -NP/2;i<=NP/2;i++)
{
t = i*dt;
Xr = Xr + ft[i+NP/2]*cos(2*PI*k*df*t);
Xi = Xi + ft[i+NP/2]*sin(2*PI*k*df*t);
}
Xamp = sqrt(Xr*Xr+Xi*Xi)*dt;
fprintf(fp,"%10.4f\t%10.4f\n",k*df,Xamp);
}
fclose (fp);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/0706ac33cc79f8108af912ae9d2b13fc.png)
抽样函数的频谱是一方波是人所共知的。
但观察上面的图片可以发现并不是一个完美的方波。
这就是因为吉布斯现象:
间断点处有一异常高值(左右均有),约为(0.0273-0.025)/0.025=0.092即发生了约为9%的高值溢出。
间断点内部的函数变化是震荡的。
当频率域间隔由0.5(分析精度不够高)减小到0.05时,在间断点的外侧(|w|>20Hz)可以观察到震荡趋于0【下图】。
![](https://i-blog.csdnimg.cn/blog_migrate/ccb7a2cbbb7f42c9025e0aa8525b2b08.png)
下面是局部放大:可以很明显的观察到震荡现象(间断点两侧均有)
![](https://i-blog.csdnimg.cn/blog_migrate/f7a874f9563d0b338f24151b76953d76.png)