⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xnhnjiadian.txt

📁 数字信号处理dsp的一些c语言源代码
💻 TXT
字号:
#include"graphics.h"
#include"math.h"
#include"stdio.h"
void figure(float x[],int m);
void figure1(float x[],int m);
void DO(float m[],int n);
void dft(float x[],int m,float rx[],float cx[])
{
int k,n;
for(k=0;k<=m-1;k++)
{
rx[k]=0;cx[k]=0;
for(n=0;n<=m-1;n++)
{rx[k]=rx[k]+x[n]*(cos(2*3.14*n*k/m));
cx[k]=cx[k]-x[n]*(sin(2*3.14*n*k/m));
}
}
}





void idft(float rx[],float cx[],int m,float ry[],float cy[])
{
int k,n;
rx[k]=0;cx[k]=0;ry[k]=0;cy[k]=0;
for(k=0;k<=m-1;k++)
{
for(n=0;n<=m-1;n++)
{ ry[k] += rx[n]*cos(2*3.14*n*k/m) - cx[n]*sin(2*3.14*n*k/m);

  cy[k] += cx[n]*cos(2*3.14*n*k/m) + rx[n]*sin(2*3.14*n*k/m);

}
}
for (k=0; k<m; k++)

    {

        ry[k]=ry[k]/m;

        cy[k]=cy[k]/m;

    }

}






main()
{int n=0;int m=32;float ry[80]={0};float cy[80]={0};float y[80]={0};      
float rx1[80]={0},cx1[80]={0},rx2[80]={0},cx2[80]={0},b[80]={0};
float rz[80]={0},cz[80]={0},x3[80]={0},x4[80]={0},y3[80]={0};
float x[50]={0}, h[50]={0};
for(n=0;n<32;n++)
 {x[n]=n+1;
  h[n]=1;
}
for(n=32;n<63;n++)
{x[n]=0;
  h[n]=0;

}



dft(h,63,rx2,cx2);




dft(x,63,rx1,cx1);


for(n=0;n<63;n++)
{rz[n]=rx1[n]*rx2[n]-cx1[n]*cx2[n];           /*频域乘积的实部*/
cz[n]=rx1[n]*cx2[n]+rx2[n]*cx1[n]; 

}        /*频域乘积的虚部*/



printf("\nidft\n");
idft( rz,cz,63, ry, cy);

for(n=0;n<63;n++)
b[n]=sqrt(ry[n]*ry[n]+cy[n]*cy[n]);
figure1(b,63);
getch();
closegraph();
}






void figure(float x[],int m)/*m为序列数*/
{
int gdriver,gmode,i;float mul=0;
gdriver=VGA;
gmode=VGAHI;
initgraph(&gdriver,&gmode,"");
setfillstyle(0,1);
bar(0,0,640,640);
setcolor(2);
outtextxy(600,460,"n");
outtextxy(10,20,"signal");
line(10,460,610,460);
line(10,200,10,500);
for(i=0;i<m;i++)
{if(x[i]>mul)mul=x[i];}
mul=mul/220;
for(i=0;i<m;i++)
{setcolor(2);
line(600/m*i+10,460-x[i]/mul,600/m*i+10,460);}
}
void DO(float m[],int n)
{
float RX[60]={0},CX[60]={0},X[60]={0};int i;
printf("print the signal?\n");getch();
figure(m,n);outtextxy(50,500,"signal");
}

void figure1(float x[],int m)/*m为序列数*/
{
int gdriver,gmode,i;float mul=0;
gdriver=VGA;
gmode=VGAHI;
initgraph(&gdriver,&gmode,"");
setfillstyle(0,1);
bar(0,0,640,640);
setcolor(2);
outtextxy(600,230,"n");
outtextxy(5,20,"signal");
line(10,240,610,240);
line(10,10,10,500);
for(i=0;i<m;i++)
{if(x[i]>mul)mul=x[i];}
mul=mul/240;
for(i=0;i<m;i++)
{setcolor(2);
line(600/m*i+10,240-x[i]/mul,600/m*i+10,240);}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -