通信感知一体化之OCDM产生(MATLAB与FPGA实现)(一)

这篇具有很好参考价值的文章主要介绍了通信感知一体化之OCDM产生(MATLAB与FPGA实现)(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、OCDM信号

        OCDM信号是正交线性调频波分复用(Orthogonal Chirp Division Multiplexing)(可以去IEEE 官网上搜其原文,原文名字就是Orthogonal Chirp Division Multiplexing),OCDM 信号由Ouyang 于2016 年首次提出。由一组在时域与频域上重叠的啁啾(chirp)信号组成,且每一个啁啾信号在啁啾维度相互正交,在传输时不会互相干扰。因为其在多径传播中具有更好地鲁棒性,所以其被认为是正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)技术的替代方案。OCDM从原理上也与OFDM类似,接下来我们逐步分析。

Chirp(啁啾信号)(线性调频信号)

        以下为Chirp信号公式,rect(t/T)为矩形函数,表示信号范围为之间宽度为T。为什么是线性调频信号呢,我们对其相位ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节对t进行求导可得到,频率ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节。就能发现其频率是与时间t是线性相关的。

ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

        当为0时,其波形如下图所示。到这就对Chirp的时域波形熟悉了。在时域上还有个重要的点就是Chirp信号自相关尖锐特性,这是chirp信号用于进行扩频的关键特性。

ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

Chirp自相关尖锐特性分析

     当chirp信号经过,由其自身函数获得的冲激响应构成匹配滤波器时。其实就是  (*表示卷积),得到的输出时域响应如下图所示,可以看到当中间时刻,也就是s(t)刚好与自身进行内积运算的时刻,体现出良好尖锐特性。学过通信原理就知道,这个尖锐的特性对于抗多径效应是非常有帮助的。

ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

正交的Chirp信号

        我们知道正交其实就是两个信号内积为0(实际上很小可忽略即可),在连续信号分析中就是两个信号相乘求积分。不过咱们用MATLAB分析,就当做是两个信号对应位置数值相乘求和为0(内积)。

        我们直接看原文公式:

ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

        作者说k=0..N-1,对应N个子载波,并且这N个子载波是正交的。学过通信原理咱们知道OFDM中也会有N个子载波如sin(t)sin(2t)....   cos(t) cos(2t)...,他们之间就是正交的。正交载波的作用就是,解调时可以利用其中一个信号的相干载波将其中一个波形提取出来。这样就能单独对其进行解调,而不受其它载波干扰。并且每个载波都能单独携带信息(单独调制如QAM QPSK)。

        而这里OCDM也是一样,既然作者说这个公式能够获得多个正交的Chirp载波,那么咱们就用MATLAB分析下。代码非常简单,非常直观。y0为k=0时的波形,y1是k=15时候波形。

clear;
clc;
T=0.02;
Npoint=1000;
N=64;
t=0:T/Npoint:T-T/Npoint;
k=0;
y0=exp(pi/4*1i)*exp(-1i*pi*N/(T^2)*((t-k*T/N).^2));
k=15;
y1=exp(pi/4*1i)*exp(-1i*pi*N/(T^2)*((t-k*T/N).^2));
plot(real(y0));
title('k=0时,信号波形')
figure;
plot(real(y1));
title('k=15时,信号波形')
y0_flip = fliplr(real(y0));


convy0y1=conv(y0_flip,real(y1));
figure;
plot(convy0y1);
title('两个信号相关运算的函数,注意t=1000,两个信号重合等于做内积运算时')

       k=0时候信号波形,我们明显是可以看出是线性调频信号,其实咱们对其公式的相位求导也能看出是频率和时间t线性相关。

 ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

        两个信号进行相关运算可以发现,在某个时间点时,两个信号相关函数会表现尖锐特性。但是当两个信号之间进行内积时,也就是t=1000位置的值,会体现出正交特性。

ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

二、OCDM信号的产生

        学过OFDM,会知道,OFDM产生是不需要通过分别产生多个正交载波的,只要用一个ifft模块就能实现,这里用OCDM也能用类似的方法。通过菲涅尔逆变换实现(包含ifft模块)。

菲涅尔逆变换等于  。

ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节

       看代码前注意通常进行OFDM和OCDM调制前都会进行QAM或者QPSK的映射,然后还会进行导频操作,再把映射每个数据调制到不同的子载波上。  比如64个子载波的OCDM,就是将64个16QAM映射后数据,再进行导频,再分别乘上OCDM的子载波上,再叠加起来。

         接下来我们看代码。运行以下代码就会发现,通过时域方法(将QAM映射的每个数据乘上子载波)和利用菲涅尔变换的方法获得的OCDM的波形几乎完全一样(人眼看波形就是一样)。发明菲涅尔变换的可真是个天才。

    ocdm,通信感知一体化,fpga开发,信息与通信,matlab,1024程序员节


close all;
clear;



num_byte=24;
% 创建一个从0到23的数字数组
numbers = 0:23;

%numbers= ones(1,24);
% 将每个数字表示为8位二进制数

% 将数字数组转换为8位二进制的字符数组
binaryArray = dec2bin(numbers, 8);

for i = 1:numel(binaryArray)
    DataArray(i) = bin2dec(binaryArray(floor((i-1)/8)+1,mod(i-1,8)+1));%生成比特流
end
% 使用 reshape 函数将 DataArray 重新排列成 48x4
DataArray = reshape(DataArray, 4, 48);

% 使用转置操作将数据按照行的方式排列
DataArray = DataArray'; %按顺序一行一行排列,如果不进行转置是按列主序排列

DataArray = reshape(DataArray, 48, 4);
% 定义QAM映射表

Img_QamMapping_Vector = [-61i, 61i, -20i, 20i];
Real_QamMapping_Vector =[-61, 61, -20,20 ];
MappedData = zeros(1, num_byte*8/4);
% 创建一个新的数组,用于存储QAM映射后的值
qamArray = zeros(1, numel(DataArray) * 2);
row_col=size(DataArray);

%Qam16映射
for i=1:row_col(1)
    real_index=bitshift(DataArray(i,3),1)+DataArray(i,4);
    img_index=bitshift(DataArray(i,1),1)+DataArray(i,2);
    MappedData(i)=Real_QamMapping_Vector(real_index+1)+Img_QamMapping_Vector(img_index+1); 
end

%导频
Pilot_MappedData=zeros(1,64);
Pilot_MappedData(8)=64;
Pilot_MappedData(22)=-64;
Pilot_MappedData(44)=64;
Pilot_MappedData(58)=64;

Pilot_MappedData(2:7)=MappedData(25:30);
Pilot_MappedData(9:21)=MappedData(31:43);
Pilot_MappedData(23:27)=MappedData(44:48);
Pilot_MappedData(39:43)=MappedData(1:5);
Pilot_MappedData(45:57)=MappedData(6:18);
Pilot_MappedData(59:64)=MappedData(19:24);

Pilot_MappedData=conj(Pilot_MappedData');%一行转为一列形式,因为转置会默认执行共轭操作,所以取个共轭还原
SigIn=Pilot_MappedData;
NIDFNT=64;  %ifft点数/子载波数
Phi_1 = zeros(NIDFNT, NIDFNT);
Phi_2 = zeros(NIDFNT, NIDFNT);
for m = 0 : NIDFNT-1
    Phi_1(m+1, m+1) = exp(-1i* pi/4)*exp(1i*(pi/NIDFNT)*m^2);
    Phi_2(m+1, m+1) = exp(1i*(pi/NIDFNT)*m^2);
end

SigOut = zeros(size(SigIn));

for n = 1 : ceil(size(SigIn, 1)/ NIDFNT)
        SigOut((n-1)*NIDFNT + 1 : n*NIDFNT) = conj(Phi_2) * SigIn((n-1)*NIDFNT + 1 : n*NIDFNT);
        SigOut((n-1)*NIDFNT + 1 : n*NIDFNT) = sqrt(NIDFNT) * ifft(SigOut((n-1)*NIDFNT + 1 : n*NIDFNT), NIDFNT);
        SigOut((n-1)*NIDFNT + 1 : n*NIDFNT) = conj(Phi_1) * SigOut((n-1)*NIDFNT + 1 : n*NIDFNT);
end

figure();
plot(real(SigOut));
title('菲涅尔变换方法')
% figure;
% [h,w]=freqz(SigOut);
% plot(w,abs(h));
%时域方法
T=0.02;
Npoint=64;
N=64;
t=0:T/Npoint:T-T/Npoint;
k=0;
y=Pilot_MappedData(k+1)*exp(pi/4*1i)*exp(-1i*pi*N/(T^2)*((t-k*T/N).^2));
for k=1:63
   y=y+Pilot_MappedData(k+1)*exp(pi/4*1i)*exp(-1i*pi*N/(T^2)*((t-k*T/N).^2));
end
figure;
plot(real(y));
title('OCDM时域方法')


三、总结

        以上我们分析了OCDM信号的公式,和其特性,和OCDM信号如何MATLAB产生。MATLAB代码非常简单通俗易懂,这也是为将代码转为FPGA做铺垫。下一章将会开始介绍如何用FPGA实现OCDM系统。文章来源地址https://www.toymoban.com/news/detail-772065.html

到了这里,关于通信感知一体化之OCDM产生(MATLAB与FPGA实现)(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机基础一体化教程(习题)

    第一章 1.按照计算机的构成元件,电子计算机应划分为哪几个发展阶段?     一,电子管     二,晶体管     三,中小规模集成电路     四,大规模和超大规模集成电路 2.计算机有什么特点?应用领域有哪些?        计算精度高,计算速度快,存储容量大,自动化。

    2023年04月18日
    浏览(85)
  • “天空地”一体化生态系统监测概念介绍

    “天空地”一体化生态系统监测是综合运用卫星遥感监测、航空遥感监测和地面站点监测等环境监测手段,基于数据挖掘、数据融合、数据协同和数据同化等关键技术,获得更加准确数据支持的立体生态监测感知体系。“天空地”一体化生态监测体系能更为全面地反映生态系

    2024年02月12日
    浏览(47)
  • 医院核心数据库一体化建设实践

    “以数据为核心资源的数字化时代,正在成为引领和推动新一轮科技革命的核心力量,将会深刻影响卫生健康行业。” 这是四月份发布的《公立医院运营管理信息化功能指引》中对数据重要性的描述。数据库作为数据的载体,支撑着整个业务系统,发挥着非常重要的作用,被

    2023年04月24日
    浏览(59)
  • Flutter鸿蒙终端一体化-混沌初开

    点击上方蓝字关注我,知识会给你力量 欲练此功,必先仔细阅读此项目的README文件十遍以上。 flutter_flutter项目,这是我们整个工程的核心,但是很多人都倒在了第一步,其原因,就是——需要使用Dev分支!!! https://gitee.com/openharmony-sig/flutter_flutter/tree/dev/ 当前项目已经支持

    2024年02月21日
    浏览(45)
  • 大数据流批一体化架构设计

    1、当前生产环境因source端数据更改,导致后续计算重新运行情况时有发生,这样不仅牵扯开发精力而且十分消耗资源。 2、现有的数据处理方式不能更好的面向未来日益增多的需求。 3、业务线数据模型混乱,数据使用成本特别高。 4、需求驱动的烟囱式开发,完全没有复用的

    2024年02月14日
    浏览(40)
  • 什么是流批一体化、区块链

    流批一体 大数据厂商喜欢强调的功能特性。就是流式数据处理、离线批量数据处理,实现一体化处理。可能对政务信息化的数据处理效率会有所提升。这个也是个工程概念,估计2-3年就会过时。什么不是工程概念呢?比如数据元和元数据的概念。 再来看看区块链的底层逻辑

    2024年02月02日
    浏览(53)
  • Flutter鸿蒙终端一体化-珠联璧合

    点击上方蓝字关注我,知识会给你力量 在上一篇文章中,我们初步了解了在鸿蒙中使用Flutter的可能性和可用性,还没看过的可以参考下面的链接。 Flutter鸿蒙终端一体化-混沌初开 在文章的最后,我们分析了两种混编模式,和Android、iOS类似,分别是源码依赖和产物依赖,在我

    2024年02月19日
    浏览(48)
  • 数字孪生“光储充”一体化智慧充电站

    近年来,蔚来、理想、特斯拉等电动汽车凭借独特的优势已成为全球消费者的“新宠儿”。随着新能源车保有量迅速增长,充电需求不断上升,充电桩对区域电网的冲击也日益显著。 “光储充”一体化模式,即“光伏+储能+汽车充电”,被视为解决新能源汽车与充电桩发展不

    2024年02月21日
    浏览(39)
  • 重新认识Elasticsearch-一体化矢量搜索引擎

    2023 哪个网络词最热?我投“生成式人工智能”一票。过去一年大家都在拥抱大模型,所有的行业都在做自己的大模型。就像冬日里不来件美拉德色系的服饰就会跟不上时代一样。这不前段时间接入JES,用上好久为碰的RestHighLevelClient包。心血来潮再次访问Elasticsearch官网,发现

    2024年02月02日
    浏览(42)
  • 02.RDO一体化部署OpenStack详细步骤

    Author:Sickey Date:2021-11-24 vim /etc/resolv.conf 如上图,默认已经配置好了 vim /etc/hosts 192.168.233.133 openstackrdo     systemctl stop firewalld systemctl disable firewalld vim /etc/selinux/config       #SELINUX=enforcing  改成  SELINUX=disabled

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包