基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

基于FPGA的数字视频信号处理器设计 附代码

该帖子部分内容已隐藏
付费阅读
3积分
此内容为付费阅读,请付费后查看

导读

图像是用各种观测系统以不同形式和手段观测客观世界而获得的,可以直接或间接作用于人眼进而产生视知觉的实体。

随着电子技术和计算机技术的飞速发展,数字图像技术近年来得到极大的重视和长足的发展,并在科学研究、工业生产、医疗卫生、通信等方面得到广泛的应用。

视频信号由一系列连续的图像组成。对视频信号的处理已经成为数字图像处理领域中重要的一部分。例如机器人模式识别的过程就是一个视频信号处理的过程,电视制导导弹识别目标就是充分利用视频信号处理技术不断判断目标是否和预先设定目标图像一致。本篇将讲解如何用 FPGA 技术实现基本的视频信号处理。本篇的例子可以作为各位大侠进行视频信号处理时的一个参考,也可以在这个基础上根据需要进行扩展。

第一篇内容摘要:本篇会介绍视频信号概述,包括视频信号处理的基本过程、数字图像处理技术概念、数字视频信号的格式;视频信号处理的框架,包括视频信号转换模块、视频数据计算模块以及通信模块等相关内容。

一、视频信号概述

在讲解数字视频信号处理器以前,需要了解视频信号的组成。摄像头输出的视频信号满足电视信号的制式,一般摄像头、摄像机都提供 PAL 制的视频信号。

目前,世界上实际应用的电视信号制式主要有 NTSC 制、PAL 制和 SECAM 制 3 种。世界上大多数国家采用 PAL 制,我国也采用 PAL 制。美国、日本等国家采用 NTSC 制。俄罗斯、法国、埃及等少数国家采用 SECAM 制。

PAL 电视制式规定,场扫描频率为 50Hz,每帧图像的扫描行数为 625 行。PAL 制电视信号如图 1 所示。

图片[1]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 1 PAL 制电视信号

电视信号由“图像信号”和确保扫描同步的“复合同步信号”以及消除扫描逆程回扫线的“复合消隐信号”等辅助信号构成。有关电视信号的原理请自行查阅相关资料,这里不详细解释。

1.1 视频信号处理的基本过程

视频信号的处理过程就是拍摄视频信号的逆过程。摄像头输出的是标准 PAL 制电视信号。摄像头通过光电转换实现图像到视频信号的转换,也就是扫描的过程。摄像头每扫描完一行图像,加入一个行同步脉冲,每扫描完一场图像加入一个场同步信号。同时为了保证扫描逆程光栅不显示,应加入和同步信号同周期的消隐信号。

对视频信号进行处理,需要先进行 A/D 转换、行/场同步信号的分离等步骤,然后采用专用的视频信号处理器对视频信号进行转换,最后用FPGA 处理数字图像信号并得到需要的结果。视频信号处理流程如图 2 所示。

图片[2]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 2 视频信号处理基本流程

1.2 数字图像处理技术概念

如图 2 所示的流程中,视频信号的放大、模数转换和格式转换由专用的视频处理芯片完成,FPGA 需要完成对视频信号转化后的数字图像进行处理和运算。在进行具体的开发前先介绍一下相关的概念。
 
1)像素
一幅平面图像可以看成是由许许多多的小单元组成,在图像处理系统中,这些组成画面的细小单元称为像素。像素越小,单位面积上的像素数目就越多,由其构成的图像就越清晰。
一幅黑白或者灰度平面图像,表征它的特征参量是亮度。这就是说,组成画面的每个像素,不但有各自确定的几何位置,而且它们各自还呈现着不同的亮度。又由于电视系统传送的是活动图像,因而每个在确定位置上的像素其亮度又随时间不断地变化着,也就是说像素的亮度又是时间的函数。像素亮度既是空间(二维)的函数,同时又是时间的函数。
 
2)一帧图像
电视系统中把构成一幅图像的各像素传送一遍称为进行了一个帧处理,或称为传送了一帧,每帧图像由许多像素组成。因此组成一幅完整图像也叫做一帧图像。
 
3)一场图像
PAL 制电视图像是隔行扫描的,即一帧图像分两次扫描,第一次扫描奇数行的图像,第二次扫描偶数行的图像。每次扫描获得的图像称为一场图像,分为奇数场和偶数场。
 
4)图像的串行传输
根据人的视觉惰性,可把组成一帧图像的各个像素的亮度按一定顺序一个一个地转换成相应的电信号并依次传送出去,接收端再按同样顺序将各个电信号在对应位置上转变成具有相应亮度的像素,这就是图像的串行传输。
这种串行传输具有两个特点:
• 要求传送速度快。只有传送迅速,传送时间小于视觉暂留时间,重现图像才会给人以连续无跳动的感觉。
• 传送要准确。每个像素一定要在轮到它传送时才被转换、传送,并被接收方接收。而且收、发双方每个像素被转换、还原的几何位置要一一对应。即收发双方应同步工作,同步在电视系统中是十分重要的。
 
5)扫描
将组成一帧图像的像素,按顺序转换成电信号的过程(或逆过程)称为扫描。扫描的过程和我们读书时视线从左到右、自上而下依次进行的过程类似。从左至右的扫描称为行扫描,自上而下的扫描称为帧或者场扫描。电视系统中,扫描多是由电子枪进行的,通常称其为电子扫描。通过电子扫描与光电转换,就可以把反映一幅图像亮度的空间与时间的函数转换为只随时间变化的单值函数(电信号),从而实现平面图像的顺序传送。
1.3 数字视频信号的格式
PAL 制电视信号转化为数字视频信号后的具体格式如图 3 所示,一般数据格式符合 ITU656 YUV 4:2:2 标准(在后面的将结合数字视频处理器对数字视频格式详细介绍)。

图片[3]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 3 一帧图像采集的时序关系
 
一帧图像含有 625 行数据,其中有效图像数据 572 行,其他为场消隐信号;每行图像数据包含 720 个像素。因此,PAL 制电视信号的分辨率为 720×572。PAL 制电视信号每秒扫描 25帧图像,每帧包括奇、偶两场图像。一帧图像分为奇数场和偶数场,每场各有 286 行有效图像。垂直参考电压信号 VREF 的高电平表示有效图像信号,偶数场和奇数场各 286 行。ODD 信号高电平表示为奇数场,低电平表示偶数场。行参考电压信号 HREF 信号表示一行有效的图像数据。一行图像数据又包括 720 个像素的数据,每行图像数据如图 4 所示。
 

图片[4]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 4 一行图像数据
 
 

二、视频信号处理的框架

如图 5 所示的是一般工程项目中视频信号处理的框架,由 3 个模块组成:
• 视频信号转换模块 
由视频信号处理器完成视频信号从模拟信号到数字信号的转换、图像信号与其他的分离、视频信号的格式转换等,最终提供后端可以处理的数字视频数据。
• 视频数据计算模块 
首先接收来自前一个模块的数字视频数据,然后完成对数字视频数据的计算。一般数据接收由 FPGA 完成,根据需要可以选择专用芯片,如 DSP(Digital SignalProcessor,数字信号处理器)完成计算,也可以选择 FPGA。
• 通信模块 
实现与外界的数据交换。
 

图片[5]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 5 视频信号处理框架
虽然视频信号处理的需求多种多样,但数据处理的流程都遵循数据采集、格式转换、数据接收、数据计算、数据通信的步骤。
 
 

2.1 视频信号转换模块

视频信号转换模块由视频信号处理器及其辅助电路组成。这个模块的设计要点是选择视频信号处理器。电视信号构成极为复杂,其中除了包含图像信号之外,还包含行同步信号、行消隐信号、场同步信号、场消隐信号以及槽脉冲信号、前均衡脉冲、后均衡脉冲等。因而,对电视信号进行 A/D 转换的电路也非常复杂,Philips 公司将这些非常复杂的电视 A/D 转换电路集成到了一块芯片内,生产出功能强大的视频输入处理芯片 SAA7113(后面简称 SAA7113)。
SAA7113 采用 CMOS 工艺,通过简洁的 I2C 总线与采样控制器连接可方便地构成图像采集系统。SAA7113 芯片中的场同步信号、行同步信号、像素时钟信号 LLC2 以及其他状态信号都可直接由管脚引出,省去了时钟同步电路的设计,而且可靠性更高。系统内部采用锁相环技术,不但有高的可靠性,并简化了设计复杂度。在 SAA7113 中有控制字可以直接控制行同步有效时间,省略了行延迟电路。因此,采用 SAA7113 可为电视信号的数字化应用提供极大的方便。
 
 
 

2.2 视频数据计算模块

在视频信号处理过程中为保证实时性,首先要求实时图像处理系统具有处理大数据量的能力;其次对系统的体积大小、功能、稳定性等也有严格的要求。实时图像处理算法中经常要用到对图像的求和、求差运算、二维梯度运算、图像分割、边缘探测等不同层次、不同种类的运算。有的运算结构比较简单,但是数据量大,计算速度要求高;有些运算对速度要求并不高,但计算方式和结构比较复杂,难以用纯硬件方式实现。因此,实时图像处理系统是要求运算速度高、运算种类多的综合性信息处理系统。
随着大规模可编程器件的发展,采用 DSP+ASIC(Application Specific IntegratedCircuit,特定用途集成电路)结构的信号处理系统显示出了其优越性,逐步得到重视。与通用集成电路相比,ASIC 芯片具有体积小、重量轻、功耗低、可靠性高等优点,而且在大批量应用时更可降低成本。现场可编程门阵列(FPGA)是在专用 ASIC 的基础上发展起来的,它克服了专用 ASIC 不够灵活的缺点。与其他中小规模集成电路相比,其优点主要在于它的灵活性很强,即其内部具体的逻辑功能可以根据需要配置,对电路的修改和维护很方便。
目前,FPGA的容量已经超过了百万门级,FPGA 已成为系统设计的重要选择方案之一。图像处理系统中,底层的图像预处理的数据量很大,要求处理速度快,但运算结构相对比较简单,适用于 FPGA 通过硬件实现,这样能同时兼顾速度及灵活性。高层运算的特点是所处理的数据量较底层少,但算法结构复杂,适宜采用运算速度高、寻址方式灵活、通信能力强的DSP 芯片来实现。
DSP+FPGA 结构最大的特点是结构灵活,有较强的通用性,适于模块化设计,从而能够提高运算、处理的效率;同时开发周期短,易于维护和扩展,适于实时图像处理;对不同算法有较强的适应能力。
上面的讨论为各位大侠提供视频数据计算的方案。由于本篇主要介绍 FPGA 技术,这里将结合FPGA 介绍如何进行视频数据计算。
 
 

2.3 通信模块

通信模块用于提供当前系统与外部进行数据交换的通道,可以有以太网、RS-232、RS-422、RS-485、现场总线、USB 等多种方式。


三、视频信号处理的电路

下面将详细介绍视频转换模块和视频数据计算模块的电路。

3.1 中央控制器 FPGA

FPGA 芯片作为中央控制器控制整个视频信号的处理,如图 6 所示。

图片[6]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 6 FPGA 实现的主要功能
 

FPGA 芯片实现的主要功能如下:

• 提供电源管理逻辑。

• 提供系统状态指示灯的管理,这些指示灯用来显示当前各个部分的状态。

• 提供视频数据处理的管理。当开始采样时,FPGA 在此后到来的第一个帧同步信号到来时启动采样,并将这帧数据存放在 SRAM 中,采样结束后开始处理过程,同时开始采集下一幅图像并保存到另一块 SRAM 中。

• 模拟 I2C 接口,完成对 SAA7113 参数的配置。

3.2 电视信号转换模块电路

电视信号转换模块的电路设计如图 7 所示。

图片[7]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 7 电视信号转换模块电路设计图 

其中 SAA7113 的时钟信号由一片 24.576MHz的晶体提供,产生内部所需的 27MHz 的 LLC(line-locked system clock output,行锁定系统时钟)信号及其二分频信号 LLC2(频率 13.5MHz)。其中 LLC2 信号用来同步整个图像采集系统,即一个 LLC2 周期采集一个像素的图像数据,如图 8 所示。

图片[8]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 8 一个 LLC2 周期采集一个像素数据
 

SAA7113 内部包括模拟电路和数字电路两部分。模拟电路部分具有对电视信号放大、抗混叠滤波(anti-alias filter)等功能,数字电路部分具有对模数转换以后图像数据各种参数的处理等功能。

1)输出数据的格式

摄像头输出的图像信号通过 RCA-JACK 插座连接到 SAA7113,经过 A/D 转换及其他相关处理后得到数字格式的图像数据。SAA7113 能提供以下输出格式的数据:

(1)标准的 ITU 656 YUV 4:2:2(8 位)格式的数据;

(2)增强的 ITU 656 标准格式的各种数据,如 active video、raw CVBS 等。

标准 ITU656 格式是 ITU(International Telecommunications Union,国际电信同盟)推荐的数字视频数据格式。按照 ITU 656 YUV 4:2:2 标准组成的数字电视信号如图 9 所示。

图片[9]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 9 SAA7113 输出数字视频信号数据格式

YUV(亦称 YCrCb)是欧洲电视系统采用的一种颜色编码方法(属于 PAL 制)。采用 YUV 主要目的在于优化彩色视频信号的传输,使其在传输中占用较少的带宽,并能兼容老式黑白电视。如果直接采用 RGB 视频信号传输,将要求 RGB 3 个独立的视频信号同时传输,占用带宽要多得多。YUV 中“Y”表示明亮度(Luminance 或 Luma),也就是灰阶值;而“U”和“V”表示色度(Chrominance 或 Chroma),其作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是由 RGB 输入信号来创建的,方法是将 RGB 信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面——色调与饱和度,分别用 Cr 和 Cb 来表示。其中,Cr 反映 RGB 输入信号中红色部分与 RGB 信号亮度值之间的差异,而 Cb 反映 RGB 输入信号蓝色部分与 RGB 信号亮度值之同的差异。

从 SAA7113 数字视频信号输出总线 VPO 输出的数据格式如图 9 所示。

“80 10”表示当前视频信号处于行消隐阶段。“FF 00 00 SAV”是时间参考代码,标志有效视频数据的开始。其中“SAV”(Start of Active Video)意思是有效视频数据的开始。“CB0Y0 CR0 Y1 CB2 Y2…CR718 Y719”是有效视频数据。“FF 00 00 EAV”是时间参考代码,标志有效视频数据的结束。其中“EAV”(End of Active Video)意思是有效视频数据的结束。“80 10”表示下一行视频数据的行消隐信号开始。

用下面公式可以把传输用的 ITU 656 YUV 格式的数据还原为需要的 RGB 格式:

图片[10]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

2)SAA7113 的配置

使用 FPGA 模拟的 I2C 接口可以对 SAA7113 提供的多个控制字进行读写,从而完全控制SAA7113 的运行。对 SAA7113 控制字的写过程如图 10 所示。

图片[11]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 10 对 SAA7113 控制字的写操作

I2C 协议中器件的地址是 7 位,加上读写位(写为“0”,读为“1”)构成一个完成的字节。SAA7113 的器件地址是 0100,101,加上读写位后:器件地址+写=0100 1010 即 4AH;器件地址+读=0100,1011 即 4BH。从地址是器件内部分配的地址。SAA7113 提供 00~1F、40~62 共43 个控制字。

SAA7113 读控制字的过程如图 11 所示。

图片[12]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 11 对 SAA7113 控制的读操作
 

I2C 协议中的读操作比写操作复杂:首先完成对器件地址和从地址的写操作;然后发送一个 4BH(器件地址+读),可以开始接收数据;数据传输结束时发送终止信号。

整个 SAA7113 配置的流程如图 12 所示。

图片[13]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 12 SAA7113 配置流程

应用 I2C 程序对 SAA7113 配置。具体可以参考之前的 I2C 相关文章,后续会更新模拟I2C配置程序,这里先超链接一篇,仅供参考。

3.3 图像缓存部分电路

FPGA 将采集到的图像数据保存到缓存中,为后端对图像的进一步处理提供数据。下面提供一种图像缓存的设计方案:采用两块 SRAM(型号为 CY7C1049)作为图像缓存,FPGA 把从SAA7113 接收的一帧图像的数据保存到 SRAM 中,同时后端部分的处理器如 DSP 等可以从另一块 SRAM 中读取数据进行处理,电路如图 13 所示。

图片[14]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 13 SRAM 的电路图

第一次采样时,FPGA 将从 SAA7113 接收到的一帧图像数据保存到 SRAM 中,此时 DSP 在等待;第一次采样结束后,DSP 与 FPGA 进行总线切换,分别连接到与上次不同的 SRAM 上,DSP开始读取数据,FPGA 开始采集数据。每当 DSP 和 FPGA 都完成各自的任务时,就进行总线切换,交换连接的 SRAM。

四、视频处理程序的具体实现

4.1 主体程序的实现

FPGA 整体控制程序的流程如图 14 所示。

图片[15]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 14 FPGA 整体控制程序流程图

整体控制过程中有关状态机的代码如下:

4.2 视频图像数据采集程序的实现

SAA7113 输出的视频图像数据通过 8 位总线 VPO 传输给 FPGA,FPGA 需要将数据保存到 SRAM中。由于 PAL 制电视信号是隔行扫描,分为奇数场和偶数场分别传输,数字化以后仍然格式不变,因此在将数据保存到 SRAM 以前,需要将奇数场和偶数场的数据还原成一幅完整的图像。

如果传输格式是 YUV,需要转化为便于 DSP 处理的 RGB 格式。FPGA 需要完成如下任务:

(1)将所有按行排列的 8 位数据还原成一幅完整图像;

(2)根据需要进行格式转换。

SAA7113 输出的数据格式如图 15 所示。

图片[16]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 15 SAA7113 输出视频数据格式
 

SAV 和 EAV 分别是“有效视频数据的开始”(Start of Active Video)和“有效视频数据的结束”(End of Active Video)。SAA7113 对 SAV 和 EAV 数据格式的定义如表 1 所示。

表 1 SAV 和 EAV 数据格式

图片[17]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

从表 1 中可以看到在完整的一帧图像数据中第一场场消隐阶段 SAV 为“101XXXXX”,第一场有效数据阶段 SAV 为“1000XXXX”。“X”表示该位的状态没有作用。其他场 SAV 和 EAV 状态类推。

进行视频数据处理的流程如图 16 所示。

图片[18]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 16 视频数据处理流程图

数字视频数据处理的主要代码如下:

4.3 SRAM 的读写控制

SRAM 在读写上有严格的时序要求,用WE、OE、CE 三个信号控制完成写数据,具体时序如图 17所示。

图片[19]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 17 SRAM 的写时序

具体过程是:首先输出并保持地OE 址信号,然后片选信号CE置低,同时把输出有效信号OE 置高,最后把写有效信号WE 置低,并开始写数据。控制 SRAM 写数据的程序如下:

系统中两块 SRAM 分别由 DSP 和 FPGA 控制。当 DSP 和 FPGA 完成对相应 SRAM 的操作后,需要进行总线切换。总线切换后,DSP 和 FPGA 开始对另一块 SRAM 进行相应操作。主要代码如下:


五、程序测试与运行

由于整个 FPGA 程序包括 3 部分:处于 TOP 的主体程序,控制其他各个部分程序的运行;视频图像数据采集程序,从 SAA7113 获得数字图像数据并保存到 SRAM 中;SRAM 读写程序实现对 SRAM 的数据读写。测试程序需要仿真数据的全部流程。

5.1 测试程序

测试程序代码如下:

5.2 测试结果

仿真程序产生的视频图像数据如图 18 所示。开始的“aa bb cc dd ee ff”是无效数据,“ff 00 20”表示场同步信号。

图片[20]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 18 仿真产生的视频图像数据
经过 FPGA 处理后获得有效图像数据并产生相应的地址信号,如图 19 所示。由于只进行灰度运算,只取亮度信息,因此获得数据为“04 08 0c”,同时产生地址信号“00 01 02”。

图片[21]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 19 FPGA 采集得到的有效图像数据并产生的地址信号

对 SRAM 的读写控制,如图 20 所示。

图片[22]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 20 产生的对 SRAM 的读写控制
两块 SRAM 之间的切换,如图 21 所示。

图片[23]-基于FPGA的数字视频信号处理器设计 附代码-FPGA CPLD资料源码分享社区-FPGA CPLD-ChipDebug

图 21 两块 SRAM 之间的切换
仿真结果表明整个视频信号处理程序完成了预先设定的设计目标。

七、总结

本篇首先介绍了视频信号的基本原理、组成等,然后讲解了进行视频信号处理的基本过程和框架。接下来结合实例讲解用 FPGA 及其他芯片组成视频处理的电路设计和 FPGA 的程序实现。最后用 Modelsim 仿真和测试了程序。本篇为各位大侠提供了一种视频信号处理的设计方案,仅供参考。

请登录后发表评论