GrowthNudge 你的成长,我来助推! 公众号《成长助推》致力于分享实用工具、必备技能、思维方法,以助推成长为目标,长期有效的提供价值内容。 今日助推小目标: 1. Matlab对定点算法问题的仿真。模拟实际中会出现的问题。 2. 基于时间抽选(DIT)的FFT算法实现。给出仿真源码,可发送关键词“fi_FFT”直接下载,长期有效。 我们在分析一个信号的频谱时,通常会用到离散时间序列的DFT,而FFT则是DFT的快速算法。平时你在Matlab中采用FFT函数直接计算时,似乎并没有关系其精度问题。 而在实际的工程中,算法的处理是有限精度的,另外,DFT的系数也是有限字长的。这些因素都会影响离散时间信号DFT的最终结果。 定点FFT的算法不同,运算的有限字长效应也会不同。通常有两种评估有限精度算法影响的方法。一种是,采用详细的分析来预测对最终输出的影响;另一种则是通过采用有限精度算法来仿真系统的实现。 通常一般会采用后者,因为简单方便低成本,这就需要先对Matlab进行定点运算的设置。 Matlab程序实现了基于时间抽取(DIT)的FFT算法,采用了有限精度的定点算法。算法还计算了输入序列的全精度DFT,以及全精度和有限精度的差值。并绘图直观表现出来: 左边图是时域信号,基本看不出全精度和8位定点精度的差别。右图上面是对左边时域信号做的FFT,红色线表示全精度,蓝色线表示有限精度,下面就是二种方法的差值,并计算了最大绝对误差是0.018。 当把定点精度从8位改成4位,差别就比较明显了,最大绝对误差也扩大到了0.199。 |
|