在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 15125|回复: 82

谁会?

[复制链接]
发表于 2004-5-20 17:41:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
64点FFT算法
现在进行不下去了!!
刚弄完元件!!定义了16位实部输入
16位虚部输入以及16位实部输出和
16位虚部输出
和start信号
clock信号
ce
然后不知道如何在进行下去!!!!
作不出来死定了!!!55555555555
发表于 2004-5-20 17:49:49 | 显示全部楼层

谁会?

研究算法了没
 楼主| 发表于 2004-5-20 18:05:44 | 显示全部楼层

谁会?

对算法还可以,自己手算16点
以及蝶形图!!
但现在不知道数据怎么输入进去,进去后放在那里?
怎么放,还有每一级的蝶形不同怎么做?
还有旋转因子不同怎么解决?
输出到位序,怎么办?!
发表于 2004-5-21 08:17:43 | 显示全部楼层

谁会?

网上又很多关于如何用FPGA实现FFT的资料
自己搜一下吧
发表于 2004-5-23 16:23:30 | 显示全部楼层

谁会?

64-point complex FFT?
any other requirements?
发表于 2004-5-23 18:12:44 | 显示全部楼层

谁会?

[这个贴子最后由serene在 2004/05/26 00:08am 第 1 次编辑]

如果我没有理解错的话,我认为可以这样考虑(不敢保证完全正确,仅供参考。):
假设data和coeffient为16 bit宽。
entity fft is
       generic(
              coeff_width : integer := 16;
              data_width  : integer := 16;
              fft_length  : integer := 64);
       port   (
              reset       : in  std_logic;                               -- 复位,假设低有效
              clk         : in  std_logic;                               -- 输入时钟
              data_rd     : in  std_logic;                               -- New Sample Read (高电平)
              data_in_r   : in  std_logic_vector(Data_width-1 downto 0); -- 实部输入
              data_in_i   : in  std_logic_vector(Data_width-1 downto 0); -- 虚部输入
              address     : in  std_logic_vector(6 downto 0);            -- 输出矩阵地址
              data_out_r  : out std_logic_vector(Data_width-1 downto 0); -- 实部输出
              data_out_i  : out std_logic_vector(Data_width-1 downto 0); -- 虚部输出
              res_valid   : out std_logic                                -- 输出有效指示
              );
end fft;
architecture写起来就很长了。如果认为上面的entity可行的话,我们可以继续讨论。
发表于 2004-5-24 10:16:12 | 显示全部楼层

谁会?

建议你看一些DSP方面的书,FFT的实现有好几种方法的,如DIT、DIF...首先要确定用哪种方法。
比较简单的是radix-2 decimation-in-time算法,你觉得用这种怎么样?
发表于 2004-5-24 16:13:24 | 显示全部楼层

谁会?

[这个贴子最后由serene在 2004/05/26 00:09am 第 1 次编辑]

这是8点的FFT,有3个stage,64点的原理是相同的。
关于Butterflies and Bit-Reversal,请参考相关书籍。
那么64点的FFT应该有6个stage,由于后面的stage是类似的,我们可以考虑构造2种Butterfly:
第一种--Butterfly stage 1:
component stg1_butterfly
      generic(
             data_width     : integer := 16;                                  -- 数据位宽
             int_data_width : integer := 16;                                  -- 内部数据总线宽度
             tw_fact_width  : integer := 16);                                 -- 旋转因子位宽
      port   (
             reset          : in std_logic;                                   -- 复位
             clk            : in std_logic;                                   -- 时钟输入
             data_rd        : in std_logic;                                   -- New Sample Read(高电平)
             data1_r_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入1实部
             data1_i_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入1虚部
             data2_r_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入2实部
             data2_i_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入2虚部
             tf1_r          : in  std_logic_vector(tw_fact_width-1 downto 0); -- 旋转因子实部
             data1_r_out    : out std_logic_vector(int_data_width-1 downto 0);-- 输出1实部
             data1_i_out    : out std_logic_vector(int_data_width-1 downto 0);-- 输出1虚部
             data2_r_out    : out std_logic_vector(int_data_width-1 downto 0);-- 输出2实部
             data2_i_out    : out std_logic_vector(int_data_width-1 downto 0) -- 输出2虚部
             );
end component;
请你看一下这个stage 1的component构造是不是合理。
5_1335_7.jpg
发表于 2004-5-24 16:20:14 | 显示全部楼层

谁会?

[这个贴子最后由serene在 2004/05/26 00:10am 第 2 次编辑]

第二种--Butterfly:
component butterfly
     generic(
            data_width     : integer := 16;                                  -- 数据位宽
            tw_fact_width  : integer := 16);                                 -- 旋转因子位宽
     port   (
            reset          : in std_logic;                                   -- 复位
            clk            : in std_logic;                                   -- 时钟输入
            data_rd        : in std_logic;                                   -- New Sample Read(高电平)
            data1_r_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入1实部
            data1_i_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入1虚部
            data2_r_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入2实部
            data2_i_in     : in  std_logic_vector(data_width-1 downto 0);    -- 输入2虚部
            tf1_r          : in  std_logic_vector(tw_fact_width-1 downto 0); -- 旋转因子实部
            tf1_i          : in  std_logic_vector(tw_fact_width-1 downto 0); -- 旋转因子虚部
            data1_r_out    : out std_logic_vector(data_width-1 downto 0);    -- 输出1实部
            data1_i_out    : out std_logic_vector(data_width-1 downto 0);    -- 输出1虚部
            data2_r_out    : out std_logic_vector(data_width-1 downto 0);    -- 输出2实部
            data2_i_out    : out std_logic_vector(data_width-1 downto 0)     -- 输出2虚部
            );
end component;
请看一下上面两个Butterfly的component构造,如果觉得有问题,现在就讨论解决它。
 楼主| 发表于 2004-5-24 17:33:01 | 显示全部楼层

谁会?

component应该没有问题!!
你的第一个butterfly中旋转因子中只有实部,代表向WN 0,WN/2这些常数是吧?还有你的上升沿代表什么?
关于数据到位序,我还懂知道怎么回事,我想数据输入后在寄存器从新排序一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-5-4 05:01 , Processed in 0.041908 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表