求对一信号连续采集,连续取平均值的算法
本帖最后由 fpgaw 于 2010-7-12 11:35 编辑对一信号连续采集,然后求平均,因为不知道能采集多少数据,所以要连续求平均,并且实现时发现所得数据明显不正确,不知道什么问题,比如temp/n,可能对你们来说这些是小问题,但是我却不知道是什么地方没有考虑周全,恳请高手指点,小弟先谢了 设计个计数器,如8192,开始时把前面的数值相加,到顶时输出,然后再取平均,每隔计数器单元输出个平均值 数据会不会溢出?我也考虑过这样实现,但是发现求得的数据很乱,我再试试吧 就是啊,采样n个数,取其平均值,然后输出,结果就是不对郁闷啊!<br>
请高人指点:<br>
library ieee;<br>
use ieee.std_logic_1164.all;<br>
use ieee.std_logic_unsigned.all;<br>
use ieee.std_logic_arith.all;--转换函数申明(整型与为矢量相互转换)<br>
entity filter is<br>
port(in_data : in std_logic_vector(7 downto 0);<br>
clk : in std_logic;<br>
out_data : out std_logic_vector(7 downto 0));<br>
end filter;<br>
architecture data_collection of filter is<br>
constant n : integer :=2;<br>
signal sum : integer range 0 to 65536 :=0;<br>
signal count : integer range 0 to 100 :=0;<br>
signal flag : std_logic :='0';<br>
begin<br>
proc:process(clk)<br>
begin<br>
if (clk'event and clk='1') then<br>
if count = n then<br>
out_data <= conv_std_logic_vector(sum/n,8);<br>
flag<='1';<br>
elsif flag='1' then<br>
sum<=0;<br>
count<=0;<br>
flag<='0';<br>
else<br>
sum <=sum+conv_integer(in_data);<br>
count<=count+1; <br>
flag<='0'; <br>
end if;<br>
end if;<br>
end process proc;<br>
end data_collection;
页:
[1]