OFDM通信系统仿真之交织技术

news2024/9/23 3:29:29

文章目录

  • 前言
  • 一、交织
    • 1、概念
    • 2、图形举例
    • 3、交织的位置
  • 二、MATLAB仿真
    • 1、MATLAB 程序
    • 2、仿真结果


前言

之前的博客:OFDM深入学习及MATLAB仿真 中有对交织的概念进行讲解,但讲解还是比较浅显,且仿真实现时并没有加入交织及解交织流程,这里单独对交织的原理做一个讲解并在原来代码的基础上加入交织及解交织流程,再去对比一下加入后和加入前的误比特率。


一、交织

1、概念

交织是为了在时域或者频域,或者同时在时域、频域上分布传输的信息比特,使信道的突发错误在时间上得以扩散,从而使得译码器可以将他们当做随机错误处理。交织器在几个分组长度或几个约束长度的范围内对码元进行混淆,这个范围是由突发持续时间决定的。如果系统是一个纯粹的 AWGN 环境下运行,即准平稳信道,则交织的必要性不大。

  • 作用:交织的作用是将突发错误转换为随机错误,有利于前向纠错码的译码,提高了整个通信系统的可靠性。
  • 原理:交织技术是改变数据流的传输顺序,将突发的错误随机化,提高纠错编码的有效性。
  • 种类:分组交织、卷积交织
    • 分组交织:按列写入,按行读出。去交织时,则是按行写入,按列读出,利用这种行、列倒换,可将长突发误码随机化、离散化,克服较深的衰落。但它的主要缺点是带来较大的附加延时,交织深度越大时延越大。
    • 卷积交织:卷积交织使用一个线性移位寄存器和一个交织器来重新排列数据。数据按照一定的规则通过寄存器,然后通过交织器进行交织操作,最后输出交织后的数据。
  • 方法:交织由两个变换过程组成。
    • 第一次变换保证了相邻的编码比特被映射到不相邻的子载波上。
    • 第二次变换保证了相邻的编码比特被分别映射到星座图的重要和非重要比特上,避免出现长时间的低比特位映射。
  • 交织块的长度: Ncbps,对 qpsk、16qam、64qam 分别为 2、4、6,s=Ncbps/2,d=16。

2、图形举例

假设我要传输下图这样的一个数据,一行一行的传输,很有可能在我传输的过程中信道环境突然有个干扰导致,那么就会造成在传输空间传输的时候,导致下图某一片数据(红框内)受到干扰,然而我们之前讲到的信道编码(卷积码)可以进行纠错,但只是纠正几位减少几位的错误,然而我目前出现了一大片数据错误导致纠错码的功能也捉襟见肘了,从而接收端在接收到的时候识别错误,为了解决这个问题,交织技术就应运而生了。
在这里插入图片描述
交织的原理就是将错误可以打散到整个 OFDM 帧中,从而 OFDM的每个子帧里面对应的纠错码就可以对其进行纠错(下图红圈内为打散后的错误码)
在这里插入图片描述

3、交织的位置

了解到交织的原理后,我们得先明确到交织技术所应用的位置,如下图所示,交织使用的位置在编码之后和数字调制之前,在 bit 域中。
在这里插入图片描述

二、MATLAB仿真

本文仿真所采用的交织方式为分组交织。

1、MATLAB 程序

clc;
clear;

%% 参数设置
N_sc=52;      %系统子载波数(不包括直流载波)、number of subcarrierA
N_fft=64;            % FFT 长度
N_cp=16;             % 循环前缀长度、Cyclic prefix
N_symbo=N_fft+N_cp;        % 1个完整OFDM符号长度
N_c=53;             % 包含直流载波的总的子载波数、number of carriers
M=4;               %4PSK调制
SNR=0:1:25;         %仿真信噪比
N_frm=10;            % 每种信噪比下的仿真帧数、frame
Nd=6;               % 每帧包含的OFDM符号数;一帧OFDM通常由多个连续的OFDM符号组成 ;OFDM符号时长 = 子载波时长 × 子载波数量;一帧由多个连续的OFDM符号组成,每个OFDM符号由多个子载波组成。
P_f_inter=6;      %导频间隔
data_station=[];    %导频位置
L=7;                %卷积码约束长度
tblen=6*L;          %Viterbi译码器回溯深度
stage = 3;          % m序列的阶数
ptap1 = [1 3];      % m序列的寄存器连接方式
regi1 = [1 1 1];    % m序列的寄存器初始值

%% 基带数据数据产生
P_data=randi([0 1],1,N_sc*Nd*N_frm);

%% 信道编码(卷积码、或交织器)
%卷积码:前向纠错非线性码
%交织:使突发错误最大限度的分散化
%[133 171]卷积码其实是卷积码(2,1,7)的最佳编码形式
trellis = poly2trellis(7,[133 171]);       %(2,1,7)卷积编码;首先是7,他是1*k的vector,此处k为1[171 133]是k*n的vector,此处n就是2,那么这个编码就是1/2码率的卷积码,这个卷积码的约束长度是7,也就是输出与前7个输入相关,133171是十进制数,代表的是前面寄存器的抽头位置。
code_data=convenc(P_data,trellis);

%% 交织
interleaved_data = matintrlv(code_data, log2(M), length(code_data) / log2(M));
code_data = interleaved_data;

%% qpsk调制
data_temp1= reshape(code_data,log2(M),[])';             %以每组2比特进行分组,M=4
data_temp2= bi2de(data_temp1);                             %二进制转化为十进制
modu_data=pskmod(data_temp2,M,pi/M);              % 4PSK调制
% figure(1);
scatterplot(modu_data),grid;                  %星座图(也可以取实部用plot函数)

%% 扩频
%————————————————————————————————————————————————————————%
%扩频通信信号所占有的频带宽度远大于所传信息必需的最小带宽
%根据香农定理,扩频通信就是用宽带传输技术来换取信噪比上的好处,这就是扩频通信的基本思想和理论依据。
%扩频就是将一系列正交的码字与基带调制信号内积
%扩频后数字频率变成了原来的m倍。码片数量 = 2(符号数)* m(扩频系数)
%————————————————————————————————————————————————————————%
% 由于m序列的均衡性、游程分布和自相关特性与随机序列的基本性质极其相似,所以通常将m序列称为为噪声(PN)序列,或称为伪随机序列
% 扩频通信的主要目的是提高通信信号的抗干扰性和保密性。通过在发送信号时对其进行频率扩展,使得信号在宽带频谱上占用更大的带宽,从而可有效抵消窄带干扰信号对于通信信号的影响
code = mseq(stage,ptap1,regi1,N_sc);     % 扩频码的生成
code = code * 2 - 1;         %10变换为1-1
modu_data=reshape(modu_data,N_sc,length(modu_data)/N_sc);
spread_data = spread(modu_data,code);        % 扩频
spread_data=reshape(spread_data,[],1);

%% 插入导频  梳状结构
P_f=3+3*1i;                       %Pilot frequency
P_f_station=1:P_f_inter:N_fft;%导频位置(导频位置很重要,why?)
pilot_num=length(P_f_station);%导频数量

for img=1:N_fft                        %数据位置
    if mod(img,P_f_inter)~=1          %mod(a,b)就是求的是a除以b的余数
        data_station=[data_station,img];
    end
end
data_row=length(data_station);
data_col=ceil(length(spread_data)/data_row);

pilot_seq=ones(pilot_num,data_col)*P_f;%将导频放入矩阵
data=zeros(N_fft,data_col);%预设整个矩阵
data(P_f_station(1:end),:)=pilot_seq;%对pilot_seq按行取

if data_row*data_col>length(spread_data) % 判断数据的总数是否大于扩展数据的长度,如果是,说明书菊矩阵中还有空余位置,需要补零
    data2=[spread_data;zeros(data_row*data_col-length(spread_data),1)];%将数据矩阵补齐,补0是虚载频~
end

%% 串并转换
data_seq=reshape(data2,data_row,data_col);
data(data_station(1:end),:)=data_seq;%将导频与数据合并

%% IFFT
ifft_data=ifft(data); 

%% 插入保护间隔、循环前缀
Tx_cd=[ifft_data(N_fft-N_cp+1:end,:);ifft_data];%把ifft的末尾N_cp个数补充到最前面

%% 并串转换
Tx_data=reshape(Tx_cd,[],1);%由于传输需要

%% 信道(通过多经瑞利信道、或信号经过AWGN信道)
 Ber=zeros(1,length(SNR));
 Ber2=zeros(1,length(SNR));
for jj=1:length(SNR)
    rx_channel=awgn(Tx_data,SNR(jj),'measured');%添加高斯白噪声
    
%% 串并转换
    Rx_data1=reshape(rx_channel,N_fft+N_cp,[]);
    
%% 去掉保护间隔、循环前缀
    Rx_data2=Rx_data1(N_cp+1:end,:);

%% FFT
    fft_data=fft(Rx_data2);
    
%% 信道估计与插值(均衡)
    data3=fft_data(1:N_fft,:); 
    Rx_pilot=data3(P_f_station(1:end),:); %接收到的导频
    h=Rx_pilot./pilot_seq; % 将接收到的导频除以发送的导频(pilot_seq)来估计信道的频域响应(h)
    % 将估计得到的信道响应(h)插值到数据子载波的位置(data_station)上,并得到最终的信道估计结果(H)。
    H=interp1( P_f_station(1:end)',h,data_station(1:end)','linear','extrap');%分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函数预测。对超出已知点集的插值点用指定插值方法计算函数值

%% 信道校正 
    % 目的是消除信道引起的失真和干扰,使接收到的数据恢复到发送时的原始状态。
    % 信道校正的原理是利用估计得到的信道响应(H)对接收信号进行除法运算。由于信道引起的失真和干扰可以看作是对发送信号的乘性影响,
    % 通过将接收信号与信道响应的倒数相乘,可以抵消信道引起的乘性失真和干扰。这样,经过信道校正后的数据(data_aftereq)将尽可能接近发送时的原始数据。
    data_aftereq=data3(data_station(1:end),:)./H;
%% 并串转换
    data_aftereq=reshape(data_aftereq,[],1);
    data_aftereq=data_aftereq(1:length(spread_data));
    data_aftereq=reshape(data_aftereq,N_sc,length(data_aftereq)/N_sc);
    
%% 解扩
    demspread_data = despread(data_aftereq,code);       % 数据解扩
%     if jj == 10
%         tmp = reshape(demspread_data,[],1);
%         scatterplot(tmp),grid; 
%     end
        
%% QPSK解调
    demodulation_data=pskdemod(demspread_data,M,pi/M);    
    De_data1 = reshape(demodulation_data,[],1);
    De_data2 = de2bi(De_data1);
    De_Bit = reshape(De_data2',1,[]);

%% 解交织
    deinterleaved_data = matdeintrlv(De_Bit, log2(M), length(De_Bit) / log2(M));
    De_Bit = deinterleaved_data;
%% 信道译码(维特比译码)
    trellis = poly2trellis(7,[133 171]);
    rx_c_de = vitdec(De_Bit,trellis,tblen,'trunc','hard');   %硬判决

%% 计算误比特率
    [err, Ber(jj)] = biterr(rx_c_de(1:length(P_data)),P_data);%译码后的误码率

end
 figure(2);
 semilogy(SNR,Ber,'r-o');
 hold on;
 legend('4PSK调制、卷积码译码前(有扩频)','4PSK调制、卷积码译码后(有扩频)');
 hold on;
 xlabel('SNR');
 ylabel('BER');
 title('AWGN信道下误比特率曲线');

 figure(3)
 subplot(2,1,1);
 x=0:1:60;
 stem(x,P_data(1:61));
 ylabel('amplitude');
 title('发送数据(以前60个数据为例)');
 legend('4PSK调制、卷积译码、有扩频');

 subplot(2,1,2);
 x=0:1:60;
 stem(x,rx_c_de(1:61));
 ylabel('amplitude');
 title('接收数据(以前60个数据为例)');
 legend('4PSK调制、卷积译码、有扩频');

2、仿真结果

上述程序将交织及解交织相关的程序注释后跑出的仿真如下:
在这里插入图片描述

未加入交织技术

上述程序将交织及解交织相关的程序加入系统后跑出的仿真如下:
在这里插入图片描述

加入交织技术

从上述仿真的结果可以看出,加入交织技术后误比特率为 0 所需的信噪比更低一些,因此通信性能更优。


我的qq:2442391036,欢迎交流!


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

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

相关文章

【电路笔记】-欧姆定律

欧姆定律 文章目录 欧姆定律1、概述2、AC电路的等效性2.1 输入电阻2.2 输入电感2.3 输入电容 3、欧姆定律的局部形式3.1 介绍和定义3.2 德鲁德模型(Drude Model)3.3 局部形式表达式 4、电阻和宏观欧姆定律5、总结 电流、电压和电阻之间的基本关系被称为欧姆定律,可能…

解决龙芯loongarch64服务器编译安装Python后yum命令无法使用的问题“no module named ‘dnf‘”

引言 在使用Linux系统时,我们经常会使用yum来管理软件包。然而,有时候我们可能会遇到yum不可用的情况,其中一个原因就是Python的问题。本文将介绍Python对yum可用性的影响,并提供解决方案。 问题引发 正常情况下,安装linux系统后,yum命令是可用状态,升级Python版本后,…

CPU版本的pytorch安装

1.安装:Anaconda3 2.安装:torch-2.0.1cpu-cp311 2.安装:torchvision-0.15.2cpu-cp311-cp311-win_amd64 测试是否安装成功 cmd 进入python import torch print(torch.__version__) print(torch.cuda.is_available())

使用Docker/K8S/Helm部署项目流程

假设项目已经开发完成,部署流程如下: 一、制作镜像: 1、创建nginx配置文件default.conf server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html ind…

服务器端请求伪造(SSRF)

概念 SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造形成的由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要攻击目标网站的内部系统。(因为内部系统无法从外网访问,所以要把目标网站当做中间人来…

盼望许久的百度熊终于收到了

文|洪生鹏 我怀着激动的心情,终于收到了百度熊礼品。 在我想象中,这只熊应该很大,能够填满我的怀抱。 但当我打开礼盒的那一刻,我有些惊讶。 它居然这么小,与我预期的相差甚远。 不过,当我们仔细一看&#…

大厂数仓专家实战分享:企业级埋点管理与应用

一.什么是埋点 埋点(Event Tracking),是互联网数据采集工作中的一个俗称,正式应该叫事件跟踪,英文为 Event Tracking,它主要是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。 二.埋…

中国互联网格局改变的重点,在于真正走向海外,打破美国垄断

媒体报道指字节跳动上半年的营收达到540亿美元,超过了其他互联网企业,这是国内互联网行业格局发生重大变化的证明,那么是什么原因导致了这一格局的改变呢? 中国互联网的发展也有20多年了,这20多年涌现了一大批互联网企…

文件夹改名:批量随机重命名文件夹,让整理更轻松

在日常生活和工作中,文件夹重命名是一件非常常见的事情。有时候,可能需要批量处理文件夹,为其加上统一的名称,或者按照某种特定的规则来重命名。然而,当我们手动进行这些操作时,会消耗大量的时间和精力。这…

Redis:Java客户端

前言 "在当今大数据和高并发的应用场景下,对于数据缓存和高效访问的需求日益增长。而Redis作为一款高性能的内存数据库,以其快速的读写能力和丰富的数据结构成为众多应用的首选。与此同时,Java作为广泛应用于企业级开发的编程语言&…

三极管-开关电路-电路电子-嵌入式开发-物联网开发-电子元件

一、概述 本文我们主要讲解电子电路中十分重要的元件--三极管。三极管常常被用来当作开关或作为放大电流的作用,下面我们将主要围绕着其作为开关电路的使用来介绍三极管。 二、分类 学习三极管前,我们必须认识三极管的三级,包含箭头的一端为发…

【论文阅读笔记】Deep learning for time series classification: a review

【论文阅读笔记】Deep learning for time series classification: a review 摘要 在这篇文章中,作者通过对TSC的最新DNN架构进行实证研究,探讨了深度学习算法在TSC中的当前最新性能。文章提供了对DNNs在TSC的统一分类体系下在各种时间序列领域中的最成功…

(1)(1.17) Maxbotix 模拟声纳

文章目录 前言 1 连接到Pixhawk 2 通过Mission Planner进行设置 3 测试传感器 4 参数说明 前言 XL-Maxbotix-EZ 系列模拟声纳(XL-MaxSonar-EZ0、EZ4 和 EZL0)是相对便宜的短距离(7m 至 10m)测距仪,主要设计用于室…

Linux系统中Qt应用程序确保使用集成显卡进行图形渲染

背景:有一个Qt开发的应用程序,使用了Qt的OpenGL模块来渲染QImage加载的图片,当应用程序切换到图片渲染界面时,系统CPU占用率立马到了100%多,容易造成程序卡顿,可设备是自带集成显卡的,期望效果是…

7 Redis的PipeLine

PipeLine的作用是批量执行命令 redis的性能瓶颈基本上是网络 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.…

牛客::栈的压入、弹出序列

栈的压入、弹出序列 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列&…

ShardingSphere-JDBC 之数据分片详细讲解

文章目录 单一节点存储问题数据分片垂直分片水平分片 ShardingSphere-JDBC 数据分片核心概念表相关概念数据节点分片行表达式分布式主键 ShardingSphere-JDBC 数据分片原理ShardingSphere-JDBC 数据分片实现示例1、数据库表创建2、引入依赖3、配置参数4、代码示例 ShardingSphe…

FPGA实现平衡小车(文末开源!!)

FPGA平衡小车 一. 硬件介绍 底板资源: TB6612电机驱动芯片 * 2 MPU6050陀螺仪 WS2812 RGB彩色灯 * 4 红外接收头 ESP-01S WIFI 核心板 微相 A7_Lite Artix-7 FPGA开发板 电机采用的是平衡小车之家的MG310(GMR编码器)电机。底板上有两个TB6612芯片,可以驱动…

Python运维监控系统之架构设计

说起Python这门编程语言的作用,可以列举很多方面,其实每一门流行的编程语言都可以列举很多方面,但是要说起Python的主要领域,莫过于运维监控方面,在这方面有大量优秀的开源运维系统。 虽然有很多优秀的开源运维监控系统…

基于springboot实现智能热度分析和自媒体推送平台系统项目【项目源码】

基于springboot实现自媒体社区平台系统演示 系统开发平台 在该自媒体分享网站中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编程。其功能…