DVB-S系统发射端Matlab仿真及FPGA实现

news2024/11/26 23:17:26

DVB标准

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

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

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

原理框图

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

1717241147381.png

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

接口

2024after4202406012140085.png

信道编码

TS流适配单元(adaptation)

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

扰码单元(energy dispersal)

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

2024after4202406012158761.png

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

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

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

RS编码

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

2024after4202406021124574.png

编码原理简述

假设信息多项式为

m ( x ) = m 187 x 187 + m 186 x 186 + ⋯ + m 1 x 1 + m 0 m(x)=m_{187}x^{187}+m_{186}x^{186}+\cdots+m_1x^1+m_0 m(x)=m187x187+m186x186++m1x1+m0

码生成多项式为

g ( x ) = ( x + a 0 ) ( x + a 1 ) ( x + a 2 ) ⋯ ( x + a 14 ) ( x + a 15 ) 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_,则生成多项式的展开式为

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

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

卷积交织

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

2024after4202406021621696.png

卷积编码

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

2024after4202406021629604.png

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

Matlab仿真

TS流适配及扰码模块

2024after4202406052140904.png

CLKdivide

一路高清电视信号的码率为 8 M b p s 8Mbps 8Mbps,因此二进制信号的速率为 8 M b p s 8Mbps 8Mbps,输入的数据为 u i n t 8 uint8 uint8类型,所以输入的信号速率为 1 M 1M 1M。所以CLKdivide模块将 200 M H z 200MHz 200MHz的时钟分频到 1 M H z 和 8 M H z 1MHz和8MHz 1MHz8MHz

sigSource

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

1717680505998.png

HeaderProcess

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

1717595838765.png

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

myScrambler

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

1717596010781.png

仿真数据

1717596346825.png

RS编码模块

1717660503082.png

使用HDL Coder中的模块,由于时钟速率为200 M H z MHz MHz,因此需要加入一个触发模块,保证RS编码是按照码元速率 R B R_B RB进行编码

卷积交织

1717678715013.png

同样加入触发模块,保证交织的速度为码元速率 R B R_B RB

uint8转binary模块

1717679814804.png

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

卷积编码

1717680106902.png

不进行删余的话,编码效率为 1 2 \frac{1}{2} 21。也可以进行删余,可以得到 2 3 、 3 4 、 5 6 、 7 8 \frac{2}{3}、\frac{3}{4}、\frac{5}{6}、\frac{7}{8} 32436587的编码效率。在一定带宽内,编码效率越大传输效率越大,同时纠错能力越差。

Vivado实现

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

1717682059758.png

DataSource_Scrambler

直接生成hdl代码的话,DataSource_Scrambler模块中的sigSource模块在200 M H z MHz MHz的频率下建立时间的裕量不满足时序,因此在生成HDL之前进行如下配置:

2024after4202406062201977.png

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

扰码模块

1717850077215.png

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

数据对齐

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

1717914876682.png

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

RS编码

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

1717915096882.png

升余弦滚降滤波器

Matlab滤波器设计

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

1717726664610.png

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

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

1717726986681.png

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

1717727667745.png

Vivado Fir滤波器设计

选择 Source为COE FIle

2024after4202406071040715.png

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

2024after4202406071042659.png

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

2024after4202406071044904.png

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

1717728524290.png

波形

1717728686099.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1805424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是突发性耳聋?

72小时内突然发生、原因不明的感音神经性听力损失,至少在相邻的两个频率听力下降≥20dBHL。 特点: 1发生在数分钟、数小时或3天以内的听力下降; 2原因不明; 3多发生于单侧,可伴有耳鸣、耳堵塞感及耳周麻木感&#…

C#操作MySQL从入门到精通(21)——删除数据

前言: 谈到数据库,大家最容易脱口而出的就是增删改查,本文就是来详细介绍如何删除数据。 本文测试使用的数据库如下: 1、删除部分数据 使用delete 关键字,并且搭配where条件使用,否则会导致表中数据全部被删除 string sql = string.Empty;if (radioButton_DeletePart…

vivado HW_ILA

HW_ILA 描述 集成逻辑分析器(ILA)调试核心允许您执行系统内监控 通过对内核上的调试探针,在实现的设计中对信号进行处理。您可以配置 ILA核心实时触发特定硬件事件,并在 以系统速度探测。 ILA调试核心可以通过从IP目录实例化ILA核…

MyBatisPlus总结二

MybatisPlus总结一在这: MybatisPlus总结1/2-CSDN博客 六、分页查询: 6.1.介绍: MybatisPlus内置了分页插件,所以我们只需要配置一个分页拦截器就可以了,由于不同的数据库的分页的方式不一样,例如mysql和…

问题汇总:MPU6050(软件iic)

以下为个人问题汇总,排查点汇总可能大有缺陷,如有错误,欢迎指正。 排查点汇总 检查软件iic的时序操作用示波器或逻辑分析仪检查波形 无法使用逻辑分析仪进行I/O引脚波形分析 充当SDA、SCL的引脚要配置为推挽输出; 另外,逻辑分…

【全开源】安心护送非急救救护车转运平台小程序(FastAdmin+ThinkPHP+Uniap

🚑安心护送非急救救护车转运平台小程序——您的健康守护者💖 安心护送转运平台小程序是一款基于FastAdminThinkPHPUniapp开发的非急救救护车租用转运平台小程序系统,可以根据运营者的业务提供类似短途接送救护服务,重症病人转运服…

一文学会Spring 实现事务,事务的隔离级别以及事务的传播机制

目录 一.Spring (Spring Boot) 实现事务 1.通过代码的方式手动实现事务 (手动档的车) 2.通过注解的方式实现声明式事务 (自动挡的车) 二.事务的4大特性(ACID) 三.事务的隔离级别 ①Mysql的事务隔离级别: ②Spring的事务隔离级别: 四.事务的传播机制 ①事务传播机制的概…

Git配置 安装及使用

团队开发的神 找工作必备 环境变量 配置好环境后 打开终端环境 winr cmd 我习惯在桌面打开,然后进入相应的文件夹 (文件夹结构) (个人感觉能用cmd不用git,cmd更好用一些) 进入对应的文件夹 填写自己对…

Valgo,类型安全,表达能⼒强的go验证器

valgo 是一个为 Go 语言设计的类型安全、表达性强且可扩展的验证库。该库的特点包括: github.com/cohesivestack/valgo 类型安全:利用 Go 语言的泛型特性(从 Go 1.18 版本开始支持),确保验证逻辑的类型安全。表达性&a…

Docker高级篇之Docker微服务实战

文章目录 1. 构建一个简单的微服务项目2. 编写Dockerfile发布微服务部署到docker容器 1. 构建一个简单的微服务项目 创建一个SpringBoot项目 创建一个Controller RestController public class OrderController {Value("${server.port")private String port;Reques…

深入分析 Android BroadcastReceiver (二)

文章目录 深入分析 Android BroadcastReceiver (二)1. 深入理解 BroadcastReceiver 的高级使用和优化2. 有序广播(Ordered Broadcasts)2.1 实现有序广播 3. 粘性广播(Sticky Broadcasts)3.1 使用粘性广播 4. 本地广播(…

阿里云 MQTT 服务器搭建与测试(上传和下发数据finish)

一、 MQTT 概念 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于 TCP/IP协议上,由 IBM 在 1999 年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,…

CNCF项目全景图介绍

本文首发在个人博客上,欢迎来踩! 云原生计算基金会(CNCF)介绍 CNCF(Cloud Native Computing Foundation)官网链接:https://www.cncf.io/ 官方的介绍如下: 云原生技术有利于各组织在公有云、私有云和混合…

Mysql(一):深入理解Mysql索引底层数据结构与算法

众所众知,MySql的查询效率以及查询方式,基本上和索引息息相关,所以,我们一定要对MySql的索引有一个具体到数据底层上的认知。 这一次也是借着整理的机会,和大家一起重新复习一下MySql的索引底层。 本节也主要有一下的…

【马琴绿绮】马维衡古琴之马氏汉风 明代杉木制;周身髹朱红色漆

【马琴绿绮式】马维衡古琴之马氏汉风 明代杉木制;琴体周身髹朱红色漆,鹿角霜灰胎;形体壮硕、风格高古;音色松透、浑厚,音质纯净,按弹舒适,手感丝滑。

【vue实战项目】通用管理系统:图表功能

目录 前言 1.概述 2.数据概览页 2.1.柱状图 2.2.折线图 2.3.地图 前言 本文是博主前端Vue实战系列中的一篇文章,本系列将会带大家一起从0开始一步步完整的做完一个小项目,让你找到Vue实战的技巧和感觉。 专栏地址: https://blog.csd…

Vue3【十三】watch监视

Vue3【十三】watch监视 Vue3 中的watch祝你能监视以下四种数据 ref 定义的数据reactive定义的数据函数返回一个值一个包含上述内容的数组 案例截图 目录结构 案例代码 Person.vue <template><div class"person"><!-- <h1>Watch情况1&#xff…

遗址博物馆ar互动展示软件提供丰富的趣味化体验

在自然博物馆的每一个角落&#xff0c;都隐藏着大自然的奥秘与魅力。为了让每一位参观者都能深入体验、探索这些奥秘&#xff0c;我们引入了前沿的AR技术&#xff0c;为您带来一场前所未有的沉浸式自然之旅。 步入博物馆&#xff0c;您手中的AR相机将成为您的更佳向导。自然博物…

如何合并pdf文件?告别软件,教你用python轻松解决

首先安装相关库文件&#xff1a; pip install PyPDF2, tkinter 接着&#xff0c;定义合并pdf函数&#xff0c;使用了PdfMerger构建对象&#xff0c;输入pdf文件路径列表&#xff0c;以及输出文件夹路径 from PyPDF2 import PdfMergerdef merge_pdf(file_paths, output_dir…

【leetcode--30.串联所有单词的子串】

有没有一样喜欢看示例的&#xff0c;&#xff0c;看题目就觉得很难懂。大致就是words要进行排列组合&#xff0c;返回s中所有包含这个排列组合的首标。 顺完逻辑蛮好懂的&#xff0c;应该不算困难题&#xff0c;只是不知道用什么模块实现。 class Solution:def findSubstring…