通信感知一体化之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。为什么是线性调频信号呢,我们对其相位\phi(t)=2\pi f_ct+\pi Kt^2对t进行求导可得到,频率f=2\pi f_c+2\pi Kt。就能发现其频率是与时间t是线性相关的。

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

Chirp自相关尖锐特性分析

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

正交的Chirp信号

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

        我们直接看原文公式:

        作者说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线性相关。

 

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

二、OCDM信号的产生

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

菲涅尔逆变换等于 \Phi_1(m) FFT \Phi_2(m) 。

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

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

    


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系统。

  • 18
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 基于离散菲涅耳变换的OC-DM(光码分复用)调制解调技术是一种新兴的光通信调制技术。通过将离散菲涅耳变换与光传输结合起来,可以实现更高的光频带利用率和更低的串扰。在Matlab中,我们可以进行仿真实验来比较4QAM、16QAM和64QAM三种映射方案。 首先,我们需要生成随机的二进制比特流,并将其进行QAM映射得到相应的调制信号。对于4QAM,我们将二进制比特流分成两个一组,并根据映射表将其转换为复数信号。对于16QAM和64QAM,我们分别将二进制比特流分成4个一组和6个一组,并进行相应的映射。其中,复数信号的实部和虚部代表了调制信号的两个维度。 接下来,我们通过离散菲涅耳变换来模拟光信号的传输过程。将调制后的信号进行分段,并对每个分段进行离散菲涅耳变换,得到相应的传输信号。这里需要注意的是,离散菲涅耳变换对信号的精确度要求较高,因此需要使用快速傅里叶变换(FFT)算法来加快计算速度。 最后,我们对传输信号进行解调。通过对离散菲涅耳变换后的信号进行逆变换,得到解调后的信号。然后,对解调后的信号进行判决,将其转换为二进制比特流,并与原始的二进制比特流进行比较。 通过对4QAM、16QAM和64QAM三种映射的比较,我们可以得出不同映射方式对光传输性能的影响。一般来说,映射方式越复杂,对噪声和信道衰减的容忍性越低,但其传输速率也越高。因此,在实际应用中,需要根据具体情况选取合适的映射方案。 ### 回答2: 基于离散菲涅耳变换(Discrete Fresnel Transform,DFT)的OCDM(Optical Code Division Multiplexing)调制解调技术可以实现高效的光纤通信传输。在MATLAB仿真中,我们可以进行4QAM、16QAM和64QAM三种映射模式的比较。 首先,我们需要生成不同调制方式下的调制信号。在4QAM中,我们将信息信号分为两个维度,并通过赋予不同的载波相位和振幅来实现调制。在16QAM和64QAM中,我们需要将信息信号分别分为四个维度和六个维度,并通过赋予不同的载波相位和振幅来实现调制。 接下来,我们将生成的调制信号传输到OCDM系统中,并进行光纤传输过程中的光纤色散补偿。在这个过程中,离散菲涅耳变换将起到关键的作用,可以对信号进行时频域的变换,并实现对传输信号的处理和最佳调制解调。 最后,我们可以对比不同调制方式下的误码率(BER)和传输距离。通过比较4QAM、16QAM和64QAM三种映射模式,我们可以得出不同调制方式下的性能优劣。 在实际的光纤通信应用中,根据实际需求和系统要求,选择合适的调制方式以实现最佳性能是非常重要的。通过MATLAB仿真,在不同条件下进行比较和分析,可以为系统设计和参数优化提供指导,提高光纤通信的传输性能。 ### 回答3: 基于离散菲涅耳变换的OCDM调制解调技术,是一种光纤通信中常用的多用户调制解调技术。在该技术中,使用离散菲涅耳变换对数据进行编码,然后通过光分复用技术将多个编码后的数据混合在一起传输,接收端利用解调技术将混合的数据分离出来,并对每个用户的数据进行解码。 在Matlab仿真中,我们可以采用不同的调制方案,如4QAM、16QAM和64QAM,并进行性能对比。 首先,我们需要生成要传输的数据,并对数据进行离散菲涅耳变换编码。编码后的数据可以通过离散菲涅耳变换的函数实现。 接下来,我们可以以不同的调制方案(4QAM、16QAM和64QAM)对编码后的数据进行调制。调制后的信号可以通过正交调制的方法实现。 然后,在接收端,我们可以对接收到的信号进行解调。解调后的信号可以通过检测和判决的方式实现,以恢复原始编码数据。 最后,我们可以通过比较不同调制方案的误码率和传输容量来评估性能。误码率可以通过计算接收到的数据与原始数据之间的比特错误数来获得,传输容量可以通过计算单位时间内传输的比特数来获得。 总结来说,基于离散菲涅耳变换的OCDM调制解调技术在Matlab仿真中可以使用不同的调制方案,并通过比较误码率和传输容量来评估性能。3种常用的映射方案(4QAM, 16QAM, 64QAM)可以作为性能对比的方案,通常在进行仿真研究时都会对它们进行比较评估。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值