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

📄 real_squence2n_fft.c

📁 2N点实序列FFT_C程序 上《数字信号处理》课程时编的
💻 C
字号:
#include  <math.h>
#include  "fft.c"   /*fft.c为一已知的函数,用它来计算N点复序列的FFT*/

 /********************************
 本程序输入参数:
 x:    2N点实序列x[]的首地址。
 len:   实序列x[]的长度,即信号x[]的点数2N。
输出参数:
y:     FFT变换后的2N点复序列的首地址。   
****************************/
struct  compx  * real_squence2N_fft (float *x, int len)  /*x为2N实序列的首地址,len代表长度为2N*/
{
   int i,j,k,N; float *x1,*x2;
   struct compx * y;
   N=len/2;
   x1=(float *)calloc(N,sizeof(float));
   x2=(float *)calloc(N,sizeof(float));
   y=(struct compx *)calloc(len,sizeof(struct compx)); /*在内存中开辟一个复序列数组,首址为y,长度为len=2N,
														2N为2的M次方,M=1,2,…,16*/	
 
/*①将经2N点x(n)分解为N点偶实数x1(n)和N点奇实数x2(n)*/
	for(i=0,j=0,k=0;  k<=len-1;  k++)
	{x1[i]=x[2*k];
     x2[j]=x[2*k+1];
     i++;j++;
	}
/*②将N点x1(n)和N点x2(n)组装成N点复序列y(n)*/
   for (i=0;  i<=N-1;  i++)
   {  y[i].real=x1[i];
      y[i].imag=x2[i];
   }
/*③调用fft.c求N点复序列y(n)的DFT*/
  fft(y,N);/*y为N点复序列的首地址,N代表长度*/

/*④利用共轭性求第N点,第N+1点,…第2N点的FFT*/
    for(k=1;  k<=N;  k++ )
	{
		y[N-k].real=y[k].real;
		y[N-k].imag=-1*y[k].imag;

	}
free (x1);free (x2);

return y;
}

⌨️ 快捷键说明

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