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

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.mzph.cn/diannao/25422.shtml

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

相关文章

正确理解iOS中的同步锁

在 iOS 开发中,同步锁(synchronized lock)是一种用于管理多线程访问共享资源的机制,而不是某一种特定类型的锁。它涵盖了多种具体实现和技术,用于确保同一时间只有一个线程能够访问某个共享资源,从而避免数…

在 Linux 使用 cron 定时执行任务的注意事项

在 Linux 下想通过 cron 设置自动镜像备份文件,遇到很多挫折,最后成功,记录下几点注意事项。 尝试过程: 系统默认自带 cron,执行 crontab -e 添加开机启动任务。类似如下语句。 reboot rsync -a --delete /home/use…

使用`LD_PRELOAD`和`jemalloc`实现C/C++信号的内存堆栈信息收集

文章目录 0. 概要1. 编译jemalloc2. 编译钩子共享库liballoc_hook.so3. 使用LD_PRELOAD加载钩子库liballoc_hook.so测试3.1 设置环境变量3.2 使用LD_PRELOAD加载钩子库并运行程序3.3 发送SIGUSR1信号以触发堆栈信息打印3.4 使用jeprof解析heap堆栈信息文件 4. 示例程序example.…

详细说说机器学习在医疗领域的应用

机器学习在医疗领域的应用广泛而深入,为医疗行业带来了显著的变革。以下是机器学习在医疗领域的主要应用方面: 个性化治疗: 机器学习能够根据病人的个体差异和基因组信息,帮助医生制定个性化的治疗方案。通过分析大规模的基因组数…

探地雷达正演模拟,基于时域有限差分方法,一

声明:本博客中的公式均是在Word中使用AxMath写好后截图使用的,欢迎引用,但请标注来源。 本系列会有四篇博客: 第一篇内容: 1、基础知识掌握 2、Maxwell方法差分求解原理 第二篇内容: 1、基于C的TE波波…

docker——基础知识

简介 一、什么是虚拟化和容器化 ​ 实体计算机叫做物理机,又时也称为寄主机; ​ 虚拟化:将一台计算机虚拟化为多态逻辑计算机; ​ 容器化:一种虚拟化技术,操作系统的虚拟化;将用户空间软件实…

mongodb总概

一、mongodb概述 mongodb是最流行的nosql数据库,由C语言编写。其功能非常丰富,包括: 面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;强大的查询语句…

2 程序的灵魂—算法-2.2 简单算法举例-【例 2.3】

【例 2.3】判定 2000 — 2500 年中的每一年是否闰年,将结果输出。 润年的条件: 1. 能被 4 整除,但不能被 100 整除的年份; 2. 能被 100 整除,又能被 400 整除的年份; 设 y 为被检测的年份,则算法可表示如下…

Element-UI全面入门与实战技巧

本文详细介绍了Element-UI的安装、配置、组件使用、布局技巧、交互设计、表单处理、主题定制等内容,旨在帮助开发者快速掌握Element-UI,并能在实际项目中灵活应用。 文章目录 一、Element-UI概述与安装1.1 Element-UI简介1.2 环境搭建1.3 安装Element-UI…

C语言:定义和使用结构体变量

定义和使用结构体变量 介绍基础用法1.定义结构体2. 声明结构体变量3. 初始化和访问结构体成员4. 使用指针访问结构体成员5. 使用结构体数组 高级用法6. 嵌套结构体7. 匿名结构体8. 结构体和动态内存分配9. 结构体作为函数参数按值传递按引用传递 介绍 在C语言中,结…

Edge怎么关闭快捷键

Edge怎么关闭快捷键 在Edge浏览器中,你可以通过以下步骤关闭快捷键: 打开Edge浏览器,输入:edge://flags 并按下回车键。 在Flags页面中,搜索“快捷键”(Keyboard shortcuts)选项。 将“快捷键”选项的状态设置为“…

Python 基于鲁棒核迭代最近点算法的点云精配准[Robust_ICP算法]

点云配准鲁棒迭代最近点算法 一、概述1.1 定义1.2 算法步骤二、代码示例三、运行结果一、概述 1.1 定义 Robust_ICP(鲁棒迭代最近点算法):是一种改进的ICP(Iterative Closest Point)算法,用于处理3D点云配准问题,特别是在存在噪声、外点(不匹配点)或数据分布不均等复杂…

dos命令---根据端口查找进程

简介 在日常开发中,常常出现端口被占用的情况,导致程序运行报错,这时可以使用此命令查看哪个进程占用了端口 命令 netstat -ano | findstr 11434返回结果:

关于利用hashcat破解WiFi数据包的操作记录

准备数据包相关转换工具 ┌──(kali㉿kali)-[~/cap/3204] └─$ sudo apt-cache search hc | grep ^hc hcloud-cli - command-line interface for Hetzner Cloud hcxdumptool - Small tool to capture packets from wlan devices hcxkeys - Tools to generate plainmasterkey…

【简单介绍下DALL-E2,什么是DALL-E2?】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

【代码随想录算法训练营第37期 第三十二天 | LeetCode122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II】

代码随想录算法训练营第37期 第三十二天 | LeetCode122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II 一、122.买卖股票的最佳时机II 解题代码C&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for(int i 1; i &…

10.爬虫---XPath插件安装并解析爬取数据

10.XPath插件安装并解析爬取数据 1.XPath简介2.XPath helper安装3.XPath 常用规则4.实例引入4.1 //匹配所有节点4.2 / 或 // 匹配子节点或子孙节点4.3 ..或 parent::匹配父节点4.4 匹配属性4.5 text()文本获取4.6 属性获取4.7 属性多值匹配 1.XPath简介 XPath是一门在XML文档中…

46-3 护网溯源 - 溯源报告编写

格式 1. 基本情况︰钓鱼邮件情况介绍 在这部分,需要详细描述钓鱼邮件的基本情况,包括收到的邮件内容、寄件人信息、邮件附件或链接等。还需说明收到邮件的时间和频率。2. 行为分析 详细阐述攻击者的行为模式和攻击方式,包括攻击手段、使用的恶意工具或技术,以及可能的入侵…

Flutter旅游出行类APP常用的第三方库总汇

Flutter旅游出行类APP常用的第三方库总汇 旅游出行类APP为用户提供了探索世界、规划旅程和预订服务的便捷方式。Flutter作为一个流行的跨平台移动应用开发框架&#xff0c;为这类应用的开发提供了强大的支持。本文将汇总Flutter旅游出行类APP开发中常用的第三方库&#xff0c;…

Spring - springfox-spi knife4j 版本冲突解决方案

问题描述 An attempt was made to call a method that does not exist. The attempt was made from the following location: com.github.xiaoymin.knife4j.spring.plugin.OperationDynamicResponseModelProvider.apply(OperationDynamicResponseModelProvider.java:47) The f…