hanjingyu2008的个人空间 https://blog.eetop.cn/219089 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

64点FFT 计算

已有 2953 次阅读| 2019-2-28 20:11 |系统分类:芯片设计

64点FFT 计算


 

目录

1.       工作说明

2.       系数计算

3.       数据选取

4.       变量说明

5.       仿真结果

1)      波形

2)      Transcript

6.       Matlab 验证

 


1. 工作说明

1.     采用硬件RTL代码实现串行64FFT算法

具体实现方法不做硬性要求,可以自行定义

FFT输入I/Q数据为8bits有符号数,输出I/Q数据20bits。数据存储模块可以用verilog二维数组建模

2.     FFT基本公式如下

3.     给出算法结构设计以及RTL代码


ModelSim SE10.1a

Matlab  R2010a


采用基2时间抽取方式, 6级蝶形运算

P64为位序重排(由于太大,下图中仅画了上半部分)

 

 

 

2. 系数计算

 

WNk  = e-j2πk/N = cos(2πk/N) + j sin(2πk/N)

 

1级:N =  2  W2k  = cos(kπ)      + j sin(kπ)           k= 0

2级:N =  4  W4k  = cos(kπ/2)   + j sin(kπ/2)         k= 0~1

3级:N =  8  W8k  = cos(kπ/4)   + j sin(kπ/4)         k= 0~3

4级:N = 16 W16k  = cos(kπ/8)   + j sin(kπ/8)         k= 0~7

5级:N = 32 W32k  = cos(kπ/16) + j sin(kπ/16)    k= 0~15

6级:N = 64 W64k  = cos(kπ/32) + j sin(kπ/32)    k= 0~31

 

参数的计算结果由matlab给出,因为实部、虚部都是小数,为方便,均乘以255并取整。数据写入文档Data_Parameter.txt,用于verilog读入。

每次进行复数乘法的时候,计算前对输入数据乘以256,计算完成后除以256,即右移8位,会造成一点误差。

   

 

3. 数据选取

matlab对一个完整的sin曲线选取648bit有符号数作为输入数据存储在文档Data_FFT.txt内,modelsim调用此数据作为输入数据,输入数据为实数点。

进入系统后, 64个输入数据的I/Q分别扩展为20位有符号数,方便后期同址运算。

随后进行6级的同址运算。

 


4. 变量说明

 

 

5. Matlab 验证

 

Matlab验证结果(FFT_Matlab_Verify.m

结果比对接近。数值的微弱差异是由于对cossin的近似引起的。



 

6. 仿真结果

1)    波形

因为采用测试模式编写,没有波形

 

2)    Transcript

 

# Loading work.TESTBENCH(fast)

run

#

#

# 0.Load Data

#   0:(    0,   0 j)

#   1:(   12,   0 j)

#   2:(   25,   0 j)

#   3:(   37,   0 j)

#   4:(   49,   0 j)

#   5:(   60,   0 j)

#   6:(   71,   0 j)

#   7:(   81,   0 j)

#   8:(   90,   0 j)

#   9:(   99,   0 j)

#  10:(  106,   0 j)

#  11:(  113,   0 j)

#  12:(  118,   0 j)

#  13:(  122,   0 j)

#  14:(  125,   0 j)

#  15:(  126,   0 j)

#  16:(  126,   0 j)

#  17:(  126,   0 j)

#  18:(  123,   0 j)

#  19:(  120,   0 j)

#  20:(  115,   0 j)

#  21:(  109,   0 j)

#  22:(  103,   0 j)

#  23:(   95,   0 j)

#  24:(   86,   0 j)

#  25:(   76,   0 j)

#  26:(   66,   0 j)

#  27:(   55,   0 j)

#  28:(   43,   0 j)

#  29:(   31,   0 j)

#  30:(   18,   0 j)

#  31:(    6,   0 j)

#  32:(   -6,   0 j)

#  33:(  -18,   0 j)

#  34:(  -31,   0 j)

#  35:(  -43,   0 j)

#  36:(  -55,   0 j)

#  37:(  -66,   0 j)

#  38:(  -76,   0 j)

#  39:(  -86,   0 j)

#  40:(  -95,   0 j)

#  41:( -103,   0 j)

#  42:( -109,   0 j)

#  43:( -115,   0 j)

#  44:( -120,   0 j)

#  45:( -123,   0 j)

#  46:( -126,   0 j)

#  47:( -126,   0 j)

#  48:( -126,   0 j)

#  49:( -125,   0 j)

#  50:( -122,   0 j)

#  51:( -118,   0 j)

#  52:( -113,   0 j)

#  53:( -106,   0 j)

#  54:(  -99,   0 j)

#  55:(  -90,   0 j)

#  56:(  -81,   0 j)

#  57:(  -71,   0 j)

#  58:(  -60,   0 j)

#  59:(  -49,   0 j)

#  60:(  -37,   0 j)

#  61:(  -25,   0 j)

#  62:(  -12,   0 j)

#  63:(    0,   0 j)

#

#

# 1.Load Parameter

#   0:(  127,   0j)

#   1:(  127,   0j)

#   2:(    0,-127j)

#   3:(  127,   0j)

#   4:(   89, -89j)

#   5:(    0,-127j)

#   6:(  -89, -89j)

#   7:(  127,   0j)

#   8:(  117, -48j)

#   9:(   89, -89j)

#  10:(   48,-117j)

#  11:(    0,-127j)

#  12:(  -48,-117j)

#  13:(  -89, -89j)

#  14:( -117, -48j)

#  15:(  127,   0j)

#  16:(  124, -24j)

#  17:(  117, -48j)

#  18:(  105, -70j)

#  19:(   89, -89j)

#  20:(   70,-105j)

#  21:(   48,-117j)

#  22:(   24,-124j)

#  23:(    0,-127j)

#  24:(  -24,-124j)

#  25:(  -48,-117j)

#  26:(  -70,-105j)

#  27:(  -89, -89j)

#  28:( -105, -70j)

#  29:( -117, -48j)

#  30:( -124, -24j)

#  31:(  127,   0j)

#  32:(  126, -12j)

#  33:(  124, -24j)

#  34:(  121, -36j)

#  35:(  117, -48j)

#  36:(  112, -59j)

#  37:(  105, -70j)

#  38:(   98, -80j)

#  39:(   89, -89j)

#  40:(   80, -98j)

#  41:(   70,-105j)

#  42:(   59,-112j)

#  43:(   48,-117j)

#  44:(   36,-121j)

#  45:(   24,-124j)

#  46:(   12,-126j)

#  47:(    0,-127j)

#  48:(  -12,-126j)

#  49:(  -24,-124j)

#  50:(  -36,-121j)

#  51:(  -48,-117j)

#  52:(  -59,-112j)

#  53:(  -70,-105j)

#  54:(  -80, -98j)

#  55:(  -89, -89j)

#  56:(  -98, -80j)

#  57:( -105, -70j)

#  58:( -112, -59j)

#  59:( -117, -48j)

#  60:( -121, -36j)

#  61:( -124, -24j)

#  62:( -126, -12j)

#

#

# 2.ReConfig Input Data

#   0:(        0,       0 j)

#   1:(       -6,       0 j)

#   2:(      126,       0 j)

#   3:(     -126,       0 j)

#   4:(       90,       0 j)

#   5:(      -95,       0 j)

#   6:(       86,       0 j)

#   7:(      -81,       0 j)

#   8:(       49,       0 j)

#   9:(      -55,       0 j)

#  10:(      115,       0 j)

#  11:(     -113,       0 j)

#  12:(      118,       0 j)

#  13:(     -120,       0 j)

#  14:(       43,       0 j)

#  15:(      -37,       0 j)

#  16:(       25,       0 j)

#  17:(      -31,       0 j)

#  18:(      123,       0 j)

#  19:(     -122,       0 j)

#  20:(      106,       0 j)

#  21:(     -109,       0 j)

#  22:(       66,       0 j)

#  23:(      -60,       0 j)

#  24:(       71,       0 j)

#  25:(      -76,       0 j)

#  26:(      103,       0 j)

#  27:(      -99,       0 j)

#  28:(      125,       0 j)

#  29:(     -126,       0 j)

#  30:(       18,       0 j)

#  31:(      -12,       0 j)

#  32:(       12,       0 j)

#  33:(      -18,       0 j)

#  34:(      126,       0 j)

#  35:(     -125,       0 j)

#  36:(       99,       0 j)

#  37:(     -103,       0 j)

#  38:(       76,       0 j)

#  39:(      -71,       0 j)

#  40:(       60,       0 j)

#  41:(      -66,       0 j)

#  42:(      109,       0 j)

#  43:(     -106,       0 j)

#  44:(      122,       0 j)

#  45:(     -123,       0 j)

#  46:(       31,       0 j)

#  47:(      -25,       0 j)

#  48:(       37,       0 j)

#  49:(      -43,       0 j)

#  50:(      120,       0 j)

#  51:(     -118,       0 j)

#  52:(      113,       0 j)

#  53:(     -115,       0 j)

#  54:(       55,       0 j)

#  55:(      -49,       0 j)

#  56:(       81,       0 j)

#  57:(      -86,       0 j)

#  58:(       95,       0 j)

#  59:(      -90,       0 j)

#  60:(      126,       0 j)

#  61:(     -126,       0 j)

#  62:(        6,       0 j)

#  63:(        0,       0 j)

#

#

# 3.Start FFT

#

#

# 3. 1  stage:  32 *    2 points. (Wn_Bias:   0)

#  1,  0, 0: CalData:(      -5        0j)(       5        0j) Parameter:( 127    0j)

#  1,  1, 0: CalData:(       0        0j)(     251        0j) Parameter:( 127    0j)

#  1,  2, 0: CalData:(      -4        0j)(     184        0j) Parameter:( 127    0j)

#  1,  3, 0: CalData:(       5        0j)(     166        0j) Parameter:( 127    0j)

#  1,  4, 0: CalData:(      -5        0j)(     103        0j) Parameter:( 127    0j)

#  1,  5, 0: CalData:(       2        0j)(     227        0j) Parameter:( 127    0j)

#  1,  6, 0: CalData:(      -1        0j)(     237        0j) Parameter:( 127    0j)

#  1,  7, 0: CalData:(       6        0j)(      79        0j) Parameter:( 127    0j)

#  1,  8, 0: CalData:(      -5        0j)(      55        0j) Parameter:( 127    0j)

#  1,  9, 0: CalData:(       1        0j)(     244        0j) Parameter:( 127    0j)

#  1, 10, 0: CalData:(      -2        0j)(     214        0j) Parameter:( 127    0j)

#  1, 11, 0: CalData:(       6        0j)(     125        0j) Parameter:( 127    0j)

#  1, 12, 0: CalData:(      -4        0j)(     146        0j) Parameter:( 127    0j)

#  1, 13, 0: CalData:(       4        0j)(     201        0j) Parameter:( 127    0j)

#  1, 14, 0: CalData:(       0        0j)(     250        0j) Parameter:( 127    0j)

#  1, 15, 0: CalData:(       6        0j)(      29        0j) Parameter:( 127    0j)

#  1, 16, 0: CalData:(      -5        0j)(      29        0j) Parameter:( 127    0j)

#  1, 17, 0: CalData:(       1        0j)(     250        0j) Parameter:( 127    0j)

#  1, 18, 0: CalData:(      -3        0j)(     201        0j) Parameter:( 127    0j)

#  1, 19, 0: CalData:(       5        0j)(     146        0j) Parameter:( 127    0j)

#  1, 20, 0: CalData:(      -5        0j)(     125        0j) Parameter:( 127    0j)

#  1, 21, 0: CalData:(       3        0j)(     214        0j) Parameter:( 127    0j)

#  1, 22, 0: CalData:(       0        0j)(     244        0j) Parameter:( 127    0j)

#  1, 23, 0: CalData:(       6        0j)(      55        0j) Parameter:( 127    0j)

#  1, 24, 0: CalData:(      -5        0j)(      79        0j) Parameter:( 127    0j)

#  1, 25, 0: CalData:(       2        0j)(     237        0j) Parameter:( 127    0j)

#  1, 26, 0: CalData:(      -1        0j)(     227        0j) Parameter:( 127    0j)

#  1, 27, 0: CalData:(       6        0j)(     103        0j) Parameter:( 127    0j)

#  1, 28, 0: CalData:(      -4        0j)(     166        0j) Parameter:( 127    0j)

#  1, 29, 0: CalData:(       5        0j)(     184        0j) Parameter:( 127    0j)

#  1, 30, 0: CalData:(       0        0j)(     251        0j) Parameter:( 127    0j)

#  1, 31, 0: CalData:(       6        0j)(       6        0j) Parameter:( 127    0j)

#

#

# 3. 2  stage:  16 *    4 points. (Wn_Bias:   1)

#  2,  0, 0: CalData:(      -5        0j)(      -5        0j) Parameter:( 127    0j)

#  2,  0, 1: CalData:(       5     -249j)(       5      249j) Parameter:(   0 -127j)

#  2,  1, 0: CalData:(       0        0j)(      -8        0j) Parameter:( 127    0j)

#  2,  1, 1: CalData:(     184     -164j)(     184      164j) Parameter:(   0 -127j)

#  2,  2, 0: CalData:(      -3        0j)(      -6        0j) Parameter:( 127    0j)

#  2,  2, 1: CalData:(     103     -225j)(     103      225j) Parameter:(   0 -127j)

#  2,  3, 0: CalData:(       4        0j)(      -6        0j) Parameter:( 127    0j)

#  2,  3, 1: CalData:(     237      -78j)(     237       78j) Parameter:(   0 -127j)


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 6

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3128

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 19:40 , Processed in 0.025274 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部