test14.c
来自「5402开发板附带的源程序」· C语言 代码 · 共 82 行
C
82 行
#include "math.h"
float im,hd[201],h[201],w[201],wc,pi;
float a,b,p,wf,re,d,db[300];
int m,n,k,i,l;
main()
{
for(;;)
{
m=1; /* m=1-5 */
n=21; /* n=21,51,101,201*/
wc=0.25; /* wc=0.10-0.90 */
l=200; /* 50-300 */
a=(n-1)/2;
pi=4.0*atan(1.0);
for(i=0;i<n;i++)
{
if(i==a)
hd[i]=wc;
else
{
b=i-a;
hd[i]=sin(pi*b*wc)/(pi*b);
}
}
switch(m)
{
case 1: /* retangular window function */
for(i=0;i<n;i++)
w[i]=1.0;
break;
case 2: /* bartlett window function */
for(i=0;i<n;i++)
{
if(i>=a)
w[i]=2.0-2.0*i/(n-1);
else
w[i]=2.0*i/(n-1);
}
break;
case 3: /* hanning window function */
for(i=0;i<n;i++)
w[i]=0.5*(1.0-cos(2.0*pi*i/(n-1)));
break;
case 4: /* hamming window function */
for(i=0;i<n;i++)
w[i]=0.54-0.46*cos(2.0*pi*(float)i/(n-1));
break;
case 5: /* blackman window function */
for(i=0;i<n;i++)
w[i]=0.42-0.5*cos(2.0*pi*i/(n-1))+0.08*cos(4.0*pi*i/(n-1));
break;
}
for(i=0;i<n;i++)
h[i]=hd[i]*w[i];
p=pi/l;
for(k=0;k<=l-1;k++)
{
wf=p*k;
re=0.0;
im=0.0;
for(i=0;i<n;i++)
{
re=re+h[i]*cos((float)i*wf);
im=im+h[i]*sin((float)i*wf);
}
d=sqrt(pow(re,2)+pow(im,2));
db[k]=20.0*log10(d);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?