我正在做一个项目,我使用 ADC 对信号进行采样,将值表示为 14 位字。我需要将值缩放为 8 位字。一般来说,有什么好方法可以解决这个问题。顺便说一句,我使用的是 FPGA,所以我想用“硬件”而不是软件解决方案来做。此外,如果您想知道事件链将是:采样模拟信号,用 14 位字表示采样值,将 14 位字缩放为 8 位字,使用 UART 将 8 位字传输到 PC COM1。
我以前从来没有这样做过。我假设您使用量化级别,但我不确定此操作的有效电路是什么。任何帮助,将不胜感激。
谢谢
我认为您只需删除六个最低分辨率位并称其为好,对吗?但我可能不完全理解问题陈述。
你只需要一个加法和一个班次:
val_8 = (val_14 + 32) >> 6;
(这+ 32
是获得正确舍入所必需的 - 您可以省略它,但如果这样做,您的信号中会出现更多的截断噪声。)
Paul 的算法是正确的,但您需要进行一些边界检查。
assign val_8 = (&val_14[13:5]) ? //Make sure your sum won't overflow
8'hFF : //Assign all 1's if it will
val_14[13:6] + val_14[5];