zoukankan      html  css  js  c++  java
  • (整理)快速DCT变换

    最近做创新杯,为了达到对声音的频率进行实时捕获的要求,找了许多算法,最后使用快速DCT算法成功的实现了功能。

    下面将之前查的一些资料整理总结在下面:

    首先有篇论文(《基于WAV文件的独奏乐曲信号中的乐谱识别》)里面描述了DCT算法提取WAV文件里面音乐的频率是可行的。

    然后为了满足实时性的要求,我们需要将普通的DCT算法加速。这里有一篇文章(http://www.vckbase.com/index.php/wv/1229)是讲的如何用两种方法将DCT算法加速成为fastDCT算法,这里把我有用到了的那部分摘抄过来。

    一、引言

    DCT变换是数字图像处理中重要的变换,很多重要的图像算法、图像应用都是基于DCT变换的,如JPEG图像编码方式。对于大尺寸的二维数值矩阵,倘若采用普通的DCT变换来进行,其所花费的时间将是让人难以忍受甚至无法达到实用。而要克服这一难点,DCT变换的快速算法无非是非常吸引人的。

    就目前而言,DCT变换的快速算法无非有以下两种方式:

    1.由于FFT算法的普便采用,直接利用FFT来实现DCT变换的快速算法相比来说就相对容易。但是此种方法也有不足:计算过程会涉及到复数的运算。由于DCT变换前后的数据都是实数,计算过程中引入复数,而一对复数的加法相当于两对实数的加法,一对复数的乘法相当于四对实数的乘法和两对实数的加法,显然是增加了运算量,也给硬件存储提出了更高的要求。

    2.直接在实数域进行DCT快速变换。显然,这种方法相比于前一种而言,计算量和硬件要求都要优于前者。

    鉴于此,本文采用第二种方法来实现DCT变换的快速算法。

    二、理论推导

    限于篇幅,在此不能罗列,具体推导过程可参见《DCT快速新算法及滤波器结构研究与子波变换域图像降噪研究》华南理工大学博士论文。

    三、程序实现

    DCT快速变换

    考虑到DCT变换中的系数要重复计算,可使用查找表来提高运行的效率,只要开始DCT变换之前计算一次,DCT变换中就可以只查找而无需计算系数。

     

    然后具体的代码实现可以到这里下载:http://www.pudn.com/downloads566/sourcecode/windows/bitmap/detail2329870.html

    需要提醒一下的是,链接里面的文章有贴出部分代码,但是贴的并不全,建议将源代码下载下来,看懂了以后再用。

     

    以上就是关于快速DCT算法的整理了。

  • 相关阅读:
    查看数据库中指定用户下每个表占的实际空间大小
    数据库中查询列数据是否有重复
    oracle查看数据库的字符集
    【转】oracle数据库中varchar2陷阱
    cursor详解
    vs报算术运算溢出的错误
    count(1)比count(*)效率高
    基于NPOI的Execl导入导出例子
    day4-2数组及方法
    day4-1深入理解对象之创建对象
  • 原文地址:https://www.cnblogs.com/cquljw/p/3666763.html
Copyright © 2011-2022 走看看