正确率使用期数标准加权算法法什么意思

查看: 3935|回复: 8
求助,关于加权中位数的算法~
论坛徽章:2
10G开始终于提供median函数了,不过碰上权数的问题,又难住我了 比如下面
value frequency
这样的表上,需要返回3.5这样的中位数。
如果是平均数的话好加权,中位数情况请大侠们支招
---------------补充
以下是我自己想到的。得是足够多的SEGMENT时候,可以看成是连续的函数。
另外把上面的当做开窗的一部分,我们前面加个catagory字段,求每个catagory对应的中位数
select t.*,sum(frequency) over (partition by t.catogory order by t.value)/
sum(frequency) over (partition by&&t.catogory )&&ranking
在以上表中,RANKING字段比0.5高,且最低的记录所对应的 VALUE 就是我们要找的了。。。(这里又得费点劲筛选下,同理0.5改成1/4,3/4的话就是四分位数了)
但以上我的是较为粗略的计算MEDIAN的方法(也请达人提出简化以上过程的方法),更正确的方法继续想。。
-----------更新-----------
问题基本得到解决,见6楼。
非常感谢newkid每次热心提供有效的解决方法~(请让我做你的粉丝)
[ 本帖最后由 影之哀伤 于
10:28 编辑 ]
论坛徽章:444
3.5具体是怎么算出来的?
论坛徽章:2
原帖由 newkid 于
23:03 发表
3.5具体是怎么算出来的?
我就当回数学教师好了。上表可以说是代表一个由10个2,20个3,30个4组成的数组(这个数组有60个元素)。该数组从小到大排序时候的最中间两个数的算术平均是中位数(也就是第30个数3,和第31个数4的的平均为3.5)。如果数组包含的元素为奇数个的话,最中间就只有一个数,这个数就是中位数。
有些无脑编程的,对于判断数量头疼。。为此我提出个统一的算法。
定义:LARGE(X)为数组中第X个大的元素,ROUND(X)对X四舍五入去整的函数,数组的包含的元素为K个,则中位数
MEDIAN=( LARGE(ROUND(k/2))+LARGE(ROUND((K+1)/2)) )/2
论坛徽章:444
如果你的权都不大,干脆全部展开:
SELECT MEDIAN(VAL)
& &&&,(SELECT ROWNUM rn FROM (SELECT MAX(frequency) m FROM t) CONNECT BY ROWNUM&= m)
WHERE rn&=
论坛徽章:2
原帖由 newkid 于
00:58 发表
如果你的权都不大,干脆全部展开:
SELECT MEDIAN(VAL)
& &&&,(SELECT ROWNUM rn FROM (SELECT MAX(frequency) m FROM t) CONNECT BY ROWNUM
我实际用的时候,权值基本会非常大,不过还是非常感谢。
刚才GOOGLE搜出了一个资料也是写中位数的,不过作者没搞懂加权的意义。不过还在用9G的朋友求非加权中位数的时候,可以鉴用他的方法:
SELECT&&AVG(1.0E * x)
& && && && &SELECT&&x,
& && && && && && &&&2 * ROW_NUMBER() OVER (ORDER BY x) - COUNT(*) OVER () AS y
& && && && &FROM& & @Foo
& && &&&) AS d
WHERE& &y BETWEEN 0 AND 2
当然,看下大概思路,ORACLE里需要适当改动下。加权的继续想。。。
论坛徽章:444
这个怎么样?
SELECT AVG(val)
&&FROM (SELECT SUM(frequency) OVER (ORDER BY val) s
& && && && &&&,SUM(frequency) OVER () tot
& && && && &&&,val
& && && && &&&,frequency
& && && & FROM t
WHERE tot/2 BETWEEN s-frequency AND
论坛徽章:2
原帖由 newkid 于
03:13 发表
这个怎么样?
SELECT AVG(val)
&&FROM (SELECT SUM(frequency) OVER (ORDER BY val) s
& && && && &&&,SUM(frequency) OVER () tot
& && && && &&&,val
& && && && &&&,frequency
& && && & FROM t
WHERE tot/2 BETWEEN s-frequency AND
It's greate! 测试结果非常满意。不仅如此 最下行的1/2这个换成其他数都能正确返回相应的分位数。比如TOT*0.25,TOT*0.75时候就是相应的四分位数。
TOT/6的时候也正确返回2.5。
不过你这个成果能做成FUNCTION 方便以后随时调用么?(如SUM() OVER那样的函数。。)
这个函数应该如下
weighted_median(val,weight,percentile)
val就是上面的val,weight就是frequency,percentile就是0-1之间的参数(乘以最下行TOT用的,1/2时候就是中位数啦)。
我发现自己还真是没完没了。。
论坛徽章:444
ORACLE 确实提供了自定义聚合函数的接口,但这个接口是无序的逐行操作。像percentile_cont(0.5) within group (order by ...) 这种接口我还没有找到。
即使有了这个接口,效率也不如SQL快,因为有上下文切换。
多个组的可以这么写:
SELECT group_id,AVG(val)
&&FROM (SELECT SUM(frequency) OVER (PARTITION BY group_id ORDER BY val) s
& && && && &&&,SUM(frequency) OVER (PARTITION BY group_id) tot
& && && && &&&,t.*
& && && & FROM t
WHERE tot*0.5 BETWEEN s-frequency AND s
GROUP BY group_
论坛徽章:444
我尝试了一下自定义聚合函数:
CREATE OR REPLACE TYPE t_percentile AS OBJECT (
& && & val& && &&&NUMBER
& && &,frequency&&NUMBER
& && &,percentile NUMBER
CREATE OR REPLACE TYPE ta_my_percentile_data AS TABLE OF t_percentile
CREATE OR REPLACE TYPE my_percentile_obj AS OBJECT
& &tmp_data ta_my_percentile_data,
& &STATIC FUNCTION
& && &&&ODCIAggregateInitialize(sctx IN OUT my_percentile_obj )
& && &&&RETURN NUMBER,
& &MEMBER FUNCTION
& && &&&ODCIAggregateIterate(self IN OUT my_percentile_obj ,
& && && && && && && && && &&&p_data&&IN t_percentile
& && && && && && && && && &&&)
& && &&&RETURN NUMBER,
& &MEMBER FUNCTION
& && &&&ODCIAggregateTerminate(self IN my_percentile_obj,
& && && && && && && && && && & returnValue OUT&&NUMBER,
& && && && && && && && && && & flags IN NUMBER)
& && &&&RETURN NUMBER,
& &MEMBER FUNCTION
& && &&&ODCIAggregateMerge(self IN OUT my_percentile_obj,
& && && && && && && && && &ctx2 IN my_percentile_obj)
& && &&&RETURN NUMBER
CREATE OR REPLACE TYPE BODY my_percentile_obj
STATIC FUNCTION
& &&&ODCIAggregateInitialize(sctx IN OUT my_percentile_obj )
& &&&RETURN NUMBER
& & sctx := my_percentile_obj(ta_my_percentile_data());
& & return ODCIConst.S
END ODCIAggregateI
MEMBER FUNCTION
& &&&ODCIAggregateIterate(self IN OUT my_percentile_obj ,
& && && && && && && && &&&p_data&&IN t_percentile
& && && && && && && && &&&)
& &&&RETURN NUMBER
& & self.tmp_data.EXTEND;
& & self.tmp_data(self.tmp_data.COUNT) := p_
& & return ODCIConst.S
END ODCIAggregateI
MEMBER FUNCTION
& &&&ODCIAggregateTerminate(self IN my_percentile_obj,
& && && && && && && && && & returnValue OUT&&NUMBER,
& && && && && && && && && & flags IN NUMBER)
& &&&RETURN NUMBER
& & SELECT AVG(val)
& && &INTO returnValue
& && &FROM (SELECT SUM(frequency) OVER (ORDER BY val) s
& && && && && && &,SUM(frequency) OVER () tot
& && && && && && &,val
& && && && && && &,frequency
& && && && && && &,percentile
& && && && &&&FROM TABLE(self.tmp_data) t
& && && &&&)
& & WHERE tot*percentile BETWEEN s-frequency AND
& & RETURN ODCIConst.S
END ODCIAggregateT
MEMBER FUNCTION
& &&&ODCIAggregateMerge(self IN OUT my_percentile_obj,
& && && && && && && && &ctx2 IN my_percentile_obj)
& &&&RETURN NUMBER
& & lv_cnt1 NUMBER;
& & lv_cnt1 := self.tmp_data.COUNT;
& & self.tmp_data.EXTEND(ctx2.tmp_data.COUNT);
& & FOR i IN 1..ctx2.tmp_data.COUNT LOOP
& && &&&self.tmp_data(lv_cnt1+i) := ctx2.tmp_data(i);
& & END LOOP;
& & return ODCIConst.S
END ODCIAggregateM
CREATE OR REPLACE FUNCTION weighted_median(p_data IN t_percentile)
RETURN NUMBER
PARALLEL_ENABLE AGGREGATE USING my_percentile_
CREATE TABLE T (VAL NUMBER, FREQUENCY NUMBER, GROUP_ID NUMBER);
INSERT INTO T VALUES (1,10,1);
INSERT INTO T VALUES (3,15,1);
INSERT INTO T VALUES (5,16,1);
INSERT INTO T VALUES (6,20,1);
INSERT INTO T VALUES (5,23,1);
INSERT INTO T VALUES (2,20,2);
INSERT INTO T VALUES (4,15,2);
INSERT INTO T VALUES (6,13,2);
INSERT INTO T VALUES (7,12,2);
INSERT INTO T VALUES (8,12,2);
SELECT group_id,weighted_median(t_percentile(val,frequency,0.5)) AS m
GROUP BY group_
&&GROUP_ID& && && & M
---------- ----------
& && && &1& && && & 5
& && && &2& && && & 6
可以看到,使用方法比预期的复杂:weighted_median(t_percentile(val,frequency,0.5))
因为自定义聚合函数只能够传一个参数,所以不得不使用OBJECT类型传参。
这个方法的效率不如纯SQL, 其实函数里面还是用原来那个SQL.
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号一种实现数据加权平均算法的系统的制作方法
专利名称一种实现数据加权平均算法的系统的制作方法
技术领域本发明涉及CMOS数字电路设计技术领域,特别涉及一种实现数据加权平均算法的系统。
背景技术模数转换器(Analog-to-Digital Converter,ADC)是现代通信系统中极其重要的模块,同时也是限制整个通信系统数据处理能力的瓶颈所在。传统的Nyquist模数转换器,其元器件的匹配程度决定了 ADC所能达到的精度。随着集成电路的特征尺寸不断减小,MOS晶体管的二阶效应愈加显著,设计高性能模拟电路所遇到的困难和挑战越来越大。当前的工艺水平可以达到O. 1% (IObit)的器件匹配精度,然而对于精度为16bit以上的ADC来说,其匹配精度至少为O. 0015%,采用普通MOS工艺无法实现。 Sigma-Delta ADC 米用过米样(Over-Sampling)和噪声整形(Noise-Shaping)技术,有效衰减输出信号的带内量化噪声(quantized noise),提高了信号带内信噪比,使得利用粗转换器实现高精度的模数转换成为可能。与传统的Nyquist转换器相比,Sigma-DeltaA/D转换器将提高精度的压力尽量转移到数字环节,充分利用了数字电路规模越来越大,速度越来越高而成本日益下降的发展趋势,在模拟电路部分降低了对性能指标和元器件匹配精度的要求,提高了电路设计的可行性。Sigma-Delta ADC由Sigma-Delta调制器和数字滤波器构成,后者为全数字电路实现,可靠性较高;而调制器部分大多为模拟电路,其电路的性能决定了整个ADC的性能。评价ADC动态性能的主要指标为信噪比(Signal-to-Noise Ratio, SNR), Sigma-Delta调制器的理想峰值信噪比(Peak SNR, PSNR)如下式所示PSNR(dB) = IO Iog^ 22Ai j - 20 log^ + 20〔《 + Iog(OSTi)式中OSR为过采样比(采样频率与信号Nyquist率的比值),n为调制器的阶数,N为量化器的位数。从上述公式可以看到,Sigma-Delta调制器的信噪比与0SR、n和N有关。提高调制器的信噪比,需要提高0SR、η或者N。提高过采样比0SR,意味着在信号带宽的一定的条件下提高采样频率,当信号带宽达到MHz数量级时,一味的提高时钟的采样频率,一方面电路功耗会急剧的增加,另一方面由于工艺条件限制而无法实现;提高调制器的阶数η,由于Sigma-Delta调制器是一个非线性的负反馈闭环系统,调制器阶数大于2会造成系统不稳定,使量化器过载进而使得调制器的性能急速下降。较为合适的方式是通过提高量化器的位数N来提高调制器的性能,而且提高N还会使得高阶调制器的稳定性增强,量化器的稳定输入范围增大,而对调制器不会造成影响。然而采用多位量化器,在反馈回路中就会用到多位DAC,而DAC的精度对调制器的影响很大,以一阶调制器多位量化器为例,X(Z)输入信号,Eq(z)为多位量化器的量化噪声,Ed(Z)为反馈DAC的非线性误差引入的噪声,下式为传输函数Y(z) = z_1X (Z)+ (K1)Eq (Z)-Z-1Ed (Z)
由上式可以看出,由多位DAC产生的非线性误差并没有像量化噪声那样受到反馈环路的调制作用,因此,整个调制器的精度受限于多位反馈DAC的精度。
(一 )要解决的技术问题为了解决多位量化Sigma-Delta调制器中多位DAC的非线性问题,本发明提出了一种实现数据加权平均(DWA)算法的系统。(二)技术方案为达到上述目的,本发明提供了一种实现数据加权平均算法的系统,该系统包括编码电路10、全加器电路11、循环对数移位电路12、寄存器组电路13和时序调整驱动电路14,其中编码电路10,用于接收输入的温度计码,输出二进制码至全加器电路11 ;全加器电路,用于对当前时钟周期与前一时钟周期产生的二进制码求和,将输出进位信号作为输入进位信号进行累加,并将所得数据输出至循环对数移位电路12 ;循环对数移位电路12,用于根据存入寄存器组电路13的数据对输入的温度计码进行相应的移位操作,最后将移位后的数据输出至时序调整驱动电路14 ;时序调整驱动电路14,用于将循环对数移位电路12输入的移位后的数据按照正确的时序输出。上述方案中,所述编码电路10包括温度计码转独热码电路和独热码转二进制码电路两个部分,其中温度计码转独热码电路的输入端接收输入的温度计码,输出相应的独热码至独热码转二进制码电路,最后独热码转二进制码电路输出对应的传统二进制码至全加器电路11。上述方案中,所述全加器电路11采用延迟路径较小的传输门结构,其两个加数的输入端分别为当前时钟周期的二进制输出信号以及前一时钟周期的二进制输出信号,全加器电路11的进位输入信号为当前时钟周期的全加器进位输出信号;加法完成后,将数据输入至寄存器组电路13。上述方案中,所述循环对数移位电路12采用NMOS管作为移位电路的主体,根据全加器的求和输出信号(S11-S13、S11Q-S13Q)对输入的温度计码分别进行I位、2位和4位的移位操作,将移位后的数据输出至时序调整和驱动电路。上述方案中,所述寄存器组电路13采用电平触发的锁存器电路结构,共六个锁存器,分成三组,每组两个级联构成D型触发器。所述全加器电路11的输出在两相不交叠时钟clkl时,输入至寄存器组电路13,锁定前一时钟周期的全加器电路11输出信号;在两项不交叠时钟clk2时,锁定当前时钟周期的全加器电路11输出信号,并输出信号S11-S13、 S11Q-S13Q控制循环对数移位电路12。上述方案中,所述时序调整和驱动电路14的输入来自循环对数移位电路12,由于循环对数移位电路12采用NMOS开关,高电平信号在传输过程中存在阈值损失,所以首先对输入信号进行电平恢复,然后进入时序调整电路14,使得信号在正确的时钟信号下在通路上传输,最后经过时序调整驱动电路14将信号输出。(三)有益效果
本发明提供的实现数据加权平均算法的系统,采用新型的系统结构以及双锁存器、对数移位电路方法来实现DWA算法,在算法实现过程中,输入温度计码的数据通路只采用NMOS开关和驱动电路,而控制通路采用锁存器控制,相对于传统的数据选择和触发器控制,有效的减少了所用元器件的数量,进而降低了输出数据的传输和延迟时间,非常适用于宽带高精度高采样率的多位量化Sigma-Delta调制器电路。
图I是依照本发明实施例的采用的DWA算法的示意图;图2是依照本发明实施例的用于高精度多位量化Sigma-Delta调制器的实现数据加权平均算法的系统的结构示意图;图3是依照本发明实施例的编码电路示意图;图4是传统的基于传输门的全加器电路不意图;图5是依照本发明实施例的寄存器组电路示意图;图6是依照本发明实施例的循环对数移位电路示意图;图7是依照本发明实施例的时序调整和驱动电路不意图; 图8是依照本发明实施例的在时钟频率200MHz情况下的波形图;图9是依照本发明实施例的DWA算法电路关闭、DAC失配5%。时Sigma-Delta调制器的输出功率谱密度图;图10是依照本发明实施例的DWA算法电路开启、DAC失配5%。时Sigma-Delta调制器的输出功率谱密度图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。为了解决多位DAC的非线性问题,人们提出了许多DAC的线性化技术和方法,其中比较实用和简单的是数据加权平均(DWA)算法。此算法的基本思想是使每一个数据(Element)用到的次数基本相等,将各个数据的差值进行平均,其基本原理是使用一个单元指针用来定位,每一次转换后把单元指针定位到本次使用单元序列的结尾,因此在下一次选取序列时是按照单元序列的摆放顺序继续选取的。图I以3bit的DAC为例来说明,横向数字代表DAC的编号(共7个),纵向数字代表每次选择DAC的个数(共6次),每行的黑色阴影区域则代表被选取的DAC的编号。参见图2,图2是依照本发明实施例的用于高精度多位量化Sigma-Delta调制 器的实现数据加权平均算法的系统的结构示意图,该系统包括编码电路(Encoder) 10、全力口器电路(Full Adder) 11、循环对数移位电路(Cycle Log-Shifter) 12、寄存器组电路(Registers) 13 和时序调整驱动电路(Timing Adjustment and Drivers) 14 五大部分。编码电路将输入的温度计码转换成二进制码输出,并输入至全加器电路。全加器电路将当前时钟周期产生的二进制数据与前一时钟周期的二进制数据进行相加,然后再与当前时钟周期全加器产生的进位输出信号累加,得到当前时钟周期的最后数据(S3,S2,S1)。循环对数移位电路,将输入的温度计码根据当前时钟周期全加器的输出数据进行相应的移位。寄存器组电路,用于存储当前的旋转指针。时序调整驱动电路,采用CMOS开关控制电路时序,另外加入缓冲器驱动后级电路。其中,所述编码电路10接收输入的温度计码,输出响应的二进制码至全加器电路11,全加器电路将当前时钟周期和前一时钟周期产生的二进制码求和,并将输出进位信号作为输入进位信号进行累加,所得数据输出至循环对数移位电路12,循环对数移位电路根据存入寄存器组13的数据对输入的温度计码进行相应的移位操作,最后将移位后的数据经过时序调整驱动电路14,按照正确的时序输出。
参见图3,编码电路10包括两个部分,温度计码转独热码电路和独热码转二进制码电路。温度计码转独热码电路的输入端接收输入的温度计码,输出相应的代码至独热码转二进制码电路,最后输出对应的传统二进制码至全加器电路11。本发明采用传统的级联3bit全加器电路11,其电路如图4所示,由于内部信号通路均采用CMOS传输门,相对于采用普通门级电路搭建的电路,信号的延迟时间有较大的降低。另外,本发明的系统要求全加器的进位输出信号与进位输入信号相连形成累加器,所以要求全加器的进位输出信号的延迟时间尽可能小,采用基于传输门的加法器电路是比较合适的选择。由于本发明设计的量化器为3bit,因此,全加器、寄存器组和循环对数移位电路的控制端均为3bit。图5所示的是3bit的寄存器组电路,用于存储移位指针。输入数据(S3,S2, SI)接收全加器的输出求和信号,Clkl和Clk2为两相不交叠时钟信号,用于对锁存器的控制,输出信号包括两组,分别为(S11-S13)和(S10-S30)。其中S1-S10,S2-S20和S3-S30可以认为是3组触发器,由Clkl的上升沿触发。当Clkl为低电平,Clk2为高电平时,信号Sll = SI,而SlO锁存前一时钟Clkl的数据;当Clkl为高电平,Clk2为低电平时,SlO =S11,而Sll锁存前一时钟Clk2的数据。输出数据SI 1-S13用于控制循环移位电路,而另外一组数据S10-S30输出至全加器。3bit循环移位电路如图6所示,输入信号依次经过Ibit移位(Log-Shifterlbit),2bit 移位(Log-Shifter 2bit)和 4bit 移位(Log-Shi f ter4b i t)三个模块,其主要作用是将输入的温度计码In[6:0]根据控制信号(S11-S31,S11Q-S31Q)进行循环移位,然后至输出端Out [6:0]。循环移位电路接收输入的温度计码In [6:0],先经过Log-ShifterIbit模块,当Clkl为高电平,Sll为高电平,SllQ为低电平时,模块中晶体管M11-M17开启,而晶体管Ml 1B-M17B截止,输出信号为输入信号In [6:0]向左移动一位,并且最高位移至最低位,完成Ibit循环移位操作。当Clkl为高电平,Sll为低电平,SllQ为高电平时,则晶体管Ml 1-M17截止,而晶体管Ml 1B-M17B开启,Log-Shifter Ibit模块不对输入信号进行移位操作,输出信号与输入信号相同。同理,在信号通过Log-Shifter 2bit、Log_Shifter 4bit模块时,根据控制信号S21、S21Q和S31、S31Q来决定是否对输入信号进行2bit和4bit循环移位操作。所以,根据控制信号S11-S13,S11Q-S13Q的电平状态,对输入信号分别进行lbit-7bit的移位操作。图7所示的时序调整和驱动电路,包括缓冲器(Buffer),开关电路(Switches)和驱动电路(Drivers)三大部分,每部分电路包含结构相同的7个部分,实现相同的功能。缓冲器电路包含两个级联的反相器,用于恢复损失的CMOS逻辑电平。由于前端的循环移位电路信号通路采用NMOS开关,高电平通过时存在阈值损失,在低电源电压工作条件下会造成延迟时间过长,甚至会造成逻辑错误。加入缓冲器电路有助于提高电路的工作速度和稳定性。信号经过Buffer电路整形后进入开关电路,被时钟Clkl采样、保持,开关电路由7个相同的CMOS开关构成,随即信号进入驱动电路,驱动电路同样包括7组相同的子电路,每组子电路包括2个反相器和一个与门。信号经过驱动电路后,先经过I个反相器(INV1-INV7)以增加驱动能力,然后进入与门,与时钟信号进行‘与’操作,最后在经过后级驱动反相器(INV8-INV14)后输出 Out[6:0]。在整个系统中,输出数据0ut[6:0]与输入温度计码In[6:0]相比有如下特点I.数据被循环移位。举例如下如图I所示,第一个时钟周期的输入温度计码为1100000,那么本时钟周期结束时指针为2,即最后被选中的DAC编号为2 ;接着第二个时钟周期输入的温度计码为1111100,则输入数据被向右移动2位,输出数据为0011111,本时钟周期结束时指针为7,即最后被选中的DAC编号为7 ;第三个时钟周期输入数据为1111000,则输入数据被向右移动7位(2位+5位),输出数据为1111000,则依次类推。2.输出数据受Clk2信号的控制,这是由Sigma-Delta调制器的需要决定的,只有在Clk2为高电平的半个时钟周期内,输出数据Out[6:0]才有效。
图8是DWA算法电路工作在200MHz时钟频率时的波形图,图中显示电路工作正常。图9和图10分别为Sigma-Delta调制器的电容匹配精度为5%。时,DffA算法电路关闭和开启时的功率谱密度图。从图9可以看到,当DWA算法电路关闭时,由于存在电容的失配,所以输出信号的频谱图出现较多的谐波,并且谐波的功率较大,造成整个调制器的动态范围和信噪比很低;图10是存在同样的电容失配时,实现的DWA算法电路开启时的频谱图,图中由于使用提出的DWA算法电路,电容的失配被平均化,谐波被明显抑制,获得了较高的动态范围和信噪比,技术效果明显。综上所述,本发明有如下技术特征(I)提出了一种用于高精度多位量化Sigma-Delta调制器的数据加权平均算法的新型实现方法,采用合理的时钟分配方案,有效的提高了电路的工作频率,(2)在控制通路采用锁存器,在数据通路选择循环对数移位电路,相对于传统的数据选择和触发器控制,有效的减少了所用元器件的数量,进而减少了输出数据的传输和延迟时间,⑶本发明采用的电路均为3bit结构,增加输出信号的位数只需要增加编码器、全加器、循环移位器、寄存器组和时序调整和驱动电路的输入输出端口数量,即可实现2n-l的输出位数(η为编码器的输出位数),拓展性好。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1.一种实现数据加权平均算法的系统,其特征在于,该系统包括编码电路(10)、全加器电路(11)、循环对数移位电路(12)、寄存器组电路(13)和时序调整驱动电路(14),其中
编码电路(10),用于接收输入的温度计码,输出二进制码至全加器电路(11);
全加器电路,用于对当前时钟周期与前一时钟周期产生的二进制码求和,将输出进位信号作为输入进位信号进行累加,并将所得数据输出至循环对数移位电路(12);
循环对数移位电路(12),用于根据存入寄存器组电路(13)的数据 对输入的温度计码进行相应的移位操作,最后将移位后的数据输出至时序调整驱动电路(14);
时序调整驱动电路(14),用于将循环对数移位电路(12)输入的移位后的数据按照正确的时序输出。
2.根据权利要求I所述的实现数据加权平均算法的系统,其特征在于,所述编码电路(10)包括温度计码转独热码电路和独热码转二进制码电路两个部分,其中温度计码转独热码电路的输入端接收输入的温度计码,输出相应的独热码至独热码转二进制码电路,最后独热码转二进制码电路输出对应的传统二进制码至全加器电路(11)。
3.根据权利要求I所述的实现数据加权平均算法的系统,其特征在于,所述全加器电路(11)采用延迟路径较小的传输门结构,其两个加数的输入端分别为当前时钟周期的二进制输出信号以及前一时钟周期的二进制输出信号,全加器电路(11)的进位输入信号为当前时钟周期的全加器进位输出信号;加法完成后,将数据输入至寄存器组电路(13)。
4.根据权利要求I所述的实现数据加权平均算法的系统,其特征在于,所述循环对数移位电路(12)采用NMOS管作为移位电路的主体,根据全加器的求和输出信号(S11-S13、S11Q-S13Q)对输入的温度计码分别进行I位、2位和4位的移位操作,将移位后的数据输出至时序调整和驱动电路。
5.根据权利要求I所述的实现数据加权平均算法的系统,其特征在于,所述寄存器组电路(13)采用电平触发的锁存器电路结构,共六个锁存器,分成三组,每组两个级联构成D型触发器。
6.根据权利要求5所述的实现数据加权平均算法的系统,其特征在于,所述全加器电路(11)的输出在两相不交叠时钟clkl时,输入至寄存器组电路(13),锁定前一时钟周期的全加器电路(11)输出信号;在两项不交叠时钟clk2时,锁定当前时钟周期的全加器电路(11)输出信号,并输出信号S11-S13、S11Q-S13Q控制循环对数移位电路(12)。
7.根据权利要求I所述的实现数据加权平均算法的系统,其特征在于,所述时序调整和驱动电路(14)的输入来自循环对数移位电路(12),由于循环对数移位电路(12)采用NMOS开关,高电平信号在传输过程中存在阈值损失,所以首先对输入信号进行电平恢复,然后进入时序调整电路(14),使得信号在正确的时钟信号下在通路上传输,最后经过时序调整驱动电路(14)将信号输出。
本发明公开了一种实现数据加权平均算法的系统,包括编码电路,用于接收输入的温度计码,输出二进制码至全加器电路;全加器电路,用于对当前时钟周期与前一时钟周期产生的二进制码求和,将输出进位信号作为输入进位信号进行累加;循环对数移位电路,用于根据存入寄存器组电路的数据对输入的温度计码进行相应的移位操作,最后将移位后的数据输出至时序调整驱动电路;时序调整驱动电路,用于将循环对数移位电路输入的移位后的数据按照正确的时序输出。本发明电路结构简单,总体延迟时间小,使用晶体管的数量少,工作速度快,可使算法电路工作在百兆赫兹的时钟频率上,适用于高精度多位量化的高采样率开关电容Sigma-Delta调制器中。
文档编号H03M1/12GKSQ
公开日日 申请日期日 优先权日日
发明者范军, 黑勇 申请人:中国科学院微电子研究所}

我要回帖

更多关于 gpa标准加权算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信