DVB-S系统设计报告

DVB 标准

Digital Video Broadcasting（数字视频广播）是一个完整的数字电视解决方案，其中包括 DVB-C（数字电视有线传输标准），
DVB-T（数字电视地面传输标准），DVB-S（数字电视卫星传输标准），下面主要介绍 DVB-S 系统。

DVB-S 为数字卫星广播标准，卫星传输具有覆盖面广、节目容量大等优点。信号采用RS(188，204)RS(188，204)RS(188，204)和卷积码的级联编码，调制方式为 QPSK。

DVB-S 信道编码及调制的基本原理

原理框图

根据 ETSI 的 DVB-S 标准，原理框图如下所示

由于卫星提供的 DTH 服务特别受功率限制的影响，因此主要的设计目的应该为抗噪声和干扰，而不是频谱效率。为了在不过度损害频谱效率的前提下实现很高的能量效率，系统应使用 QPSK 调制和卷积码和 RS 码的级联。

接口

信道编码

TS 流适配单元（adaptation）

输入的 TS 流根据 MPEG-2 格式按照固定的长度打包，数据包的长度为 188，帧头为同步字 47hex47_{hex}47hex​。DVB-S 标准中要求每 8 个 TS 数据包组成一个超帧，将超帧中的 8 个同步头进行反转，变为b8hexb8_{hex}b8hex​，其余的同步头不变。同时还要自动插入空包，在数据包后插入 16 个 0，将长度为 188 的数据包包补充成长度为 204 的数据包，与后续的信道编码模块建立时钟匹配和接口连接。

扰码单元（energy dispersal）

基带信号中含有很多连 “1” 或者连 “0” 的现象，会导致基带信号的频谱中含有较多的低频成分，既不利于信号在信道的传输，也不利于在接收端提取时钟信号。因此采用扰码，将 TS 流转化成伪随机序列。DVB-S 标准中的随机化的原理图如下：

伪随机二进制序列的生成多项式如下：

Copy1 + x14 + x151 + x^{14} + x^{15}1 + x14 + x15

扰码以 8 个数据包组成的超帧为单位进行处理，在每一个单元开始处理时，将序列”100101010000000“”100101010000000“”100101010000000“装入寄存器，对其进行扰码处理。数据包的同步字不进行扰码处理。

RS 编码

外码采用 RS 编码，其具有同时纠正随机错误和突发错误的能力，并且纠正突发错误更有效。DVB-S 采用的编码格式为 RS (239,255) 截断而得到的 RS (188,204) 编码，最大可纠错长度为 8 个字节，编码从同步字47hex47_{hex}47hex​或b8hexb8_{hex}b8hex​开始。

编码原理简述

假设信息多项式为

Copym(x)=m187x187+m186x186+⋯+m1x1+m0m(x)=m_{187}x^{187}+m_{186}x^{186}+\cdots+m_1x^1+m_0m(x)=m187​x187+m186​x186+⋯+m1​x1+m0​

码生成多项式为

Copyg(x)=(x+a0)(x+a1)(x+a2)⋯(x+a14)(x+a15)g(x)=(x+a^0)(x+a^1)(x+a^2)\cdots(x+a^{14})(x+a^{15})g(x)=(x+a0)(x+a1)(x+a2)⋯(x+a14)(x+a15)

其中的_a_ = 02_hex_，则生成多项式的展开式为

Copyg(x)=x16+59x15+13x14+104x13+189x12+68x11+209x10+30x9+8x8+163x7+65x6+41x5+229x4+98x3+50x2+36x+59g(x)=x^{16}+59x^{15}+13x^{14}+104x^{13}+189x^{12}+68x^{11}+209x^{10}\\\\+30x^{9}+8x^8+163x^7+65x^6+41x^5+229x^4+98x^3+50x^2+36x+59g(x)=x16+59x15+13x14+104x13+189x12+68x11+209x10+30x9+8x8+163x7+65x6+41x5+229x4+98x3+50x2+36x+59

将x16⋅m(x)x^{16}\cdot m(x)x16⋅m(x)除以g(x)g(x)g(x)后，余式为关于 x 的 15 次多项式，其 16 个系数即为生成的 16 个校验字节，将其添加到 188 长度的数据包后即可完成 RS (188,204) 的编码。

卷积交织

在数字信号传输过程中，由于一些突发性干扰，会导致一连串的数据错误，很有可能超出 RS 码的纠错范围。而卷积交织可以将错误的字符分散开，使得信道变成近似无记忆信道。DVB-S 中采用的是交织深度为 12 的卷积交织。交织和解交织的框图如下：

卷积编码

内码采用的是 (2,1,7) 型的卷积码，编码效率为kn=12\frac{k}{n}=\frac{1}{2}nk​=21​，由 6 个移位寄存器和 2 个模二加加法器构成，1 个 bit 信号生成 2 个 bit 的编码信号，约束长度为 7。

当信道质量较好时可以对编码信号进行删余，提高信道利用率。

Matlab 仿真

TS 流适配及扰码模块

CLKdivide

一路高清电视信号的码率为 $8Mbps$，因此二进制信号的速率为8Mbps8Mbps8Mbps，输入的数据为uint8uint8uint8类型，所以输入的信号速率为1M1M1M。所以 CLKdivide 模块将200MHz200MHz200MHz的时钟分频到1MHz1MHz1MHz和8MHz8MHz8MHz。

sigSource

此模块产生输入的 TS 流信号，并且生成 RS 编码的开始、结束和使能信号。由于每输出一个 188 字节长度的数据包后要暂停输出 TS 流插入空包，所以采用使能系统，每计数 188 次后拉低使能插入空包。

HeaderProcess

此模块对输入的 TS 流进行速率转换和组超帧，每八个数据包组合为一个超帧，并反转第一个同步字，由 $0x47$ 转为 $0xb8$，并生成使能 sigSource 的信号。同时生成扰码模块的控制信号。

第一个 Multiport Switch 用来进行插入空包，第二个 Multiport Switch 用来反转超帧的第一个同步字。

myScrambler

根据扰码的生成多项式进行设计。HeaderProcess 生成的扰码使能信号正好在输入同步字时拉低，不进行扰码处理，扰码复位信号在输入了一个超帧后重新装入初始序列”100101010000000“”100101010000000“”100101010000000“。

仿真数据

RS 编码模块

使用 HDL Coder 中的模块，由于时钟速率为200MHz200 MHz200MHz，因此需要加入一个触发模块，保证 RS 编码是按照码元速率 $R_B$ 进行编码

卷积交织

同样加入触发模块，保证交织的速度为码元速率RBR_BRB​。

uint8 转 binary 模块

首先对输入的数据按位相与，取出每一位的数据后使用 Multiport Switch 逐位输出，计数器的使能速率为码元速率 $R_B$ 的 8 倍。

卷积编码

不进行删余的话，编码效率为12\frac{1}{2}21​。也可以进行删余，可以得到23、34、56、78\frac{2}{3}、\frac{3}{4}、\frac{5}{6}、\frac{7}{8}32​、43​、65​、87​的编码效率。在一定带宽内，编码效率越大传输效率越大，同时纠错能力越差。

Vivado 实现

Vivado 的代码大部分都由 HDL Coder 生成，或者由 Matlab 生成系数文件，再导入到 Vivado 的 IP 核中。

DataSource_Scrambler

直接生成 hdl 代码的话，DataSource_Scrambler 模块中的 sigSource 模块在200MHz200 MHz200MHz的频率下建立时间的裕量不满足时序，因此在生成 HDL 之前进行如下配置：

在输出端加入一级流水线后，综合布线后时序即可通过。同时在这个模块的输出信号处全部加上一个 delay 模块组成流水线。

扰码模块

可以看到每输入 8 个数据包后，扰码内部的 D 触发器的初值得到重置，同时反转后的同步字0xb80xb80xb8没有被扰码处理。

数据对齐

在仿真过程中，发现同步字 $0xb8$ 和 RS 编码的使能信号没有对齐，因此添加如下模块：

在将输出的使能信号延后一个数据周期，即可保证信号的同步。

RS 编码

将 modelsim 的数据导入到 matlab 进行解码，可以看到将 188 个数据包完整的解了出来。

升余弦滚降滤波器

Matlab 滤波器设计

根据 DVB-S 标准的要求，升余弦滚降系数为0.350.350.35，使用 Matlab 的 filterDesigner 工具设计滤波器系数。

在 FPGA 中要对滤波器系数进行定点化处理。

对系数进行 32 位量化后幅值响应如下：

对系数进行 16 位量化后幅值响应如下：

可以看出 16 位量化的幅值响应和 32 位量化的响应几乎一样，为了节省空间，因此使用 16 位量化。

量化结束后点击目标→Xilinx 系数文件 生成 coe 文件。

Vivado Fir 滤波器设计

选择 Source 为 COE FIle

输入的采样频率要和时钟频率相等，不进行过采样。

在 Implementation 中将系数类型选择为有符号数，位宽设置为 16。

输入的信号为正负 1，所以输入的位宽为 2，第一位为符号位。输出模式设置为全精度。

波形

使用 XDMA 进行数据的输入和输出采集

结构框图如上。

工程的总体结构如上所示，数据通过 XDMA 的 M_AXIS_H2C 接口写入数据。由于写入数据的位宽为 128bit，工程中信号处理部分的输入位宽为 8bit，因此加入 AXISDataWidthConverter 模块将位宽从 16BYTE 转为 1BYTE，并写入 FIFO，使用 AXIGPIO 模块读取 FIFO 的 almost full 信号，如果 FIFO 被写满，almost full 被拉高，就停止写入数据。读取 DVB-S 生成的 QPSK 信号时，由于经过了升余弦滚降滤波和调制，信号的位宽已经较大，为了降低复杂度选择将调制信号高位补零至 128bit 后经 M_AXIS_C2H 接口输出到 Host 主机。