|
数字图像处理的DCT(离散余弦变换)及其FPGA实现研究
首先是预祝您 新年快乐!
这是我的毕业设计课题
我有DCT的 verilog 代码,调试通过。(代码来源www.opencore.org)
此源代码可以提供给大家
联系方法:zhouxinjun1@163.com
希望和大家一起交流 讨论 用 FPGA 来实现DCT 的 方案
数字图像处理DCT是数字图像处理中的一种重要处理手段,被广泛地用与图像的压缩编码算法中,已有的各种成熟的压缩标准如JPEG,MPEG,H.26X以及HDTV等都无一例外地采用基于DCT/IDCT的压缩编码。离散余弦变换(Discrete Cosine Transform)是一种最主要的正交变换。它将图像信号从空间域变换到DCT域,保持原始信号的熵和能量不变,却使得DCT域系数之间的相关性减弱,然后再对DCT域系数进行量化和编码,以达到压缩的目的。
问题1:
此代码描述的总体结构是什么?
DCT 的 有许多不同的实现结构,有 采用 多乘法器的并行结构
有 高平行和/或流水线结构的通用的dsp结构
最常用的是 分布结构(DA: distributed arithmetic ) 的 查表式(LUT: look up table) 架构。
我认为 是使用 MAU(乘累加器) 同时由于DCT基图象系数固定,使用了查表式(LUT: look up table) 架构,总体来说是多乘法器的并行结构。
问题2:
此代码使用什么操作模式?
JPEG定义了4种操作模式:基于DCT的顺序模式,累进模式,无失真模式,层次模式。
我认为 是使用 顺序模式,8乘8样本块从左道右,从上到下(每次1个块)地顺序输入到DCT处理单元。
问题3:
此代码描述的时序步骤问题:
我试图用ModelSim SE 6.0c进行仿真(暂未能做到,正在努力中),想通过单步执行来了解DCT模块中数据流的情况,从第一个时钟周期到第几个时钟周期完成一次8乘8样本的DCT变换,同时弄清楚在整个变换过程每个时钟周期发生了什么具体事件。
测试文档(在Bench文件夹中),我想从测试向量也可以看出操作模式吧。
问题4
关于cosine table生成问题
由于DCT基图象系数固定,使用了查表架构
“function [31:0] dct_cos_table”
Function: cos( (2x +1) * u * pi)/16) * cos( (2y +1) * v * pi)/16)
当U,V确定后,和上式中的COS项也就确定了,就是说,f(x,y)和那个系数相乘,由U,V两个数共同确定,现在我需要建立一个这样的映射表来反映这个关系,用手工方式来计算出个表是不可能的,cosine table有四千多行呀,我想用C语言来编程生成个表,或者用MATLAB编程来生成个cosine table表。
(虽然原来程序有这个表了,但我需要自己做出来)
我想是用 2个FOR嵌套(双重循环)来实现,想是容易,做起来,对我说是难呀。
总之还有许多问题都没有解决,以后会提出,我正在努力,希望你能给我帮助。
感谢您抽出时间来阅读此文! |
|
|