nnnpptong 发表于 2016-9-18 10:05:35

想问下,怎么用FPGA做归一化,数据标准化?

经常遇到归一化问题, 但开根式和除法消耗太大,想只用乘加就能实现. 有没好方法?

castiello 发表于 2016-9-18 19:21:01

用乘和加可以近似计算

nnnpptong 发表于 2016-9-23 16:01:30

castiello 发表于 2016-9-18 19:21
用乘和加可以近似计算

具体方法怎么做呢?   

易尘 发表于 2016-9-28 10:04:04

考虑下左移,右移,有除法功能

nnnpptong 发表于 2016-9-28 14:22:58

易尘 发表于 2016-9-28 10:04
考虑下左移,右移,有除法功能

考虑过移位了, 精度不够.

at90s 发表于 2016-9-28 15:26:48

将除法变成乘倒数,倒数开方可以通过查表和移位计算:
假设要计算1/sqrt(N),结果用Q15格式表示,N是整数或定点数,计算步骤:
1. 建立表格,表格深度为2^M,内容为1/sqrt(index),Q15格式量化。这步可以离线完成。
2. 截取N的最高M位有效位,得到index。可以通过移位实现。假设截取过程丢掉了低n位,数学上相当于index=floor(N*2^n)。
3. 用index查表,得到tmp=1/sqrt(floor(N*2^n))
4. tmp≈1/sqrt(N)/sqrt(2^n),只要乘以1/sqrt(2^n)就是我们要的结果近似值了。如果n是偶数,tmp右移n/2,如果n是奇数,则右移floor(n/2),然后乘以1/sqrt(2)。如果N是定点数,则需要调整下定标值。
5. 如果觉得第4步啰嗦,可考虑将表格分为两个,根据n的奇偶查相应表格。

at90s 发表于 2016-9-28 15:32:16

归一化时倒数开方只需要计算一次,所有数据都乘以这个数就可以了

at90s 发表于 2016-9-28 15:38:04

截取N的最高M位有效位,是指从左到右,找到第一位非0位,然后向右截M位

易尘 发表于 2016-9-28 15:48:44

at90s 发表于 2016-9-28 15:26
将除法变成乘倒数,倒数开方可以通过查表和移位计算:
假设要计算1/sqrt(N),结果用Q15格式表示,N是整数或 ...

很详细的解释

nnnpptong 发表于 2016-9-28 17:26:37

哦哦,茅塞顿开   1/sqrt(N) == sqrt(1/N) ,1/N 用Q15格式量化,算出sqrt(1/N)后填入表格.    非常感谢~~

at90s 发表于 2016-9-28 18:01:10

如果N只有16位,直接开个64k深度的rom也行,这样无需移位。如果N很宽,或者没那么多RAM,就得查表跟移位结合了
页: [1]
查看完整版本: 想问下,怎么用FPGA做归一化,数据标准化?