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

📄 库函数.txt

📁 本函数利用调用库函数的方法实现了实函数快速傅里叶变换
💻 TXT
字号:
实验内容:
	  用c语言实现512点的FFT算法,对给定文件进行FFT变换。
实现方法:利用DSP提供的几个库函数对数据进行变换,在主函数中调用。
          调用的库函数有:twidfftrad2_fr16   cabs_fr16    rfft_fr16


以下对这三个库函数的算法进行说明:
1.twidfftrad2_fr16 
  创建FFT蝶形算法中的旋转因子数组w[] 
  主要是利用循环,欧拉公式,及角度的对称性对数组的每一项进行赋值
  具体就不赘述了。
2.cabs_fr16
  用于对FFT结果输出的复数进行求模运算,然后作为整个程序的结果,并画图。
3.cfft_fr16
  对复数数据实现快速傅里叶变换的程序。
  主要的方法是用三重循环实现整个蝶形运算。
  程序的实现流程图如下:
  (1)保护现场,保存一些程序中需要用的寄存器数据;
  (2)读取一些计算用的初始数据,输入数据复制到输出数组中;
  (3)因为按时间抽取的算法第一层的蝶形运算旋转因子都为常数1,故先进行一次蝶形运算,并将运算结果保存到原来的数据段中。
  (4)紧接着再进行一次蝶形运算,旋转因子位w[0]和w[n/4]也比较简单,进行原位运算。
  (5)判断原始输入数据的长度,=4:直接跳转到结束代码段;=8:跳转到最后一次蝶形运算的代码段;>8:进行三重循环的蝶形运算算法。
  (6)最后一次蝶形运算只有一组蝶形运算,是数据的前半部分和后半部分进行对应的运算。
  (7)结束程序,恢复现场。
4.rfft_fr16
  对实数数据实现快速傅里叶变换的程序。
  主体是调用cfft_fr16程序进行复数变换,再将输入实数放入到这些复数中。
  最简单的方法是将实数最为复数的实部或虚部,在将n个复数变换,不过这种方法处理的是n个数据,运算量比较大,库函数采用的是下面这种方法:
  将原实数数据的偶数部分作为复数的实部,奇数部分作为复数的虚部系数。当然实部和虚部系数是两个相邻的实数组成,这样就得到了一个只有n/2
  个复数的数据,再对它进行变换和其他运算,就可得到原始数据的变换,这样的处理使得处理的数据减半,运算量大大减少,是一种优化算法。
  程序的实现流程图如下:
  (1)进行一些适当的参数处理,以便调用cfft_fr16.
  (2)调用cfft_fr16,得到一组数据,里面有n/2个数据。
  (3)利用上面的数据得到我们需要的结果,先保护现场。
  (4)利用循环的方法,利用缓冲存储空间,分别求出原数据奇偶数项的各自的傅里叶变换结果。
     具体是要求出cfft_fr16运行结果中数据的周期性共轭分量和周期性反共轭分量。
  (5)由奇偶项的傅里叶变换求出整个数据的变换。这一实现利用了下面这两个公式:
     X[k]=X1[k]+w[k]X2[k],  X[k+n/2]=X1[k]-w[k]X2[k]
     程序中是利用两部分计算,前一部分计算0~n/2的结果,使用循环和各种简单的加减运算实现。
     第二部分计算后一半的结果。
  (6)程序结束,恢复现场。
  
  
  

⌨️ 快捷键说明

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