FPGA截位 直流分量
本来在数据处理的时候就需要有直流补偿,这种截位的误差肯定会造成性能损失。在算法中应该估计直流分量大小
请教小编:一般直流补偿方法是什么,直接加或者减去一个常数吗?现在的问题是不知道直流补偿要采用什么方法来做。
各位大虾给点意见吧
这个直流分量的产生,是因为对于正数和负数,四舍五入都向着同一个方向而产生的。
对于+0.5,截后得到+1.0;对于负0.5,截后得到-1.0,而不是-0.0的时候,就不会产生直流分量了。
不能随便去掉低位,应该按照定点模型处理。
直接截位会产生直流分量,因为整数截位后变小,负数虽然也变小,但是向负的方向变的,相当于变大。例如0.6截位变成0 ,而-0.1截位变-1,而不是0,所以会导致最终负的直流。正确方法应采用四舍五入。
定点模型处理是怎么处理的?
我有试过判断被截的最高位,负数被截最高位为1的话,截完后的数减一,为0的话直接去掉低位,正数被截最高位为1的话,截完后的数加一,为0的话直接去掉低位,效果好像不明显。
Matlab中有定点模型处理的资料。
学习中,。
截位后,根据是偏移正常值进行补偿,是正补偿还是负补偿看具体的情况····算法的设计是对直流分量很关键的规避方式··
之前直接截位后在截位后数据上加上一个常量值来进行直流补偿,后来发现这个常量值不是固定的,所以就不好用在实际应用中。
在设计中可以考虑rounding和trunding. 参见论坛里的xilinx dsp primer.
试试这种方式,比如将一个16bit截成12bit:
wire signed [15:0] data_16b;
wire signed [11:0] data_12b;
assign data_12b = ( $signed(data_16b[15:3]) + $signed({{12{data_16b[15]}},{1'b1}}) )>>>1;
这方法不行啊
小编找到好的方法了吗
