随笔记录——一种跟fft算法相关的校验算法

fft——快速傅里叶变换算法

这个算法是流传非常广的一个算法,我在RRU文章里已经很详细的介绍过他的原理了,这里就是详细叙述。直接切入!

说一说为什么要进行校验:其实并不是说所有用fft的都会要用到对fft数据的校验,但是在fpga或者其他的环境下,当你最初的input信号经过一层层的传递,来到fft这个模块的时候,fft的输入信号已经不是你当初给的数据那样了,而且你输入的数据也已经是没有相应的详细信息了,当数据量达到一定的程度,如果说改动了原有的运行环境之后出现了错误的话,你可能会需要非常多的时间去debug。当然,也不是说一定要在fft这个模块的位置设置一个校验,其他地方也可以,我这里就单纯的说说怎么对fft这里做一个校验。

校验:fft在fpga中已经是常客了,经常会需要用到它,因此amd(Xilinx)公司已经有非常成熟可以直接使用的fft IP核了,我们只需要设置参数即可。fft的输入数据那么多,我们怎么进行一种简单直观的检验方法来设置这个校验点呢?
我这里是采取的通过每一个单位周期,这一个周期可以是一个帧,也可以是一个编码单位,也可以以某个特定的符号位来进行切割。这些不重要,只要是能将所有数据独立的平等的分段即可。然后需要取到我们分段的这个依据,可以称为tick或者boundary,我们将用这个信号来进行分段的触发,并各将每段作为一个整体求和。
fft中的信号是符合正弦波的,因此简单的按周期求和将会永远得到那个答案——0。所以我们需要在A+B+C+……+Z的求和算法上,做一点点小改动。

我们声明两个信号checksum_pre and check_sum,位宽根据你的数据预留,check_sum为你的求和结果,checksum_pre用来对你的求和结果做一个处理,同时还需要有一个对数据进行计数的计数信号,然后我们这样进行求和:
check_sum = checksum_pre ^ cnt ^ data
求和的方法知道了之后,再回到求和结果的处理方法,我们每一次求和完成之后,对这个求和结果进行一个高低位转换。这样就能确保最后的出的结果不会为0。
下面贴出我所使用的的实际算法:
在这里插入图片描述
我的数据位宽为16bits,根据数据数量,给checksum设置了32bits的位宽。
时间原因,如果需要,我后面可以再更新细说这个算法的思路。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值