小波变换系统,方法和计算机程序产品的制作方法

文档序号:7857520阅读:182来源:国知局

专利名称::小波变换系统,方法和计算机程序产品的制作方法
技术领域
:本发明涉及数据压缩,特别是利用小波压缩数据。
背景技术
:视频“编译码器”(压缩器/解压缩器)用于通过图像质量、处理器需求(即,成本/功率消耗)、和压缩率(即,所得的数据率)之间的平衡降低数据通信流所需的数据速率。目前可用的压缩方法提供了不同的权衡范围,产生了多种编译码器形式,其中,每一种形式被优化以满足一种特定应用需要。现有技术图1示出了当前可用的各种不同压缩算法之间权衡的一个例子100。如图所示,这些压缩算法包括基于小波的编译码器102,和包括各种不同MPEG视频分布形成的基于DCT的编译码器104。2D和3D小波是基于DCT的编译码算法的目前可供选择的方法。由于小波的合意的图像质量和灵活的压缩率,一直受到高度关注,促使JPEG委员会采用小波算法作为它的JPEG2000静止图像标准。不幸的是,大多数小波装置使用需要大量处理能力的、有关DCT选择的、十分复杂的算法。此外,小波存在着临时压缩的独特复杂问题,使得3D小波特别困难。由于这些原因,小波从来就没有提供过优于MPEG之类的大容量工业标准编译码,因此,仅被一些特定的应用领域采用。因此,需要有一种针对三个主要市场分割的、优化为低功率和低成本的、商业可行的3D小波装置。例如,小型摄像机获得了越来越广泛的使用,并且具有数字处理信号的显著优点。例如,在一些国家,蜂窝电话市场增长最快的部分是具有图像和视频片断剪辑能力的电话。大多数数字照相机具有视频片断剪辑特征。在移动无线手持电话市场中,这些静止图像和短视频片断的传输需要更大的来自装置电池的容量。现有的视频编码标准和数字信号处理器对蓄电池的要求更高。另一个新的应用是允许观看者暂停实况TV转播和录制电视节目过后观看编程的个人录像机(PVR)。这些装置使用数字硬盘存储,以记录视频,并且需要对来自电缆的模拟视频信号的视频压缩。为了提供画中画和边看边录像之类的特征,这些单元需要多个视频压缩编码器。另一个日益增长的应用领域是用于监视和保安视频的数字摄像机(DVR)。也需要压缩编码来存储每个信道的输入视频。为了利用方便、灵活的数字网络传输体系结构,必须在摄像机中数字化视频信号。即使使用老式的多路复用录像体系结构,也需要多个信道压缩编码器。当然,还有许多其它市场可以从为了低功率和低成本优化的商业可用的3D小波实施得到利益。经验表明,可以将考虑为2维平面上的函数的图像很好地建立成一个多项式模型,大多数点是平滑的,只有一些点是相对孤立的点和线(边缘)特异性。可以用3维域类似地建立视频片断的模型。对于大多数图像和视频,从线性多项式模型产生的RMS(均方根)余量在5%左右,而对于二次多项式模型是2%左右。近似模拟这些函数(图像和视频)的常用方案包括以下步骤1)可逆地变换函数,使得可以将变换的系数分割成“子频带”,2)量化除了“低通”子频带之外的所有子频带(即,降低除了“低通”子频带之外的所有子频带的精度),3)对量化的系数使用逆变换,从而重构一个近似于原始函数的的函数。一种好的方案使用一种将函数的低级多项式内容投射到非量化“低通”子频带的变换。这种方案最好也在其它子频带中产生零或非常小的值。因此,非低通子频带的后续量化将不会显著地改变用足够低级的多项式建模的函数的变换,并且对于原始函数的近似重构也将非常好。实现的真实性使得变换的函数中的值仅仅依赖于原始函数域中的一些点的小的邻域中的值,是最好不过的了。这是JPEG和MPEG标准中8×8块的目的之一。在这些规定中,邻域是重合的,或不相交的,将图像域分割成多个各具有明显边界的不相交邻域。在这些边界上,从量化得到的近似可能不好(众所周知的离散傅立叶变换中的“Gibbs效应”),在重构、近似图像中导致显著的“编块(blocking)”人工效应物。作为一种具有小邻域属性的变换种类,尽管具有重叠的邻域,小波变换还是受到了大量的注意。与JPEG/MPEG的DCT相比,在把函数主要投射到低通子频带方面,一些小波变换做得更好。此外,一些小波变换(不需要是相同的小波变换)对计算强度的要求更小。但是,邻域重叠在数据处理、存储器利用、和存储带宽方面带来了重要的实施问题。它仍然可用于“编块”域,恢复它们的边界和靠近这些边界的近似结果。在域边界变换存在的问题是,以一个边界点为中心的邻域不在这个边界点所属的域块中。如具体结合在各种JPEG和MPEG标准中的,对于这一问题的惯用方法是对称地反射跨越边界的块中的域值,以在需要的邻域上建立“有效”值和有效函数。除非这个有效函数在邻域上是一个常数,否则它将具有从不连续一阶导数产生的尖端或拐点。这种不连续性不能通过低级多项式很好地建模,从而反映在量化后仍然在大的非低通子频带系数中。较大的量化误差导致边界上增大的近似误差。FPEG2000标准1)中规定的一种变换是方程式#1.1和1.2中所示的可逆5-3变换。方程式#1.1和1.2方程式1.1方程式1.2由于这些方程式是整数对整数的映射表并且容易回解得到Y,因此,这种变换是可逆的,并且逆变换严格地一位对一位地产生输入Y。见方程式#2.1和2.2。方程式2.1和2.2方程式2.1方程式2.2从这些方程式可以清楚地看到Y2n+1是在(2n+1)的二阶导数的一半的负数的估计值;并且,如果在(2n+1)可以用一阶多项式很好地近似表示函数,那么Y2n+1近似为零。floor括号内常量相加的目的是要从估计值中除去任何DC偏压。小波中未校正偏压容易导致重构数据中的振荡误差,表现为水平或垂直条纹之类的固定图形噪声。有几种估算和校正偏压的可能方法,JPEG2000标准中选择了其中一种方法。如果图像的正确边界在点2N-1,那么由于需要的值X2N不可用,所以不能计算方程式#1.1。JPEG2000需要通过用正对称开拓函数来处理这种情况,从而使用X2N=X2N-2。将其代入方程式#1.1,得到方程式#1.1ext。方程式#1.1ext<math><mrow><mo>=</mo><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>-</mo><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub></mrow></math>方程式1.1ext这产生了一个与作为内部点的二阶导数的负数的一半的估计值相反的一阶导数的估计值Y2N-1。此外,可以清楚地看到,仅通过使用三个截然不同的点,而不是使用两个点,才能够获得二阶导数的估计值。由于仅有这些点是可用于逆步骤的点,所以需要将上升项中需要的两点限制到带有偶数指数的X。最靠近的侯选指数是2N-4。特别是在方程式#1.2和2.1中可以看到,5-3小波滤波器的FPEG-2000公式包括计算内的常数1或2的加法,以及其它限制。当实现计算的最大速度和效率时,这些加法和其它限制可能需要总计算负担的很大一部分,并且造成性能显著降低。
发明内容提供了一种压缩数据的系统、方法、和计算机程序产品。首先,接收一个插值公式。将这个插值公式用于压缩数据。在使用中,在需要的数据值是难于得到的情况下,确定插值公式是否需要至少一个数据值。如果是这种情况,那么执行外推运算以产生需要的难于得到的数据值。在一个实施例中,插值公式可以是小波滤波器的一个组成部分。作为另一种选择,可以选择用多相滤波器替代小波滤波器。在另一个实施例中,可以将多个数据值分割成多个变化范围。从而,通过仅利用一个变化范围内的数据值,可以减少涉及到插值公式的计算量。在又一个实施例中,可以量化数据值。在这个实施例中,可以通过减少数据值的量,减少与熵编码有关的计算量。可以在涉及到数据值的量化运算过程中,减少数据值的量。在再一个实施例中,可以减少与将数据值重构到预定数据范围有关的计算量。可以通过仅执行一个单独的裁减运算而减少这种计算量。在一个实施例中,小波滤波器包括插值公式,包括在一个实施例中,小波滤波器包括插值公式,包括Y2N+1=(X2N+1+)-(X2N+)在一个实施例中,小波滤波器包括插值公式,包括在一个实施例中,小波滤波器包括插值公式,包括在一个实施例中,小波滤波器包括插值公式,包括在一个实施例中,小波滤波器包括插值公式,包括在一个实施例中,小波滤波器包括插值公式,包括在一个实施例中,小波滤波器包括插值公式,包括(X2N+1+)=Y2N+1+(X2N+)提供了另一种压缩数据的系统和方法。首先,在一个单独的装置中接收数据。利用这个单独装置给这个数据编码,以产生第一格式的第一压缩数据。此外,利用该单独装置转换第一压缩数据的代码,以产生第二格式的第二压缩数据。在一个实施例中,编码可以实时发生。此外,代码转换可以离线进行。在另一个实施例中,可以代码转换第一压缩数据以产生第二格式的第二压缩数据,以便使第二压缩数据适合于匹配耦合到该单独装置的通信网的能力。作为一种选择,可以利用第一编码器进行编码。此外,可以利用解码器和第二编码器进行代码转换。此外,第一格式可以包括基于小波的格式。此外,第二格式可以包括基于DCT的格式。在一个特别的实施例中,第二格式可以包括MPEG格式。提供了利用在一个单独集成电路上的多个编码器压缩数据的另一种系统和方法。首先,在一个单独集成电路中接收数据。然后,利用结合在该单独集成电路上的多个编码器对数据编码。在一个实施例中,可以利用单独集成电路上的多个信道给数据编码。此外,可以将数据编码成基于小波的格式。提供了用于压缩数据的又一种单独模块系统和方法。在使用中,利用一个单独模块接收光子。然后,利用单独模块输出代表光子的压缩数据。作为一种选择,可以将压缩数据编码成基于小波的格式。此外,可以以模拟方式进行有关编码的变换运算。单独模块可以进一步包括成像器。现有技术图1示出了当前可用的各种压缩算法之间的权衡的例子;图2示出了根据一个实施例的用于压缩/解压缩数据的构架;图3示出了根据一个实施例的用于压缩/解压缩数据的方法;图4示出了对其执行图3的方法的数据结构;图5示出了根据一个实施例的压缩/解压缩数据的方法;图6示出了根据一个实施例的用于压缩数据的系统;和图7示出了利用一个单独集成电路上的多个编码器压缩数据的系统。具体实施例方式图2示出了根据一个实施例的压缩/解压缩数据的构架200。构架200中包括编码器部分201和解码器部分203,二者共同构成了“编码解码器(codec)”。编码器部分201包括用于压缩数据以存储在文件208中的变换模块202,量化器204,和熵编码器206。为了执行文件208的解压缩,解码器部分203包括用于解压缩数据以便使用(即,在视频数据情况下,为了观看,等等)的逆变换模块214,去量化器212,和熵解码器210。在使用中,变换模块202为解相关,对多个像素(在视频数据情况下)进行可逆变换,这个可逆变换通常是线性的。接下来,量化器204实施变换值的量化,然后,熵编码器206负责量化的变换系数的熵编码。图3示出了根据一个实施例的压缩/解压缩数据的方法300。在一个实施例中,本方法300可以在图2的变换模块202的设备环境下,并且以它执行可逆变换的方式进行。但是,应当注意,可以在任何希望的设备环境下实现方法300。在操作302中,接收(即,从存储器识别和检索,等等)用于压缩数据的插值公式。在本说明书的环境下,数据可以是任何能够被压缩的数据。此外,插值公式可以包括任何使用插值法(即,小波滤波器)的公式。在操作304中,在需要的数据值是难于得到的情况下,确定插值公式是否需要至少一个数据值。这种数据值可以包括上述数据的任何子集。由于是难于得到的,需要的数据值可能是不存在的,超范围的,等等。然后,执行外推运算,以产生需要的难于得到的数据值。见操作306。外推公式可以包括任何使用外推法的公式。通过这种方案,增强了数据的压缩。图4示出了在其上执行方法300的数据结构400。如图所示,在变换过程中,通过插值公式可以获得涉及多个数据值402的“最佳适合(bestfit)”401。注意图3的方法300的操作302。如果确定数据值402中的一个是难于得到的(见404),那么可以使用外推公式产生这个难于得到的数据值。以下参考图5说明有关上述技术的示例的更可选的细节。图5示出了根据一个实施例的压缩/解压缩数据的方法500。作为一种选择,本方法500可以在图2的变换模块202的环境下,并且以它进行可逆变换的方式进行。但是,应当注意,可以在任何希望的环境下实现方法500。方法500提供了一种产生用作小波滤波器对的边缘滤波器的技术。首先,在操作502中,分析小波方案以确定小波滤波器逼近的偏导数。接下来,在操作504中,根据小波滤波器的特性和一些可用抽样,选择用于外推法的多项式的阶数。然后,利用选择的多项式阶数导出每个小波滤波器的外推公式。见操作506。在操作508,利用具有每种情况下的可用抽样的外推公式导出特定的边缘小波情况。见利用Vandermonde矩阵求解系数的一种可选方法的附件A。此外,以下更详细地说明有关示例外推公式的附加可选信息以及相关信息。为了从左面逼近Y2N-1,从左面适配一个二次多项式。利用可用值近似计算在2N-1的二阶导数的一半的负值,产生方程式#1.1R。见一种可以确定这种外推二次多项式的方式的附件A。方程式#1.1R方程式1.1R当点是最右面的一个的时候,可以用方程式#1.1R代替方程式1.1(见
背景技术
部分)。可以通过移位相加完成明显的乘以3。除以3则更为复杂一些。对于最右面的指数是2N-1的这种情况,利用方程式#1.2计算Y2N-2不成问题(见
背景技术
部分)。在最右面的点的指数是偶数(即,2N)的情况下,方程式#1.1没有问题,但是方程式#1.2涉及到丢失值。这里的目的是要仅利用以前相关例子中计算的奇数指数的Y,即Y1和Y3,从偶数X减去Y的估计值。如上所述,这个需要的在指数2N的估计值可以通过线性外推法获得。方程式#1.2R给出了适合的公式。方程式#1.2R方程式1.2R对应的情况应用在左边界。使用类似的边缘滤波器,只不过是从右面(内部)进行需要的外推,而不是从左面。在这种情况下,方程式#1.1.L和1.2.L代表了适合的滤波器。方程式#1.1.L和1.2.L方程式1.1.L方程式1.2.L通过回代,可以获得这些外推边界滤波器的原始变换滤波器的逆变换滤波器。可以在与使用前向边界滤波器完全相同的环境中,用逆变换边界滤波器代替标准滤波器。方程式#2.1.Rinv,2.2.Rinv,2.1.L.inv,和2.2.L.inv代表了这些滤波器。方程式#2.1.Rinv,2.2.Rinv,2.1.L.inv,和2.2.L.inv方程式2.1.Rinv方程式2.2.Rinv方程式2.1.L.inv方程式2.2.L.inv因此,一个实施例可以利用5-3滤波器的再形成,从而避免了现有技术的附加步骤,同时保留了滤波器的实际属性。例如,见方程式#3.1,3.1R,3.2,3.2L。方程式#3.1,3.1R,3.2,3.2L方程式3.1Y2N+1=(X2N+1+)-(X2N+)方程式3.1R方程式3.2方程式3.2L在形成方程式中,用1/2的偏移或偏压计算特定的系数,以便避免上述加法。应当注意,尽管在形成方程式中,出现了许多1/2的加法,但是,在计算中不需要实际执行这些加法。在方程式#3.1和3.1R中,可以看到1/2的加法作用被抵消,因此,不需要将它们应用到输入数据。可以将圆括号中的项(Y0+)看成是实际计算、并且作为系数存储、传递到小波变换金字塔的下一级的量的名称。如上面的情况一样,可以在以下的方程式#4.2,4.2L,4.1,4.1R中重新构成JPEG-2000逆滤波器的公式。方程式#4.2,4.2L,4.1,4.1R方程式4.2方程式4.2L方程式4.1(X2N+1+)=Y2N+1+(X2N+)方程式4.1R从这里可以看到,用作对逆计算的输入的值是与方程式#3.1~3.2L中的前向计算中产生的相同项,并且不需要实际计算1/2的修正。以这种方式,减少了小波变换计算中执行的算术运算的总量。可选特征以下说明可以在图2-5的系统和方法的环境下使用的附加可选特征和技术。应当注意,提出的附加特征只是为了举例说明的目的,而不能解释为任何方式的限制。此外,这些特征可以独立于上述图2-5的系统和方法实现。一般可选特征在使用中,变换模块(即,例如,见图2的变换模块202)可以利用小波金字塔,这个小波金字塔起到将图像分割成近似覆盖一个倍频程(octave)(即,系数2)的子带的滤波器组的作用。在每个倍频程,具有对应于水平、垂直、和方格特征的三个子带。在一个实施例中,金字塔一般可以是三到五层深度,覆盖着相同数量的倍频程。如果原始图像是完全平滑的,那么小波系数的幅度迅速减小。图像可以具有2/3的Holder系数,这个系数大致表示图像具有一个导数的2/3。如果将小波系数以绝对值的降序排列,那么可以看到这些绝对值如同N-s一样降低,其中N是序列中的位置,s是图像的平滑度。在形成小波金字塔之后,可以通过量化器(即,例如,图2的量化器204,等等)定标(量化)小波系数,以获得与观看条件和人类视觉对比灵敏度曲线(CSF)一致的结果。通过说明人类视觉系统(HVS)的特性,可以大大减少用于编码色度子带的比特数。为了提供可以在最小硅面积需求中实现的快速算法,可以避免使用传统的算术编码器。例如,如上所述,可以避免占用很大硅面积的乘法运算。此外,这种算法可以具有运行的各个元件的很好的“快速路径”。编译码器可以使用两个交叠视频帧的画面组(GOP),边界的边缘滤波器,中间场图像压缩和块压缩结构。小的单独芯片的实现可以如下面表1中所示。表1■一种实现可以使用短小波基数(2-6个小波),短小波基数特别适合于致力于量化以匹配HVS的自然场景图像。可以利用相加和移位完成实现。对于每个场景,可以使用从在水平方向上使用五个滤波器和在垂直方向上使用三个滤波器得到的Mallat金字塔。这产生了具有双值系数的滤波器,在低通滤波器中是两个系数,在小波滤波器中是二、四、或六个系数(导致十二个小波子带)。在块和图像边界附近,可以使用改进的边缘滤波器,以便利用实际图像值。产生的视频金字塔可以具有一系列的零,以及一系列的非零。因此,可以通过查阅表有效地进行编码。■另一种解决方案可以使用经过3D小波金字塔的运动图像压缩,代替在MPEG之类的方法中的运动补偿搜索。可以将时间方向的变换压缩应用到四个场景的GOP。可以将两级时间金字塔用作与空间金字塔的张量积。可以在精密级使用线性边缘滤波器,和在粗糙级使用改进的Haar滤波器,导致四个时间子带。压缩这些时间子带的每一个。■可以将处理分解成8扫描线的块的处理,每个扫描线具有32个像素。这有助于将RAM需求减少到ASIC本身中可以放置RAM的点。这减少了芯片数量,并且简化了RAM带宽需求的满足。压缩处理可以一个条纹接一个条纹地进行(每个条纹两个通道)。一个“条纹”是8像素高和画面的整个宽度。■又一个实施例可以使用小波系数的量化取得压缩的进一步改进。量化的分母是2的幂,使得能够通过移位实现。量化可以是指一种将比例因数分配给每个子带,将子带中的每个系数乘以对应的比例因数,和将定标系数固定到一个整数的处理过程。组合滤波器作为另一种选择,可以有选择地用多相滤波器替代小波滤波器。在一个实施例中,这种替代可以在数据压缩/解压缩系统的变换模块(即,见图2的变换模块202和/或逆变换模块214)中发生。当然,这种特征可以独立于这里所述的各种其它特征实现。以下说明有关本可选特征的更多的示例信息。在本实施例中,在视频压缩编译码器的设计中,可以将常规(即,有限脉冲响应(FIR))信息放弃或平滑滤波器的使用与小波信息保留滤波器组合。FIR滤波器与小波滤波器的区别在于,常规FIR滤波器是单独使用,而小波滤波器总是以互补对偶的形式出现。此外,小波变换中的FIR滤波器不必如同多相滤波器组一样彼此有关。视频压缩可以在一个三步处理过程中执行;有时可以增加其它步骤,但是,如前所述,三个主要阶段是变换,量化,和熵编码。像通常实践中一样,这些操作一般仅在量化过程中放弃信息。实际上,如果删除这个操作,可以取得无损压缩方法。但是,无损压缩限于比有损压缩更小的压缩率,有损压缩利用了人类视觉系统,并且在译码结果中放弃了不能造成视觉差别或可忽略视觉差别的信息。一类具有可接受结果的有时可放弃的视觉信息是图像的微小细节。尽管视频压缩中使用的大多数变换处理过程能够通过量化步骤放弃微小细节信息,但是,它们这样做时,比直接低通滤波器实现的效率低,并且视觉忠实性低。一种实现平滑滤波器的方式是使用FIR结构。一种实现平滑滤波器的替代方式是使用无限脉冲响应(IIR)结构。当要改变图像或数据序列的大小时,可以使用由有关的FIR滤波器组成的多相滤波器组(PFB)。这种方法通过放弃一些细节和产生进一步处理的相对更小的图像来处理图像。多相滤波器组包括一组共享相同的带宽、或频率选择性性质,但是产生在原始抽样上或之间的不同位置上插入的像素的FIR滤波器。例如,可以使用多相滤波器组将一个图像(即,视频的一帧)减小到其原始宽度的2/3。它是通过计算每个原始像素之间的中途插入的像素,计算原始位置上平滑的像素,然后,在产生的像素流中每隔两个像素保留一个,而减小图像的宽度的。通过这种方法,可以省略计算不要保留的像素,导致一个减小图像尺寸的更为有效的方法。可以容易地将这种处理过程一般化到其它有理数分数大小改变。以这种方式,多相滤波器组可以平滑地放弃少量的微小细节,用小于一(1)的系数缩小图像。因数可以大于1/2。本实施例通过利用多相滤波器作为基于小波的图像压缩处理过程的第一阶段,将平滑细节放弃的优点与小波变换编码的画面质量组合到一起。通过使用这种组合,可以将来自使用多相滤波器组的最微小细节以及代表它们所需的比特的平滑、高质量、无人除去的优点,增加到来自使用小波变换作为图像和视频压缩的基础的快速有效计算和高视觉质量的已知优点。在本方法的第一实施例中,可以首先在一个方向上,一般是水平方向上,对图像使用多相滤波器组,然后,在用惯用方式量化和熵编码之前,将小波变换应用到图像。在本方法的第二实施例中,可以在一个特定方向上第一小波操作之前,在该方向上应用多相滤波器,但是,也可以在其它方向上小波操作之后。在又一个实施例中,可以在数个方向上的每个方向上第一小波操作之前,但是也可以在其它方向上的小波操作之后,在该方向上应用多相滤波器。在至少一些小波或DCT变换阶段之前应用有损滤波步骤的本方法具有几种优点。例如,可以设计诸如FIR或多相设计之类的、不限于以小波方式发挥作用的滤波器,以便获得更高的质量和更小的人为因素。可以将小波滤波器设计成将信息分裂成两个部分而不放弃信息的对偶形式。在变换操作之前而不是在其之后应用有损滤波器,意味着可以在较少的数据上操作变换计算,从而花费的时间较少,并且在计算时进行的中间存储较少。由于变换一般占压缩处理过程的相当大的部分,所以,这种减少导致整个压缩处理过程的速度和效率显著提高。利用堆的稀疏小波变换作为又一个选择,可以通过减少数据值的量而减少与熵编码相关的计算量。在一个实施例中,这种减少可以发生在数据压缩/解压缩系统的量化器中(即,见图2的量化器204)。当然,这种特征可以独立于这里所述的各种其它特征实现。以下说明有关本可选特征的更多的示例信息。在本实施例中,可以利用堆作为译码操作中的一种操作,从而准备在计算后续步骤中使用。从附录B可以看到更多的有关堆的信息。提供所谓的矩阵数据的稀疏表示,在科学计算领域中是已知的。普通矩阵被表示为作为矩阵元的数字的完整阵列;这叫作“稠密”表示。一些程序包在“稀疏矩阵”上存储、转换、和操作,在稀疏矩阵中,不一个接一个明显地表示零项,而是隐含地表示。一种这样的“稀疏”表示是零串(zero-run)编码,在零串编码中用一同出现的零的计数代表零。这个计数本身可以是零(当两个非零值相邻时),1(一个孤立的零值),或更大。但是,如果视频数据不是矩阵,那么一般不能对它们进行矩阵运算(即,乘法、倒转、特征值分解,等等)。可以提取稀疏矩阵计算的基础原理并转化到视频变换。简单地讲,一个堆是由一个对偶的阵列构成的;每个对偶给出了一个非零项的普通数据中的地址(或偏移)以及该项的值。地址或偏移是经过排序的,从而通过横越堆和考虑到非零元在完整数据集中的位置而对堆中的非零元进行运算,可以从一端到另一端横越整个数据集。堆是专门设计的,以便能够在使用相同的运算立即对数个数据项并行进行数据处理的计算机(即,SIMD处理器)上有效地实现,和在使得控制的条件转移花费比较高的计算机上实现。这些处理器共同使用,以处理视频和声频,并且有时被称为“媒体处理器(mediaprocessor)”。当需要对两个都是稀疏的数据集进行某种运算时,产生了在稠密地表示数据时不会出现的问题。即,“何时数据项彼此重合?”在对表示为堆的两个数据集进行操作时,识别重合数据集的基本操作叫作“匹配和归并(matchandmerge)”。在一个人横越两个堆时,他或她在开始之后的每个操作,可以从每个堆获得一个地址,和刚刚对其产生了输出值的地址。为了发现可以对其产生一个值的下一个地址,可以寻找用输入堆表示的两个地址的最小值。如果两个堆的这个地址是一致的,那么每个堆有一个可用的数据项,并且可以对两个值执行运算以产生希望的结果。然后,可以前进到两个堆的下一个项。如果两个堆中的下一个地址是不同的,那么在一个堆(一个数据集)中存在一个非零值,而在另一个数据集(由堆隐含表示的)中存在一个零值;那么可以对该一值和零进行运算,产生一个值。作为选择,如果当一个输入是零时执行操作一产生零,那么没有值产生。在任何一种情况下,都可以仅在具有最小值地址的堆上前进到下一项。将结果值放置到输出位置,稠密阵列(通过每当地址被一个以上的地址超前时写入显现的零)或输出堆中。如上所述,小波变换包括在一维或多维中,对一组数据重复地使用小波滤波器对。对于视频压缩,可以使用2-D小波变换(水平和垂直)或3-D小波变换(水平,垂直,和时间)。视频压缩器中变换阶段的意图是要通过利用画面或序列中的局部类似性和图形,将源画面的能量或信息集中到一种尽可能紧密的形式。没有一种压缩器可以压缩所有可能的输入;可以将压缩器设计为能够对“典型的”输入很好地工作,并且忽略它们不能压缩“随机”或“病态的”输入。当变换工作正常,并且将画面信息集中到很少几个变换系数时,剩余的系数之间有许多零。如上所述,量化结果也是视频压缩器的一个阶段。在这个阶段中,用零表示接近零的计算值。有时希望在小波变换的计算过程中量化计算的系数,而不是或附加地量化最终变换结果。所以可能在一些小波系数数据中得到许多零,并且这可能发生在需要对数据进行更多的计算时。此外,当一个人译码压缩图像或视频以显示它的时候,他或她可以从熵编码有效系数恢复用于显示的完全填满的图像。第一译码步骤,即熵代码译码,的典型输出是一组中间带有大量默认为零的无效系数的有效系数。当发生这种情况时,将带有许多零的稠密数据转换成稀疏表示是十分有价值的;可以通过如上所述地堆叠数据进行转换。堆表示组成一系列零的代表,但经常存储地址或偏移,而不是系列长度(地址的差)。这使得能够更快地处理二者,以建立堆,并且在以后将堆扩展成稠密表示。在译码的情况下,数据不是稠密形式,并且直接在熵解码器中构造堆更为自然。小波变换的处理存在几种容易受堆叠处理影响的情况。注意下面的表2表2■解压缩,两个带堆叠■解压缩,一个带堆叠■解压缩,输入堆叠和输出稠密■压缩,输入稠密和输出堆叠下面考虑一个例子译码一个压缩的视频帧,其中编码处理已经导致许多系数被量化成零。解压缩的第一阶段撤销非零系数的熵编码或位编码,给出值和帧中每个值的位置。这正好是在一个堆中表示的信息,并且很容易用一个堆来存储它,而不是立即通过显式地填充所有间隔的零值将它扩展成稠密表示。在这个阶段,已经准备好要通过逆小波变换中运算的系数。逆变换的最终结果是准备用于显示的解压缩图像;它极少是稀疏的。(如每个阶段一样)逆小波变换的第一阶段是从系数数据的两个区或“带”提取数据,然后将它们组合成一个中间带的滤波器计算,中间带将在同一处理过程的以后阶段中使用。在这个第一阶段,两个带的数据是稀疏的,并且在堆中表示。一个人也可以在一个堆中产生这个阶段的输出,从而他或她不需填充零。下面的表3的计算对“带”堆P1和P2执行,在新的堆R中产生它的结果,并且对来自两个带的系数对执行滤波器计算步骤W(p,q)。表3whilenotbothEOF(P1),EOP(P2){I1=0;I2=0;guard(P1.index≤P2.index,Pile_Read(P1,I1));guard(P1.index≥P2.index,Pile_Read(P2,I2));Conditional_Append(R,true,W(I1,I2));};Destroy_Pile(P1);Destroy_Pile(P2);应当注意,上述计算仍然能够展开以便并行运算,如附录B中所示。通过将稀疏表示,堆,用作具有许多零值的中间结果,可以减少计算小波变换花费的时间。这种方法提高了基于小波的图像压缩和视频压缩产品的性能和计算效率。变换范围限制作为又一种选择,可以减少与将数据值重构到预定的数据范围内相关的计算量。这种计算可以通过仅执行一个单独裁减运算减少。在一个实施例中,这种减少可以发生在数据压缩/解压缩系统的去量化器模块中(即,见图2的去量化器212)。当然,这个特征可以独立于这里所述的各种其它特征实现。以下说明有关本可选特征的更多的示例信息。在数字图像压缩和数字视频压缩方法中,将图像(或帧)表示为数字的阵列,每个数字代表一个区的亮度,或一个区中一个特定颜色(例如,红色)的量。这些区称为像素,并且将数字称为抽样或组成值。图像压缩或视频压缩是利用许多不同方法进行的。如上所述,这些方法中的许多包括作为一个步骤的变换计算通过一个算术运算序列,将代表图像的抽样阵列变换成称为系数的不同的数字阵列,系数包含图像的信息,但是并不一一单独地对应于小区的亮度或颜色。尽管变换包含相同的图像信息,但是这种信息以有利于压缩方法的进一步运算的方式分布在数字之间。当要重放通过这种方法压缩的图像或帧时,必须随压缩数据解压缩。这通常包括,作为一个步骤的,计算采用一个系数阵列和产生一个抽样阵列的逆变换。图像或帧的抽样通常用短长度的整数代表,一般用8个二进制位代表。一个8位数字仅可以代表256个不同值,并且在这些应用中,一般将这些值考虑为从零到255(包括零和255)的整数范围。许多标准和操作条件设置了比这更为严格的范围。例如,在CCIR-601(ITU-RBT.601-4)中,将像素分量(Y,U,V)抽样值规定到比更小的范围。更具体地讲,将屏幕的照亮部分中的流明Y分量有效范围规定为在[16,235]内,色度分量U,V范围限制在[16,240]范围内。超出这些范围的值可能具有不是亮度的意义,例如,指示同步事件。图像和视频压缩方法可以划分成两个范畴,无损和有损压缩。无损压缩方法的操作方式是要从解压缩产生与用于压缩的值完全相同的值。对于这些方法,由于输出占据了与输入相同的数字范围,因此没有范围问题。但是,有损压缩产生只是预期近似于原始输入的,而不是与之每位都匹配的,解压缩输出。通过利用这种自由度轻微地改变图像,有损方法可以产生更大的压缩率。在有损压缩方法的解压缩部分中,并不保证计算的抽样与对应的原始抽样相同,因此,不保证占据相同的值范围。因此,为了满足图像标准的范围条件,必须包括将计算的值限制或剪裁到规定范围的步骤。执行这个剪裁步骤的直接方式如下对于每个计算的抽样s,测试是否s>max(最大值),如果是,那么设置s=max;测试是否s<min(最小值),如果是,那么设置s=min。执行这个步骤的另一种方式使用在某种计算平台上发现的MAX和MIN算子;然后对每个抽样进行两个运算。所示的两个方式,和许多其它方式,都要比诸如加法和减法之类的简单算术运算执行更多的计算。由于可以对图像或帧中的每个抽样值(每个像素)独立地执行这种处理过程,因此,它是解压缩方法中的计算的重要部分。应当注意,对于在一般情况下处于需要的范围内的几乎所有计算的抽样,两种测试都会失败,因此,必须计算两种测试。上述变换计算通常具有以下的性质产生的系数中的一个代表整个帧的或帧的一个有效部分的(MPEG术语中的一个块)的总亮度。这个系数叫作“DC系数”。由于计算变换的方式,改变DC系数将以相同的方式、与进行的选择成正比地改变它的帧或块中的所有抽样的值。因此,例如,可以通过刚好在计算逆变换之前,将适当选择的常数加到块的DC系数,将块中的每个抽样的值增加相同的量。在其上执行压缩方法的计算引擎通常具有带有饱和性质的算术指令当计算一个结果时,如果它超过其容器的代表范围(对于8位量,是),那么裁减结果以便能够在该范围内。例如,如果将饱和减法指令给予值4和9,那么要裁减以取代结果(4-9=)-5,并返回结果0。同样,饱和加法指令250+10将会产生结果255。以下说明在许多压缩方法中,从译码到适当限度得到的裁减像素分量值的低价方式。本实施例通过对部分的值加上一个偏差值,仅剩下MAX/MIN算子中的一个,而执行两个使用饱和算术的裁减中的一个。详细地参考一个例子,当需要的范围是[llim,ulim]=[16,240]时,见表4。表41.将偏差加到每个块中的DC系数,这在变换滤波器之后导致每个部分偏移负16(一般,-llim)。代价每个块或帧一次算术运算。2.保证逆变换的最终算术步骤在零饱和(裁减)。代价在大多数计算引擎上不用进行。3.间隔224(一般,ulim-llim),应用MAX运算。代价每个抽样一次MAX运算。4.利用ADD(加)16(一般,llim)消除偏差。由于正好在MAX之前,所以不能溢流。在饱和算术时,不需要进行。代价每个抽样一次ADD。现在可以看到,必要的范围限制的计算代价可以从每抽样两次MAX/MIM运算,减少到每块一次ADD,每抽样一次MAX,和每抽样一次简单ADD。在某些计算引擎上,例如,EQUATORMAP-CA处理器上,使用本方法获得的节省远大于上述看到的节省。在这些引擎上,可以将数个抽样组合在一个字中,并同时运算。但是,这些分块运算限于处理器的某些部分,并且在压缩应用中可以是性能的极限资源。在这样的一个引擎上,上述步骤4中的ADD不能溢流的事实具有重大意义。步骤4不需要使用特定的分区ADD,但是,可使用普通ADD以便如同分区一样立即对数个抽样运算。这种普通运算使用没有高度负载的处理器的部分,并且可以溢流,或在其它必要分区运算的同时执行,导致计算逆变换中时间的显著节省。图6示出了根据一个实施例的、用于压缩数据的系统600。作为一种选择,系统600可以在前面提出的上述概念的环境下实现。但是,当然,系统600可以在任何希望的环境下实现。系统600包括一个包含在单独装置604上的编码器602,用于编码数据以产生第一格式的第一压缩数据。此外,代码转换器606包含在与编码器602相同的单独装置604上,用于代码转换第一压缩数据,以产生第二格式的第二压缩数据。在使用中,在单独装置604中接收数据。利用单独装置604编码这个数据,以产生第一格式的第二压缩数据。此外,利用单独装置604代码转换第一压缩数据以产生第二格式的第二压缩数据。在一个实施例中,编码可以实时进行。此外,代码转换可以离线进行。在另一个实施例中,可以代码转换第一压缩数据,以产生第二格式的第二压缩数据,从而使得第二压缩数据能够适合于匹配耦合到单独装置604的通信网的能力。作为一种选择,编码可以利用第一编码器执行。此外,代码转换可以利用一个解码器和一个第二编码器进行,如图6中所示。第一格式也可以包括基于小波的格式。此外,第二格式可以包括基于DCT的格式。在一个具体的实施例中,第二格式可以包括MPEG格式。以下说明有关附加可选特征的更多的示例信息。如上所述,存在着数种利用图像和视频序列的通信模式。除了直接实时观看之外,人可以捕获图像或视频序列,并且在紧接着捕获之后或延迟到更为有利的时间的以后时间中发送它。此外,视频序列的接收可以像看电视那样观看但是不存储视频的实时模式进行,或存储序列以便过后观看的另一种模式进行。除了其它组合之外,这些不同选择组合成三种使用情况。这三种情况是1.上述的视频电话或画面电话操作,其中发射机和接收机都实时操作。这需要所有压缩、编码、和译码都以视频捕获的速度实时进行,并且需要传输信道携带全速率压缩视频。2.流式操作,在流式操作中,实时地在源或网络中捕获和存储视频,并且在接收机观看。这需要实时译码,但是允许在传输之前用一段时间处理序列。这种模式至少需要从网络到接收机的传输信道,以携带全速率的压缩视频。此外,对于大多数传输信道,接收机必须缓存一定数量的序列,以便在传输速率出现变化时,保持平稳的播放。3.消息发送或文件传输(messagingorFile-transfer)模式,在这种模式中,捕获视频并且存储在源,非实时地传送到接收机,并且存储在接收机以便以后播放。这种模式允许在不能携带全速率实时视频的传输信道上操作,并且允许接收者重放、暂停、和控制经历。可以将捕获和用一种格式压缩的图像或视频转换到另一种格式。这种操作称为代码转换。在最坏的情况下,这是通过将输入格式解压缩成满画面或视频,然后以希望的输出格式压缩而进行的。对于许多格式对,可以使用比这种最坏情况的方法更便宜的方法。在诸如国际蜂窝电话网之类的许多网络中,不同用户可能更喜欢或需要不同格式的图像或视频。例如,即使由于MPEG-4标准提供了多种外形、大小、速率、和其它参数的选择,所有用户都拥护该标准,就是这种情况。由于这个和其它原因,有时希望发送和接收装置能够协商在一个特定传输中使用哪种格式。在最简单的情况中,每个装置提供一个它能够处理的格式的列表,并且都从列表的交集中选择一个可以共同接受的格式。存在着更为复杂的协商形式,但是,总体效果是相同的发送者仅知道在连接开始之后发送的格式。当需要代码转换作为连接的一个部分时,可以在始发装置或某个中间位置上执行它。一些网络可以提供代码转换服务作为网络操作的一个部分,以便在完全不同的本机性能的装置之间提供相互的通信。这将有助于保持复杂性,因此移动单元的成本较低。由于上述视频数据率和传输信道速率之间的完全不同,所以用下述新的模式操作可能是有利的。装置捕获视频,使用下述低复杂性压缩方法实时压缩它,并且存储压缩的视频序列。然后,在以后的时间,装置可以将视频序列代码转换成接收方或网络可以接受的格式。这允许低功率操作、长电池寿命、和装置中更简单的电路,并且兼顾了与网络格式标准的完全兼容性。这种操作类型的一个优点是灵活性实时压缩的选择不限制装置能够与之直接通信的接收机的范围。如上所述,可以在传送呼叫时协商传输格式。由于装置不需要每一个都具有广阔优化的实时实现,所以装置可以用这种方式支持更广的格式范围。上述操作类型的另一个优点是代码转换不需要操作在视频捕获的速度,而是可以匹配于通常是非常低的传输网的速度。较低的速度代码转换操作又能够在比标准实时压缩使用的更小和消耗更低功率的电路中进行。因此,降低了装置的总功率消耗、电池寿命、复杂性、和成本。这种操作类型的又一个优点是能够将图像和视频的传输从白天电话价格之类的高成本的时间推迟到晚间价格的较低成本(或当前蜂窝电话定价方案,甚至免费)的时间。由于是除时间之外的因素,传输在另外的时间具有较低的价格。例如,蜂窝电话在返回到其本地时比在“漫游”时费用低。上述推迟传输不需要装置的用户采取任何推迟行动。装置能够根据它具有的有关费用和时间表的信息,自动地确定传输的时间。因此,保留了用户便利性。当然,感觉到一些消息具有比其它消息更高的急迫性;用户可以容易地指定是否要推迟传输和推迟多长时间。当非实时发送图像和视频时,装置的用户可能在传输正在进行时,或进入呼叫要到达时,或由于某种其它原因连接要断开时,进行呼叫。计算机组网领域中的人们都知道,提供使得中断的传送能够恢复,而不必重新发送已经成功地传送的信息部分的信息。这种可中断传送可以允许搁置一个呼叫之类的故意中断和断线之类的意外中断。接收装置不需要具有存储整个视频序列的能力。转换代码源装置可以发送到一个流式接收机,包括比发送机更简单和更小能力的接收机。这使得能够容易地将先进的代码转换装置使用到现有装置的网络中。标准图像和视频格式提供了错误检测,错误纠正,和猝发错误控制方法。通过代码转换到这些标准格式,装置可以在使用低复杂性和低功率捕获压缩方法的同时,充分地利用标准错误恢复特征。可以将使用低复杂性实时处理捕获感兴趣的信号,然后在晚些时间将其代码转换成更适合于发送的格式的思想应用到除图像和视频之外的信号、和除无线发送之外的用途、以及除移动个人设备之外的装置。例如,军用智能传感、红外遥感、望远镜频谱、射电望远镜信号、SETI信道、生化测量、地震信号、和许多其它应用都可以从这个基本方案获益。图7示出了利用一个单独集成电路704(即,ASIC)上的多个编码器702压缩数据的系统700。作为一种选择,系统700可以在上述概念的环境下实现。当然,系统700也可以在任何希望的环境中实现。如图所示,第一编码器结合在单独集成电路704上,用于编码第一组信号。此外,第二编码器结合在与第一编码器同一个单独集成电路704上,用于编码第二组数据。当然,为了类似的目的,可以将更多的编码器结合在单独集成电路704上。在使用中,在单独集成电路中接收数据。然后,利用多个结合在单独集成电路上的编码器给数据编码。在一个实施例中,可以利用单独集成电路上的多个信道给数据编码。此外,可以将数据编码成基于小波的格式。许多视频压缩应用更好的是通过包含多个编码或译码阶段的ASIC服务。一个例子是个人录像机(PVR)或数字录像机(DVR)的范畴,例如,TiVo和ReplayTV的产品,其中压缩和解压缩的处理必须同时执行。另一个例子是视频监视录像机,其中来自摄像机的许多视频信号必须一同多路传输、压缩、和记录。将数个压缩电路放置在一个单独ASIC上,或将压缩和解压缩电路组合在一个单独ASIC上,提供了直接和间接的优点。直接优点包括减少的封装数,减少的插脚数,降低的功率消耗,和减小的电路板面积。所有这些优点对降低产品成本作出了贡献。间接优点包括可以将视频部分和多路传输电路结合在同一芯片上,进一步减少了插脚数和电路板面积。现有多种需要比惯用和标准压缩方法少得多的电路来实现的压缩方法,例如,参考图2-5所述的,由DropletTechnology,Inc.开发的算法。由于它们优越的设计,现在可以将多个这种先进的压缩方法的例子集成到一个单独ASIC或其它集成电路中。进一步提供了另一个压缩数据的单独模块系统和方法。在使用中,利用一个单独模块接收光子。然后,利用单独模块输出代表光子的压缩数据。作为一种选择,可以将压缩数据编码成基于小波的格式。此外,与编码相关的变换运算可以用模拟方法进行。单独模块可以进一步包括成像器。本实施例可以用于构造成像器阵列,即CMOS或CCD照相机或其它装置,以帮助捕获和传送压缩数字视频的整个处理。直接数字化的图像和视频占用许多位;这在压缩图像和视频以便存储、传输、和其它用途中是共同的。已知有几种基本压缩方法,和这些方法的许多专用改进。一般方法可以用三段式处理来表示其特征变换、量化、和熵编码。视频压缩器中变换阶段的意图是要通过利用画面或序列中的局部类似性和图形,将源画面的能量或信息集中成一种尽可能紧凑的形式。本实施例对于“典型的”输入十分有效,并且忽略它们不能压缩“随机的”或“病态的”输入。许多图像压缩和视频压缩方法,例如,JPEG[1],MPEG-2[2]和MPEG-4[4],使用离散余弦变换(DCT)作为变换阶段。一些较新的图像压缩和视频压缩方法,例如,JPEG-2000[3]和MPEG-4结构[4],使用各种小波变换作为变换阶段。小波变换包括在一维或多维中对一组数据重复使用小波滤波器对。对于图像压缩,可以使用2-D小波变换(水平和垂直);对于视频,可以使用3-D小波变换(水平,垂直,和时间)。小波滤波器对处理图像(或图像的一部分),以产生两个图像,每个图像一般为输入大小的一半,可以将一个看成是“低通”或平均或模糊的,而另一个是“高通”或详细或边缘。保持输入画面中的全部信息,并且(在许多情况下)可以从变换的图像对完全地重构原始画面。一个小波滤波器对一般在一维,即水平、垂直、或时间(跨越帧的时间序列),处理图像。全小波变换是由在数维中连续使用的一系列这些步骤构成的。一般,不是早先步骤的所有结果都要受到以后步骤的处理;有时保持高通图像而不进一步过滤。照相机在其心脏部分具有一个成像器装置某种响应和记录光的变化的强度和颜色以便以后显示和其它用途的装置。当今数字静止照相机和视频摄像机的通用成像装置是CCD和CMOS。这两种成像装置都把对应于光的电荷累积在每个像素;它们的不同在于它们传送和读出电荷量的方式。CMOS(“互补金属氧化物半导体”)成像器是较新的技术,并且可以比CCD更便宜地制造。CMOS成像器的一个关键优点是,成像器芯片的处理十分类似于数字逻辑芯片的处理。这使得它能够更容易地在同一芯片上包括控制和其它功能。但是,这两种芯片在最低一级都必须由模拟电路建造以测量代表看到的光量的模拟电荷或电压或电流。CMOS成像器在结构上与DRAM(“动态随机存取存储器”)十分相似,并且沿着跨越阵列的金属迹线的格栅将像素中代表看到的光量的电荷传送到阵列的边缘。这种读出方法是存储芯片的标准惯例,并且在工业中得到广泛的应用。CCD成像器尽管是一种较老的技术,但是得到广泛的应用并且提供了较低的噪声和较好的灵敏度。CCD(“电荷耦合器件”)通过将代表像素中看到的光的电荷以组桶式(bucket-brigade)方式从一个单元传送到另一个单元,而将其传送到阵列边缘。CMOS成像器或CCE成像器与数字存储装置的不同之处在于,传送到阵列边缘的电荷不仅代表“0”或“1”比特,而且代表亮度值的范围。因此,需要模/数转换。在这种转换之前,放大信号;经常要受到其它处理,以消除芯片制造和操作中的误差和可变性。一个共同的步骤是“相关复式抽样(correlateddoublesampling)”,在“相关复式抽样”中,提取黑暗抽样,并作为电路的这个部分的泄漏电流的测量值存储,并且从图像抽样中减去以降低噪声图。模拟处理在差动放大器中进行,差动放大器是一种主要响应其输入之间的差的电路,而不是响应二者中任何一个的绝对大小的电路。在光捕获与存储的数字图像之间的处理链中的某个点,必须将信号从模拟(电荷、电压、或电流)代表转换成数字代表。由于一个人可以选择在处理链中早一些或迟一些进行模/数转换,因此,他或她具有以模拟或数字形式进行总体处理的某些阶段的选择自由。在一些装置中,作为小波的一个步骤的小波滤波器对是由相邻和附近像素值的十分简单的加法和减法集合构成的。例如,称为“Haar小波”的可用滤波器对只是下面方程式#1.1H和1.2H中的和与差。方程式#1.1H和1.2HLn=X2n+X2n+1方程式1.1HHn=X2n-X2n+1方程式1.2H这从输入图像“X”的相同两个抽样产生了一个“高”变换图像和一个“低”变换图像。也可以使用其它小波滤波器;一些十分复杂,但是一些就像进行几个Haar步骤、将它们加在一起、和用常量给它们定标一样简单。例如,JPEG2000标准[1]中规定的变换之一是前面方程式#1.1和1.2中提出的可逆5-3变换。可以看到,整个小波滤波器对进行5次加法/减法运算,和两次定标运算;在连续的模拟域中,不出现向下取整运算(flooroperation)。这又造成可以通过差动放大器(用于加法或减法)容易和自然地完成模拟值的相加,和用常量定标成为对于模拟信号的所有运算中最容易的运算,仅需要一两个电阻器。相反,在数字域中值的求和需要每位一个加法器逻辑电路,加上一个进位链;用一些特定常量定标比较容易,但是一般定标在数字逻辑电路中并不便宜。由于CMOS和CCD成像器现在是用差动放大器建造的,以便放大和减去来自芯片上像素抽样的噪声,所以在数/模转换之前很容易在芯片上进行某些处理步骤。进行这些步骤要在芯片上增加一些模拟电路,但是,可以是少量的电路。这又造成在小波变换的一些装置中,包括那些优选的装置,计算的第一步骤是开销最大的。这是由于头几个步骤中的每个步骤减少了要在以后的阶段中处理的图像量;不需要进一步处理每个滤波器阶段输出的“高通”图像。因此,在进行模/数转换之前,在模拟中执行第一步骤或头几个步骤可以显著减少数字处理,因为仅有“低通”图像必须进行数字处理。可以通过减少数字电路的数量,从而减少它占据的芯片面积,或通过较慢地运行数字电路,从而降低器功率消耗和热量产生,而获得利益。可以利用DCT执行图像或视频压缩的变换阶段;这种处理将图像变换成光谱,光谱的连续抽样代表了图像中一定范围的空间频率的内容。DCT的一些实现使用了Haar步骤,并且这些步骤也可以以模拟方式进行而受益。在小波变换中,通常可以计算水平滤波器对作为第一步骤。这似乎也便于模拟过滤。在进行第一垂直滤波器步骤之前,可以进行两个水平步骤,并且也是以模拟方式更为便利。垂直滤波器步骤需要同时存在垂直相邻的像素。在惯用图像扫描光栅次序中,这些像素出现的时间间隔(线时间间隔)大。但是,在CMOS成像器之类的芯片成像器中,考虑重新排列扫描次序从而使得数个线一同出现,并且可以在第一水平滤波器步骤之前或之后,也用模拟方式进行垂直滤波器步骤,是合理的。捕获彩色图像的成像器芯片一般将彩色滤波器放置在每个像素之前,限定它对红、绿、或蓝中的一个作出响应。这些滤波器排列成一种图形,以便能够在图像的每一处相邻地抽样所有三种颜色。但是,数字视频标准宁愿使用不是RGB分量的排列。更广泛使用的是YUV,或YCbCr,其中Y分量代表黑白亮度或“流明”,U和V分量代表蓝或红与流明之间的色差。这种表示方法的原因是人类视觉响应允许C分量中较低的清晰度,因此允许图像的较小的数字代表。YUV代表也便于压缩。彩色图像芯片有时提供电路以模拟地(在转换之前)或数字地(在转换之后)进行将RGB像素值变换成YUV值的运算。可以用数种方式中的任何一种方式,将颜色转换与小波滤波器步骤组合。例如,模拟彩色转换可以在第一模拟小波滤波器步骤之前;在这种情况下,小波滤波器在全带宽Y分量,或半带宽U和V分量上工作。作为选择,可以将小波滤波器应用于R,G,和B分量,首先从成像器阵列,接下来彩色转换到YUV;在这种情况下,滤波器对三个全带宽分量信号操作。在另一种排列中,可以完全取消惯用的彩色转换步骤,并且将RGB分量提供到小波变换。存在有数种作为它们的操作的一部分而完成到YUV的转换的小波变换的版本。在这种排列中,为了不净增加模拟电路、减少数字电路、和与数字小波压缩处理十分清洁的连接,用进行第一小波步骤的模拟电路代替进行彩色转换的模拟电路。因此,显示了如何通过结合初始小波滤波器步骤的模拟计算,使得压缩数字视频捕获子系统更为有效。对于单色成像器可以做到这一点,并且可以用数种方式与彩色数字成像器的彩色转换阶段组合。这种方法改进了基于小波的图像压缩和视频压缩产品的性能和计算效率。尽管上面说明了各种实施例,但是,应当知道它们仅是通过举例说明的方式提出的,而不是要限制本发明。因此,优选实施例的宽度和范围不受上述任何示例实施例的限制,而是应当仅根据下面的权利要求及其等价物定义。附录A对于二次方程可以有三个数据值[X2N-1X2N-2X2N-4],并且需要三个系数;<math><mrow><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mi>a</mi><mn>0</mn></msub></mtd><mtd><msub><mi>a</mi><mn>1</mn></msub></mtd><mtd><msub><mi>a</mi><mn>2</mn></msub></mtd></mtr></mtable></mfenced><mfencedopen='['close=']'><mtable><mtr><mtd><msup><mi>x</mi><mn>0</mn></msup></mtd></mtr><mtr><mtd><msup><mi>x</mi><mn>1</mn></msup></mtd></mtr><mtr><mtd><msup><mi>x</mi><mn>2</mn></msup></mtd></mtr></mtable></mfenced><mo>=</mo><msub><mi>a</mi><mn>0</mn></msub><mo>+</mo><msub><mi>a</mi><mn>1</mn></msub><mi>x</mi><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><msup><mi>x</mi><mn>2</mn></msup></mrow></math>二次导数一半的负值可能是所以可能仅对a2感兴趣。在这种情况下,找到二次方程更为简单<math><mrow><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>0</mn></msub></mtd><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>1</mn></msub></mtd><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>2</mn></msub></mtd></mtr></mtable></mfenced><mfencedopen='['close=']'><mtable><mtr><mtd><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mn>2</mn><mi>N</mi><mo>)</mo></mrow><mn>0</mn></msup></mtd></mtr><mtr><mtd><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mn>2</mn><mi>N</mi><mo>)</mo></mrow><mn>1</mn></msup></mtd></mtr><mtr><mtd><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mn>2</mn><mi>N</mi><mo>)</mo></mrow><mn>2</mn></msup></mtd></mtr></mtable></mfenced><mo>=</mo><msub><mover><mi>a</mi><mo>~</mo></mover><mn>0</mn></msub><mo>+</mo><msub><mover><mi>a</mi><mo>~</mo></mover><mn>1</mn></msub><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mn>2</mn><mi>N</mi><mo>)</mo></mrow><mo>+</mo><msub><mover><mi>a</mi><mo>~</mo></mover><mn>2</mn></msub><msup><mrow><mo>(</mo><mi>x</mi><mo>-</mo><mn>2</mn><mi>N</mi><mo>)</mo></mrow><mn>2</mn></msup></mrow></math>由于<math><mrow><msub><mi>a</mi><mn>2</mn></msub><mo>=</mo><msub><mover><mi>a</mi><mo>~</mo></mover><mn>2</mn></msub></mrow></math>可以解带有Vandermonde类型系数矩阵的三个线性方程。<math><mrow><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>0</mn></msub></mtd><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>1</mn></msub></mtd><mtd><mrow><msub><mover><mi>a</mi><mo>~</mo></mover><mn>2</mn></msub></mrow></mtd></mtr></mtable></mfenced><mfencedopen='['close=']'><mtable><mtr><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>0</mn></msup></mtd><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>2</mn><mo>)</mo></mrow><mn>0</mn></msup></mtd><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>4</mn><mo>)</mo></mrow><mn>0</mn></msup></mtd></mtr><mtr><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>1</mn></msup></mtd><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>2</mn><mo>)</mo></mrow><mn>1</mn></msup></mtd><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>4</mn><mo>)</mo></mrow><mn>1</mn></msup></mtd></mtr><mtr><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mn>2</mn></msup></mtd><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>2</mn><mo>)</mo></mrow><mn>2</mn></msup></mtd><mtd><msup><mrow><mo>(</mo><mo>-</mo><mn>4</mn><mo>)</mo></mrow><mn>2</mn></msup></mtd></mtr></mtable></mfenced><mo>=</mo><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>4</mn></mrow></msub></mtd></mtr></mtable></mfenced></mrow></math><math><mrow><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>0</mn></msub></mtd><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>1</mn></msub></mtd><mtd><msub><mover><mi>a</mi><mo>~</mo></mover><mn>2</mn></msub></mtd></mtr></mtable></mfenced><mo>=</mo><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>4</mn></mrow></msub></mtd></mtr></mtable></mfenced><mfrac><mn>1</mn><mn>6</mn></mfrac><mfencedopen='['close=']'><mtable><mtr><mtd><mn>16</mn></mtd><mtd><mn>12</mn></mtd><mtd><mn>2</mn></mtd></mtr><mtr><mtd><mo>-</mo><mn>12</mn></mtd><mtd><mo>-</mo><mn>15</mn></mtd><mtd><mo>-</mo><mn>3</mn></mtd></mtr><mtr><mtd><mn>2</mn></mtd><mtd><mn>3</mn></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced></mrow></math>二次导数的负值的一半是<math><mrow><mo>-</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mn>2</mn><msub><mi>a</mi><mn>2</mn></msub><mo>=</mo><mo>-</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mn>2</mn><msub><mover><mi>a</mi><mo>~</mo></mover><mn>2</mn></msub><mo>=</mo><mo>-</mo><mfrac><mn>1</mn><mn>6</mn></mfrac><mfencedopen='['close=']'><mtable><mtr><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>4</mn></mrow></msub></mtd></mtr></mtable></mfenced><mfencedopen='['close=']'><mtable><mtr><mtd><mn>2</mn></mtd></mtr><mtr><mtd><mo>-</mo><mn>3</mn></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>=</mo><mo>-</mo><mfrac><mn>2</mn><mn>6</mn></mfrac><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>+</mo><mfrac><mn>3</mn><mn>6</mn></mfrac><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>2</mn></mrow></msub><mo>-</mo><mfrac><mn>1</mn><mn>6</mn></mfrac><msub><mi>X</mi><mrow><mn>2</mn><mi>N</mi><mo>-</mo><mn>4</mn></mrow></msub></mrow></math>附录B堆介绍当需要的算法具有窄的数据宽度、串行数据依赖性、或频繁的控制语句(例如,“if”,“for”,“while”语句)时,对于高通量并行处理器难于编程。本实施例克服了所有这三个问题,单独地或组合地。熵编码应用是一种具有所有三种类型的问题的重要的应用类。并行处理有三种类型的可以在处理器中使用而产生良好效果的并行。1)第一种类型是由多个功能单元支持的,并且允许处理在每个功能单元中同时进行。超标量(super-scaler)处理器体系结构和VLIW(超长指令字(VeryLongInstructionWord))处理器体系结构允许在同一周期中将指令发送到数个功能单元中的每一个。在一般情况下,每种类型的功能单元的等待时间或完成时间都是不同的。最简单的功能(例如,逐位AND)通常在一个单独的周期中完成,而浮点加法功能可能要用3或更多的周期。2)第二种类型的并行处理是由各个功能单元的流水线操作支持的。例如,浮点加法可能要用3个周期完成,并且是在每个都需要1个周期的三个连续子功能中实现的。通过将流水线寄存器设置在子功能之间,可以在前一个浮点加法在第二子功能中开始的同一周期中,第二浮点加法在第一子功能中开始。通过这种措施,可以在每个周期中开始和完成一个浮点加法,尽管任何单个浮点加法需要3个周期来完成。3)可用第三种类型的并行处理是将一个字的不同字段分段用于相同计算的不同范例。例如,在一个32位处理器上可以将一个32位的字分割成4个8位的字段分段。如果数据项小到足以适合于8位,那么可以用同一单独指令处理所有4个值。在每个单独周期中,可以处理等于字段分段数乘以功能单元开始数的积的数量的数据项。循环展开有一种给多个和/或流水线的功能单元编程的惯用的一般方法找到同一计算的许多范例,和一同执行来自每个范例的对应运算。范例可以通过循环展开的技术或通过相同计算的某种其它源产生。尽管循环展开是一种通用的技术,但是,一个特殊的例子有助于理解其好处。例如,考虑程序A)fori=0:1:255,{S(i)};其中体S(i)是依赖于i的运算序列{S1(i);S2(i);S3(i);S4(i);S5(i);},并且其中计算S(i)完全独立于计算S(j),j≠i。可以不假设运算S1(i);S2(i);S3(i);S4(i);S5(i);彼此独立;而是相反,可以假设从一个运算到下一个运算的依赖关系禁止重新排序。也可以假设这些相同的依赖性需要直到前一个运算完成才能开始下一个运算。如果每个(流水线)运算需要两个周期完成(即使每个周期流水线执行单元可以产生一个新的结果),五个运算的序列需要10个周期完成。此外,循环转移一般需要额外的3个周期,除非编程工具能够使S4(i);S5(i);与转移延迟重叠。如果重叠了转移延迟,那么程序A)需要256/4*10=640周期完成,如果不重叠转移延迟,那么需要256/4*13=832周期完成。程序B)forn=0:4:255,{S(n);S(n+1);S(n+2);S(n+3);}完全等价于程序A)。循环已经被“展开”四次。这使昂贵的控制流改变数量减少了四倍。更为重要的是,它提供了给四个S(i)中的每一个的组成运算重新排序的机会。所以程序A)和B)等价于程序C)forn=0:4:255,{S1(n);S2(n);S3(n);S4(n);S5(n);S1(n+1);S2(n+1);S3(n+1);S4(n+1);S5(n+1);S1(n+2);S2(n+2);S3(n+2);S4(n+2);S5(n+2);S1(n+3);S2(n+3);S3(n+3);S4(n+3);S5(n+3);};利用以上有关依赖性和独立性的假设集,可以建立等价的程序D)forn=0:4:255,{S1(n);S1(n+1);S1(n+2);S1(n+3);S2(n);S2(n+1);S2(n+2);S2(n+3);S3(n);S3(n+1);S3(n+2);S3(n+3);S4(n);S4(n+1);S4(n+2);S4(n+3);S5(n);S5(n+1);S5(n+2);S5(n+3);};S1(n);S1(n+1);可以在第一周期发布,S1(n+2);S1(n+3);可以在第二周期发布。S1(n);S1(n+1);将在第三周期的开始完成(过去了两个周期),从而可以发布S2(n);S2(n+1);。如此地进行,可以在每个后续周期发布下两个运算,从而可以在相同的10个周期中执行整个体。程序D)在不到程序A)的四分之一的时间中运行。大多数并行处理器具有条件转移指令,在指令本身与转移实际发生的点之间需要数个延迟周期。在这个延迟周期中,可以执行其它指令。只要足够早地知道转移条件,并且编译器或其它编程工具在延迟期间支持指令的执行,转移只不过占用一个指令发布机会。当在循环的开始知道转移条件(i=255)时,这种技术甚至可以应用到程序A)。过多的展开将产生相反的结果。首先,一旦使用了所有发布机会(如在程序D)中),额外的展开不会进一步加速。其次,每个展开周期轮回一般需要额外的寄存器,以保存该特定轮回的状态。如果需要的寄存器的总数超过了可用数量,那么必须将一些寄存器溢出到高速缓存器,然后在下一个循环轮回恢复。需要发布以支持溢出和重新装载的指令延长了程序时间,最终在循环展开时并不会使速度加快。最后的结论是——存在着一个循环最佳展开次数。展开包含异常处理的循环现在考虑程序A’)fori=0:1:255,{S(i);ifC(i)thenT(I(i))};其中C(i)是某种仅依赖于S(i)的稀少真实(例如,64分之一)的异常条件,T(I(i))是某种冗长异常处理,例如,1024次运算。I(i)是通过异常处理所需的S(i)计算的信息。为了举例说明,让我们假设T(I(i))平均在程序A)中给每个循环轮回增加16次运算,这是一个超过循环主体中4次运算的量。这个稀少但是冗长的异常处理是一种共同的编程问题。如何能够处理这一问题而不失去展开的好处?受保护指令一种措施是通过使用受保护指令,这是一种可以在许多处理器上使用的设备。受保护指令将一个Boolean值规定为一个附加操作数,其意义是指令总是占据预期的功能单元,但是如果保护失败,那么禁止结果的保留。在执行if-then-else中,将保护用作if条件。then子句的指令受if条件的保护,而else子句的指令受if条件的否定的保护。在任何一种情况下,两个子句都要执行。then子句的结果仅更新保护为真的实例,else子句的结果仅更新保护为假的实例。所有实例都执行两个子句的指令,容忍这个惩罚,这个惩罚不是控制流中条件改变所需的流水线延迟损失。如同在程序A)中,如果保护是压倒性的真实的,并且else子句很大,那么受保护措施受到大的惩罚。在这种情况下,所有实例都要受到大的else子句惩罚,尽管只有很少的实例受到它的影响。如果要使运算S受到条件C的保护,那么可以如下编程guard(C,S);第一展开可以将程序A)展开到程序D’)forn=0:4:255,{S1(n);S1(n+1);S1(n+2);S1(n+3);  S2(n);S2(n+1);S2(n+2);S2(n+3);  S3(n);S3(n+1);S3(n+2);S3(n+3);  S4(n);S4(n+1);S4(n+2);S4(n+3);  S5(n);S5(n+1);S5(n+2);S5(n+3);  ifC(n)thenT(I(n));  ifC(n+1)thenT(I(n+1));<!--SIPO<DPn="35">--><dpn="d35"/>  ifC(n+2)thenT(I(n+2));  ifC(n+3)thenT(I(n+3)); };给予上述示例参数,在77%的循环轮回中将不执行T(I(n)),在21%的循环轮回中执行一次T(I(n)),仅在2%的循环轮回中执行一次以上的T(I(n))。显然,插入T(I(n)),T(I(n+1)),T(I(n+2))和T(I(n+3))的运算仅得到很少的好处。堆处理一种新的可供选择的方法是堆处理。堆是一般存储在RAM中的相继存储对象。堆的意图是要相继地写入,并且随后从开始相继地读出。对于堆对象定义了多种方法。为了在并行处理环境下实践堆及其方法,需要它们的实现是几个顺列(不转移到子例程的)代码的指令。也需要这种顺列代码不包含转移指令。以下说明这种方法的实现。这种实现有可能使得堆是新颖和有价值的。1)通过Create_Pile(P)方法建立堆。这分配存储区和初始化内态变量。2)对堆写入的初始方法是Conditional_Append(pile,condition,record)。这种方法在并且仅在条件为真时,将record(记录)添加到堆pile。3)当堆已经完全写入时,通过Rewind_Pile(P)方法准备读出。这调节内部变量,从而使读出从首先写入的记录开始。4)方法EOF(P)产生一个指示是否已经读出了堆的所有记录的布尔值。5)方法Pile_Read(P,record)从堆P读出下一顺序的record。6)方法Destroy_Pile(P)通过解除所有其状态变量的分配,废弃堆P。利用堆分裂条件处理现在可以凭借堆P将程序D’)变换成程序E’)。Create_Pile(P);  forn=0:4:255,{S1(n);S1(n+1);S1(n+2);S1(n+3);  S2(n);S2(n+1);S2(n+2);S2(n+3);<!--SIPO<DPn="36">--><dpn="d36"/>  S3(n);S3(n+1);S3(n+2);S3(n+3);  S4(n);S4(n+1);S4(n+2);S4(n+3);  S5(n);S5(n+1);S5(n+2);S5(n+3);  Conditional_Append(P,C(n),I(n));  Conditional_Append(P,C(n+1),I(n+1));  Conditional_Append(P,C(n+2),I(n+2));  Conditional_Append(P,C(n+3),I(n+3));  };  Rewind(P);  whilenotEOF(P){  Pile_Read(P,I);  T(I);  };  Destroy_Pile(P);程序E’)通过将异常计算T所需的信息I存储在堆P上操作。只是写入了对应于异常条件C(n)的I记录,从而P中的I记录的数量(例如,16)大大少于原始程序A)中的循环轮回的数量(例如,256)。然后,一个分离的while循环读一遍堆P,执行所有异常计算T。由于P仅包含C(n)为真的情况的记录I,所以,仅有这些情况被处理。第二循环比第一循环稍微棘手一些,因为第二循环while的轮回数量,在本例中平均为16,是不确定的。因此,需要while循环而不是for循环,当EOF方法指示已经从堆读出了所有记录时,while循环终止。如前面断言和下面要说明的,可以顺列和没有转移地实现Conditional_Append方法调用。这意味着第一循环仍然以一种有效的方式展开,几乎没有徒然的发布机会。展开第二循环在程序E’)中不展开第二循环,并且仍然是效率低下的。但是,可以凭借四个堆P1,P2,P3,P4将程序E’)变换成程序F’)。结果是F’)展开两个循环,并带来了效率的提高。Create_Pile(P1);Create_Pile(P2);Create_Pile(P3);Create_Pile(P4);  forn=0:4:255,{S1(n);S1(n+1);S1(n+2);S1(n+3);  S2(n);S2(n+1);S2(n+2);S2(n+3);  S3(n);S3(n+1);S3(n+2);S3(n+3);  S4(n);S4(n+1);S4(n+2);S4(n+3);  S5(n);S5(n+1);S5(n+2);S5(n+3);  Conditional_Append(P1,C(n),I(n));  Conditional_Append(P2,C(n+1),I(n+1));  Conditional_Append(P3,C(n+2),I(n+2));  Conditional_Append(P4,C(n+3),I(n+3));  };  Rewind(P1);Rewind(P2);Rewind(P3);Rewind(P4);  whilenotallEOP(Pi){  Pile_Read(P1,I1);Pile_Read(P2,I2);  Pile_Read(P3,I3);Pile_Read(P4,I4);  guard(notEOF(P1),S);T(I1);  guard(notEOF(P2),S);T(I2);  guard(notEOF(P3),S);T(I3);  guard(notEOF(P4),S);T(I4);  };  Destroy_Pile(P1);Destroy_Pile(P2);Destroy_Pile(P3);Destroy_Pile(P4);程序F’)是带有展开的第二循环的程序E’)。展开是通过将程序E’)的单独堆分割成四个堆完成的,四个堆中的每一个都可以彼此独立地处理。程序F’)中的第二循环的每个轮回处理来自这四个堆中的每一个的一个记录。由于每个记录是独立地处理的,所以可以给每个T的运算插入3个其它T的运算。必须改进while循环的控制,以循环到所有堆被处理。并且,由于一般不会在同一循环轮回中完成所有堆,所以必须保护while循环中的T。每当两个堆中的记录数量彼此大不相同时效率有所降低,但是堆包含类似数量的记录的可能性大(巨量定律)。当然,可以递归地使用这种堆技术。如果T本身包含一个冗长的条件子句T’,那么可以用一些附加堆将T’分离出第二循环,并且展开第三循环。许多实际应用具有数个这种嵌套异常子句。实现堆处理堆对象及其方法的实现必须保持简单,以便满足上述实现标准。a)除了Create_Pile和Destroy_Pile之外,方法实现必须是很少的直接插入代码的指令。b)实现应当不包含转移指令。其要点是,一个堆是由一个在RAM中分配的线性阵列和指针,index,组成的,index的当前值是要读出或写入的下一个记录的位置。阵列的写入大小,sz,是一个其值是堆的写入过程中index的最大值的指针。EOF方法可以作为直接插入条件(sz≤index(指数))实现。指针基数(base)是一个指向在堆中写入的第一位置的值。它是通过Create_Pile方法设定的。Conditional_Append方法将record复制到在index值开始的堆阵列。然后,将index递增一个是0或记录的大小(sz_record)的计算量。由于参数condition具有一个表示真(true)的值1,或一个表示假(false)的值0,所以可以如下计算index而无需转移index=index+condition*sz_record;当然,这种计算有许多变化,它们中的许多不包括乘以变量的给定特定值。也可以利用保护如下计算它guard(condition,index=index+sz_record);应当注意,将记录复制到堆,而无需考虑condition。如果condition是false,那么用下一个记录覆盖这个记录;如果condition是true,那么紧接着当前记录写入下一个记录。这个下一个记录可以是或可以不是被其后的记录覆盖的记录本身。结果,一般最好尽可能少地写入堆,即使这意味着要在读出和处理记录时重新计算一些(冗余的)数据。Rewind方法是通过sz_index;index=base;实现的。这个操作记录为了EOF方法写入的数据量,然后,将index重置到开始。Pile_Read方法将(长度sz_record的)堆的下一部分复制到I并且递增index。index=index+sz_record;Destroy_Pile方法解除分配给Pile的存储位置。所有这些方法(除了Create_Pile和Destroy_Pile之外)可以用很少几个直接插入指令实现,并且无需转移。因此,堆处理允许在存在转移的情况下,循环的展开,并结果提高了性能。这种技术特别允许冗长异常子句的并行执行。其代价是需要向/从RAM写入和重新读出最为适度量的数据。权利要求1.一种压缩数据的方法,包括接收插值公式;在需要的数据值难于得到的情况下,通过插值公式确定是否需要至少一个数据值;和执行外推运算以产生需要的难于得到的数据值;其中利用插值公式压缩数据。2.根据权利要求1所述的方法,其中插值公式是小波滤波器的分量。3.根据权利要求1所述的方法,进一步包括将多个数据值划分成多个变化范围。4.根据权利要求3所述的方法,进一步包括通过仅使用一个变化范围内的数据值减少涉及插值公式的计算量。5.根据权利要求2所述的方法,进一步包括有选择地用多相滤波器替代小波滤波器。6.根据权利要求1所述的方法,进一步包括量化数据值。7.根据权利要求6所述的方法,进一步包括通过减少数据值的量,减少与熵编码相关的计算量。8.根据权利要求7所述的方法,其中在涉及数据值的量化运算的过程中减少数据值的量。9.根据权利要求7所述的方法,其中利用堆减少数据值的量。10.根据权利要求1所述的方法,进一步包括减少有关将多个数据值重构到一个预定数据范围的计算的量。11.根据权利要求10所述的方法,其中通过仅执行一个单独裁减操作来减少计算。12.根据权利要求2所述的方法,其中小波滤波器包括一个插值公式,包括13.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括Y2N+1=(X2N+1+1/2)-(X2N+1/2)。14.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括15.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括16.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括17.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括18.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括19.根据权利要求2所述的方法,其中小波滤波器包括插值公式,包括(X2N+1+1/2)=Y2N+1+(X2N+1/2)。20.一种压缩数据的计算程序产品,包括用于接收插值公式的计算机代码;在所需数据值难于得到的情况下,用于确定插值公式是否需要至少一个数据值的计算机代码;和用于执行外推运算以产生需要的难于得到的数据值的计算机代码;其中将插值公式用于压缩数据。21.一种压缩数据的系统,包括逻辑电路,用于分析小波方案以确定小波滤波器逼近的偏导数;根据小波滤波器的特性和可用抽样的数量选择多项式阶数;利用选择的多项式阶数导出每个小波滤波器的外推公式;和通过每种情况中的可用抽样,利用外推公式,导出特定边缘小波情况。22.一种压缩数据的方法,包括在一个单独装置中接收数据;利用该单独装置编码数据以产生第一格式的第一压缩数据;和利用该单独装置对第一压缩数据进行转换代码,以产生第二格式的第二压缩数据。23.根据权利要求22所述的方法,其中编码是实时发生的。24.根据权利要求22所述的方法,其中代码转换是离线发生的。25.根据权利要求22所述的方法,其中对第一压缩数据进行转换代码,以产生第二格式的第二压缩数据,从而使第二压缩数据适合于匹配耦合到单独装置的通信网的能力。26.根据权利要求22所述的方法,其中编码是利用第一编码器进行的。27.根据权利要求26所述的方法,其中代码转换是利用解码器和第二编码器进行的。28.根据权利要求22所述的方法,其中第一格式包括基于小波的格式。29.根据权利要求22所述的方法,其中第二格式包括基于DCT的格式。30.根据权利要求29所述的方法,其中第二格式包括一种MPEG格式。31.一种压缩数据的单独装置,包括配备在单独装置上的编码器,用于对数据编码以产生第一格式的第一压缩数据;和与编码器配备在同一单独装置上的代码转换器,用于代码转换第一压缩数据以产生第二格式的第二压缩数据。32.根据权利要求31所述的单独装置,其中编码是实时发生的。33.根据权利要求31所述的单独装置,其中代码转换是离线发生的。34.根据权利要求31所述的单独装置,其中对第一压缩数据进行代码转换以产生第二格式的第二压缩数据,从而使第二压缩数据适合于匹配耦合到单独装置的通信网的能力。35.根据权利要求31所述的单独装置,其中编码是利用第一编码器进行的。36.根据权利要求35所述的单独装置,其中代码转换是利用解码器和第二编码器进行的。37.根据权利要求31所述的单独装置,其中第一格式包括基于小波的格式。38.根据权利要求31所述的单独装置,其中第二格式包括基于DCT的格式。39.根据权利要求38所述的单独装置,其中第二格式包括MPEG格式。40.一种利用单独集成电路上的多个编码器压缩数据的方法,包括在一个单独集成电路中接收数据;利用结合在单独集成电路上的多个编码器编码数据;41.根据权利要求40所述的方法,其中数据是利用单独集成电路上的多个信道编码的。42.根据权利要求40所述的方法,其中将数据编码成基于小波的格式。43.一种压缩数据的单独集成电路,包括配备在单独集成电路上的第一编码器,用于编码第一数据集;和与第一编码器配备在同一单独集成电路上的第二编码器,用于编码第二数据集。44.根据权利要求43所述的单独集成电路,其中数据是利用单独集成电路上的多个信道编码的。45.根据权利要求43所述的单独集成电路,其中将数据编码成基于小波的格式。46.一种利用一个单独模块压缩数据的方法,包括利用单独模块接收光子;和利用单独模块输出代表光子的压缩数据。47.根据权利要求46所述的单独模块,其中将压缩数据编码成基于小波的格式。48.根据权利要求47所述的单独模块,其中与编码相关的变换运算是以模拟方式进行的。49.根据权利要求46所述的单独模块,其中单独模块包括一个成像器。全文摘要一种用于压缩数据的系统、方法、和计算机产品。首先,接收一个插值公式。利用这个插值公式压缩数据。在使用中,当所需数据值难于得到的情况下,确定插值公式是否需要至少一个数据值。如果是这种情况,执行外推公式,以产生所需的难于得到的数据值。文档编号H04N7/26GK1663257SQ0381409公开日2005年8月31日申请日期2003年4月17日优先权日2002年4月19日发明者克拉西米尔·科拉罗夫,威廉·C·林奇,史蒂文·E·桑德斯,托马斯·A·达尔博内申请人:德国普莱特科技公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1