采用Turbo编码的图像传输试验(AWAG信道,matlab实现)分别验证了不同交织器类型,交织深度对turbo码性能的影响

      Turbo码是接近于香农极限的信道编码定理,Turbo码的出现给通信领域带来了极大的影响,极大的推动了信息领域的发展。Turbo广泛应用在现代通信的各个方面,保证了信息传输的可靠性、提高传输质量,提高了信号传输的抗干扰性。
      1.Turbo编码原理
      Turbo码编码器主要由分量编码器、交织器以及删余矩阵和复接器组成。一个常见的Turbo 码编码器如图1.1所示。

在这里插入图片描述
图1.1 Turbo码编码器结构
在Turbo码编码过程中,两个分量码的输入信息序列是相同的,长度为N的信息序列{uk}在送入第一个分量编码器(RSC1)进行编码的同时作为系统输出{xks}直接送至复接器,同时{uk}经过交织器I后的交织序列{x1p}送入第二个分量编码(RSC2)。其中,n=I(k),0<n,k<N-1。I()为交织映射函数,N为交织长度,即信息序列长度。两个分量编码器输入序列仅仅是码元的输入顺序不同。两个分量编码器输出的校验序列分别为{x1p}和【x2p}。为提高码率和系统频谱效率,可以将两个校验序列经过删余矩阵删余得到(xkp},再与系统输出{}一起经过复接构成码字序列(ck)。
Turbo码的分量码采用迭代系统卷积码,这是Turbo码性能优越的一个重要原因。分量编码器可以选用递归系统卷积(RSC,Recursive Systematic Convolutional)码或非系统卷积(NSC,Nonsystematic Convolutional Code)码。给定一个RSC码总能够找到一个生成多项式与之对应的NSC码,反之也一样。
交织实际上就是将数据序列中元素的位置进行重置,从而得到交织序列的过程。这个过程的逆过程就是在交织序列的基础上将交织序列中的元素恢复原有顺序,从而恢复原始序列的过程,这个过程一般也称为解交织过程。实现交织解交织过程的设备就称为交织器和解交织器。

1.1交织器的基本原理
交织是指一个数据序列在一一对应的条件下进行数据位置的重排过程。其逆过程为解交织,也就是将接收到的信息序列进行位置交换,使数据的位置还原成发送时的顺序。假设输入序列为c=(c1,c2,c3,…,cN),那么其输出序列及映射关系如下图所示:
在这里插入图片描述
图1.1 交织原理
1.2常用交织器的介绍
1.2.1倒序交织器
倒序交织器原理较为简单,只需将输入序列按照逆序输出即可。该方法需要的计算资源少,交织时延短,但交织前后序列的相关性较大。
1.2.2分组交织器
分组交织器是比较常见的一类交织器,它广泛应用于通信系统中。其交织过程描述如下:首先将输入信息序列按照行的顺序写入一个的矩阵,然后将数据按列读出。相对应的解交织处理就是将数据按列写入相同的矩阵,然后按行读出。
具体的读写顺序如下图所示:
在这里插入图片描述

                        图1.2 分组交织器

分组交织器和其解交织器相对比较容易实现。但分组交织存在一个比较明显的缺点,就是对于那些低重量输入序列,交织前后,其重量分布不变(实验证明:在这种情况下,生成的 Turbo 码的性能较差)。
1.2.3螺旋交织器
分组螺旋交织器首先将输入序列按行写入一个的矩阵,与互为素数。交织时从矩阵的左上角到右下角方向读出数据,每向右移一位的同时向下移一位,即行和列索引同时递增,步长为。通常要求为分量码约束长度的整数倍。假设ri和ci分别表示第i个比特的行和列的索引,则分组螺旋交织器下一个要读取的数据的行列索引分别为:
其中,i=0,1,2,…,N-1。 递归的初始值设置为r0 =0,c0 = 0。
下图给出了分组螺旋交织示意图,按照图中a-b-c-d-e-f的顺序依次读取数据即可得到交织输出。当然,分组螺旋交织过程也可以从交织矩阵的左下角到右上角读取数据,结果如下图所示:
在这里插入图片描述

图1.3 螺旋交织器
1.2.4随机交织器
首先给序列中的每一比特位都赋予随机产生的映射地址(交织向量),然后用查表的方式实现码元交织。使用这种交织器,会使编码所需存储量增加,但交织后码元间的相关性大大降低。其原理如下图所示:
在这里插入图片描述
图1.4 随机交织器

实验仿真:
2.1 参数设置
我们利用 Matlab对各交织器方案进行了仿真,各参数设置如下:
信息序列:由随机函数产生,序列长度为25600。
编码结构:选用4, [13 15 17],13的 RSC 编码,编码速率为 1/3,这也是1/3码率下的ccdcn编码标准。
交织长度: 128、256、512、1024。
调制解调方式:采用BPSK调制与解调。
道模型:高斯加性白噪声无记忆信道(AWGN)。
译码器:采用对数最大后验概率(LOGMAP)译码算法,迭代次数为 4 次。
交织器类型:倒序交织器,倒序输出。行列式分组交织:分组矩阵选 16*(length/16);随机交织:利用迭代算法得到。

2.2 仿真结果
根据设置的参数,EbNo设置为-16db~0db,交织深度设置为256,分别选择倒序交织器、分组交织器、随机交织器进行仿真,得到如下结果:
在这里插入图片描述

图2.1 交织器类型对Turbo性能的影响
从上图可以看出:随着信道信噪比从-15db逐渐提高,随机交织器、分组交织器在-6db时误码率已经趋近于0。而倒序交织器在-4db至-3db时才趋近于0。随机交织器相比倒序交织器,降低了序列的相关性,提高了编码性能。分组交织器与随机交织器性能相近,但随机交织后的序列相关性较好。
随后,针对随机交织器这一类型,研究交织深度对编码性能的影响,分别选择交织深度为128、256、512、1024,得到如下结果:
在这里插入图片描述
图2.2 交织深度对Turbo性能的影响
从上图可以看出:随着信道信噪比从-15db逐渐提高,编码深度为1024的曲线信噪比为-7db时误码率已经趋近于0,性能明显优于其他交织深度;而交织深度为128的曲线,在-5db是误码率依然较高,收敛较慢。可以看出对于同一交织器,交织深度越大,编码性能越好。

随后我们输入图像,进行分析:

这里我们以灰度图像lena(512*512)为例,采用BPSK调制与解调,信道环境为AWAG信道,信噪比为6db。
图像在0db下分别经卷积编码,和Turbo编码后的传输质量分析:
在这里插入图片描述
进行试验,结果如上图所示:左图原始图像,中间为经调制,过信道,解调后的图像,右图为错误序列。信道信噪比为0db。第一行是经卷积编码后经信道(加入信噪比6db的高斯白噪声)的图像。第二行是图像经Turbo编码后过信道的图像。由前述可知,在-6db时Turbo误码率已经接近于0。而在0db条件下,卷积码误码率仍然较高。这6db的提升带来的可能是几百万的收益。

分析上图的结果可知,采用不同的信道编码的传输系统效果不同,观察原始图像、接收图像和错误图像可知Turbo码的性能较卷积码有较大的提升,进而得出Turbo性能明显优于卷积码

2.验证不同交织器类型对Turbo码性能的影响
在这里插入图片描述
进行试验,结果如上图所示:左图原始图像,中间为经调制,过信道,解调后的图像,右图为错误序列。信道信噪比为-6db。第一行是采用倒序交织器经信道的图像。第二行是图像随机交织器后过信道的图像。分析上图可知,交织器的结构对信道编码的效果有较大的影响,对比分析经过随机交织器和倒序交织器结构的Turbo图像传输系统后的接收图像与原始图像可知,在此传输系统中倒序交织器性能更好。

以上是整个实验过程。下面是实验代码:
1.主函数,读取图像,进行turbo编码,bpsk调制,过awag信道,随后依次解调,还原,得到传输后的图像。

 	%%
clc;
close all;

%% 图像初始化
lena_jpg = imread('lena_rgb.jpg');
lena_bmp = rgb2gray(lena_jpg);      %转为灰度图像

lena_bmp_list = lena_bmp(:);
lena_2bit = de2bi(lena_bmp_list);
lena_2bit = double(lena_2bit);      %转为双精度数值
lena_2bit_list = lena_2bit(:);      %数据转为列向量

%% 分析不同信噪比下图像传输质量比较
% EbNo1 = -10;
% EbNo2 = -8;
% EbNo3 = -6;
% 
% [receive_data1,error_bits1] = Turbo_AWAG_chanel(lena_2bit_list,EbNo1,1); %调用函数 得到过信道图像
% [receive_data2,error_bits2] = Turbo_AWAG_chanel(lena_2bit_list,EbNo2,1);
% [receive_data3,error_bits3] = Turbo_AWAG_chanel(lena_2bit_list,EbNo3,1);
% 
% receive_lena_1 = receive_image_reshape(receive_data1);          %接收图像
% error_image_1 = lena_bmp-receive_lena_1;                        %错误图像
% 
% receive_lena_2 = receive_image_reshape(receive_data2);          
% error_image_2 = lena_bmp-receive_lena_2;
% 
% receive_lena_3 = receive_image_reshape(receive_data3);
% error_image_3 = lena_bmp-receive_lena_3;
% 
% % 图像分析
% figure,
% subplot(3,3,1)
% imshow(lena_bmp)
% title(
  • 9
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
您好,C知道在这里!对于您提到的 "mysql gone away" 错误,它通常表示与 MySQL 数据库的连接已断开或丢失。这种情况可能是由于以下几种原因引起的: 1. 连接超时:如果没有活动或请求超过了 MySQL 服务的连接超时设置时间,则连接可能会被关闭。您可以通过增加 `wait_timeout` 和 `interactive_timeout` 的值来延长连接超时时间。 2. 数据库负载过重:如果 MySQL 服务的负载过重,它可能会主动断开一些连接以保持性能稳定。您可以通过优化查询、增加服务资源等方式来缓解负载问题。 3. 网络问题:如果存在网络问题,例如网络延迟、连接不稳定等,连接可能会中断。您可以检查网络连接是否正常,并尝试重新连接数据库。 4. 配置问题:某些配置选项可能导致连接断开。您可以检查 MySQL 配置文件中的选项,例如 `max_allowed_packet` 和 `max_connections`。 当出现 "mysql gone away" 错误时,您可以尝试以下解决方法: 1. 检查服务日志:查看 MySQL 服务的错误日志,以了解更多关于连接断开的详细信息。 2. 重新连接数据库:在应用程序中捕获该错误并尝试重新建立与数据库的连接。 3. 优化查询和代:确保查询和代逻辑是高效且不会占用过多资源。 4. 增加服务资源:如果服务资源不足,可以考虑增加内存、CPU 等硬件资源。 希望这些解决方法对您有帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值