OCDM产生实数基带信号的四种方法

OCDM产生实数基带信号的四种方法

OCDM

OCDM于2016年提出,全称为:Orthogonal Chirp Division Multiplexing,由一组在时域或频域上重叠的Chirp组成,且每个Chirp相互正交,传输时不会互相干扰,在多径传播中具有更好的鲁棒性。OFDM信号易受多普勒频移的影响,子载波间的正交性被破坏,性能变差。OFDM-Chirp结合了OFDM的频带利用率高和Chirp信号对多普勒频移不敏感的优点。在通信方面,OFDM-Chirp信号解决了传统Chirp信号传输速率低的问题;在雷达目标探测方面,OFDM信号对多普勒频移敏感的问题。但Chirp信号扩频使得信号总带宽增加,从而占用了大量带宽资源。OCDM即是在OFDM-Chirp基础上提出的正交Chirp集的信号。
OCDM系统已用于光通信和水声通信[1-3]。声信号传播速率低,通信机运动问题使得水声信号存在明显的载波频率漂移(CFO),CFO使信号发生频率和相位的偏移,影响水声信号的恢复,降低通信质量。类似于OFDM中IFFT实现载波,OCDM通过逆菲涅尔变换(Inverse Discrete Fresnel Transform, IDFnT)实现子载波。DFnT矩阵形式为:在这里插入图片描述
N取偶数,形式为:
在这里插入图片描述

DFT矩阵为:
在这里插入图片描述
因此,DFnT矩阵是在这里插入图片描述的组合。其中:

在这里插入图片描述

OCDM是一组在相同带宽内相互正交的Chirp信号,第k个Chirp信号可以表示为:
ψ_l (t)=e^j4π e^(-jπ N/T^2  (t-k T/N)^2 )      0≤t<T
基带OCDM信号为:
s(t)=∑_(l=0)^(N-1)▒〖x(l) ψ_l (t) 〗      0≤t<T

OCDM系统基带结构图如下图所示。在发射端,输入数据串并转换后映射为通信符号,然后通过IDFnT矩阵得到OCDM符号。添加循环前缀,并串转换后传输至信道。在接收端,通过串并转换,去除CP,通过DFnT矩阵恢复通信信号,最后经过均衡、解映射和并串转换得到数据。
在这里插入图片描述

时域生成实数方法:

一帧内交替发送实部和虚部;
ζ(x_i )=Q_R R{x_i }+Q_I I{x_i }
Q_R=[■(■(■(1&0)&⋯&0@■(0&0)&⋯&0@■(0&1)&⋯&0)@■(■(0&0)&⋯&0@■(⋮&⋮)&⋯&⋮@■(■(0@0)&■(0@0))&■(⋯@⋯)&■(1@0)))]   Q_I=[■(■(■(0&0)&⋯&0@■(1&0)&⋯&0@■(0&0)&⋯&0)@■(■(0&1)&⋯&0@■(⋮&⋮)&⋯&⋮@■(■(0@0)&■(0@0))&■(⋯@⋯)&■(0@1)))]
一帧内先发送实部后发送虚部;
ζ(x_i )=[■(I_N@0_N )]R{x_i }+[■(0_N@I_N )]I{x_i }
IDFnT前镜像对称(x_i ) ̇=[■(I_N@J_N )] x_i,IDFnT后取响应的值;
ζ(x_i )=[■(I_N&0_N@0_N&0_N )]R{(x_i ) ̇ }+[■(0_N&0_N@J_N&0_N )]I{(x_i ) ̇ }
4)改进DFnT矩阵
将DFnT矩阵前乘和后乘归一化DFT矩阵[2016,OCDM],变成对角矩阵:Γ_M
Γ_M=F_M Φ_M F_M^†=diag{Γ_00,Γ_11,…,Γ_(M-1M-1) }        Γ_kk=e^(-j π/M k^2 )
人为将DFT矩阵中的厄米特对称添加到DFnT矩阵中,能够生成实值OCDM符号,修正后的矩阵表示为:
Γ_(M_HS )=diag{Γ_(HS,00),Γ_(HS,11),…,Γ_(HS,M-1M-1) }        Γ_(HS,kk)={■(e^(-j π/M k^2 ),k≤M/2@e^(j π/M k^2 ),k>M/2)┤
最后逆变换为具有Hermitian对称性的HS-DFnT矩阵:Φ_(M_HS )
Φ_(M_HS )=F_M^† Γ_(M_HS ) F_M

carrier_count=100;
symbols_per_carrier=2;  
bits_per_symbol=4;    
IFFT_bin_length=800;  
PrefixRatio=1/4;  
GI=PrefixRatio*IFFT_bin_length; 
%同步序列
T = 1;  %符号持续时间
fs = 1000;
t = (1:T*fs)/fs;
Kr = 100;
STF = cos(2*pi*100*t+pi*Kr*t.^2);
%bit流----QAM调制----并串转换
baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symbol;
carriers=(1:carrier_count) + (floor(IFFT_bin_length/4) - floor(carrier_count/2)) 
conjugate_carriers=IFFT_bin_length - carriers + 2;
% baseband_out=round(rand(1,baseband_out_length));
baseband_out = ones(1,baseband_out_length);
complex_carrier_matrix=qam16(baseband_out);
complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';
figure(1);
subplot(2,2,1);stem(1:baseband_out_length,baseband_out);ylim([0,1]);xlabel('n');title('发送数据流');
subplot(2,2,2);plot(complex_carrier_matrix,'*r');axis([-4,4,-4,4]);title('16QAM调制后星座图');grid on;

%改进IDFnT矩阵
Phi_1 = zeros(IFFT_bin_length, IFFT_bin_length);
Phi_2 = zeros(IFFT_bin_length, IFFT_bin_length);
for m = 1:IFFT_bin_length
    Phi_1(m,m) = exp(-1j*pi/4) * exp(1j * pi * m^2 / IFFT_bin_length);
    Phi_2(m,m) = exp(1j* pi * m^2 / IFFT_bin_length);
end

IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);   
IFFT_modulation(:,carriers)=complex_carrier_matrix;
% signal_after_idfnt =  IFFT_modulation * conj(Phi_2);
% signal_after_idfnt = ifft(signal_after_idfnt,IFFT_bin_length,2);
% signal_after_idfnt =  signal_after_idfnt  * conj(Phi_1);
%Hermitian
F = exp(1j*2*pi/IFFT_bin_length*(1:IFFT_bin_length)'*(1:IFFT_bin_length));
tmp1H = F.*(conj(Phi_2) .* F .* conj(Phi_1)).*F';
tmp2H = tmp1H;
tmp2H(401:800,401:800) = conj(tmp1H(401:800,401:800));
PhiH = F' .* tmp2H .* F;
signal_after_idfnt_2 = IFFT_modulation * PhiH;
subplot(2,2,3);plot((0:IFFT_bin_length-1)/IFFT_bin_length*T,real(signal_after_idfnt_2(1,:))); 
grid on;ylabel('Amplitude');xlabel('Time');title('一个符号,OCDM时域');
trainingSequence2 = signal_after_idfnt_2(1,:);
save('trainingSequence2.mat','trainingSequence2');
%添加循环前缀
time_wave_matrix = signal_after_idfnt_2;
time_wave_matrix_cp=zeros(symbols_per_carrier,IFFT_bin_length + GI );
for k=1:symbols_per_carrier
    for i=1:IFFT_bin_length
        time_wave_matrix_cp(k,i+GI)=time_wave_matrix(k,i);
    end
    for i=1:GI
        time_wave_matrix_cp(k,i)=time_wave_matrix(k,i+IFFT_bin_length - GI);
    end    
end
%发送至物理信道
T_gap = 0.5;
Tx_data_OCDM=reshape(time_wave_matrix_cp',(symbols_per_carrier)*(IFFT_bin_length+GI) ,1)';
Tx_data = [zeros(1,T_gap*fs),STF,zeros(1,T_gap*fs),Tx_data_OCDM,zeros(1,T_gap*fs),STF];
subplot(2,2,4);plot((1:length(Tx_data))/fs,real(Tx_data));
grid on;ylabel('Amplitude (volts)');xlabel('Time/s');title('OCDM Time Signal')

%==============OCDM信号解调===========================
for i = 1:1000
      Af = Tx_data(1,i:i+1000-1);
      STF_xcor = xcorr(Af,STF);
end
figure;plot(abs(STF_xcor))
[~, ind] = find(STF_xcor == max(STF_xcor));
Rx_data_OCDM = Tx_data(ind+(1.5*fs):ind+(1.5*fs)+symbols_per_carrier*(IFFT_bin_length+GI)-1);
Rx_data_matrix = reshape(Rx_data_OCDM, IFFT_bin_length+GI,symbols_per_carrier).';
Rx_data_complex_matrix = Rx_data_matrix(:,GI + 1:GI + IFFT_bin_length);
改进DFnT
% Rx_tmp =  Rx_data_complex_matrix * Phi_1;
% Rx_tmp = fft(Rx_tmp,IFFT_bin_length,2);
% Y1 =  Rx_tmp*Phi_2;
tmp1 = F' .*(Phi_1 .* F' .* Phi_2).*F;
tmp2 = tmp1;
tmp2(401:800,401:800) = conj(tmp1(401:800,401:800));
Phi = F .* tmp2 .* F';
Y1 = Rx_data_complex_matrix * Phi;
%均衡
% load('trainingSequence.mat');
% Y_trainingSequence = Y1(1,:);
% junheng = trainingSequence./Y_trainingSequence;
% Y1 = Y1 .* junheng;
Rx_carriers = Y1(:,carriers);
%QAM解调
Rx_phase = angle(Rx_carriers);  %计算接收信号的相位特性
Rx_mag = abs(Rx_carriers);     %计算接收信号的幅度特性
[M,N] = pol2cart(Rx_phase,Rx_mag);   %转换极坐标数据为直角坐标数据
Rx_complex_carrier_matrix = complex(M,N);   %两个直角坐标的实数据为构成复数据
figure;plot(Rx_complex_carrier_matrix,'*r'); title('接收数据星座图');grid on;axis([-4,4,-4,4]);title('接收星座图');
%16QAM解调
Rx_serial_complex_symbols = reshape(Rx_complex_carrier_matrix',size(Rx_complex_carrier_matrix,1)*size(Rx_complex_carrier_matrix,2),1)';
%将矩阵Rx_complex_carrier_matrix转换为1的数组
Rx_decoded_binary_symbols = demoduqam16(Rx_serial_complex_symbols);
%进行16QAM解调
baseband_in = Rx_decoded_binary_symbols;
%将解调恢复的二进制信号存放在baseband_in
%误码率计算
bit_errors = find(baseband_in ~= baseband_out);
%解调恢复的二进制信号与发送二进制信号比较,查找误码
bit_error_count = size(bit_errors,2)   %计算误码个数
ber = bit_error_count/baseband_out_length   %计算误码率

OCDM(Objective-C代码混淆)是一种用于iOS应用程序的代码混淆技术,可以增加代码的复杂性和可读性,从而增加应用程序的安全性。 OCDM的完整仿真过程主要包括以下几个步骤: 1. 代码构建:在仿真过程开始之前,需要构建可执行的应用程序代码。这涉及到将源代码编译为二进制文件,以便在后续的混淆过程中进行处理。 2. 符号重命名:在仿真过程中,OCDM首先对代码中的符号进行重命名。符号可以是变量、函数、类名等程序元素的名称。通过对这些符号进行重命名,可以增加代码的复杂性,使其难以理解和逆向工程。 3. 代码混淆:在符号重命名之后,OCDM会通过改变代码结构和流程来进一步混淆代码。这可能包括将逻辑结构改变为难以理解的形式、插入无用的代码段或错误的代码逻辑等。这样的混淆措施可以增加代码的可读性,增加逆向工程的难度。 4. 代码优化:在混淆过程完成后,OCDM还会对代码进行优化,以确保应用程序在运行时的性能不受负面影响。这可能包括移除无用的代码、改进算法效率等。 5. 深度检查:最后,OCDM会对混淆后的代码进行深度检查,以确保代码的正确性和安全性。这可以通过自动化工具或专门的检测技术来完成。 通过以上步骤,OCDM可以对iOS应用程序的代码进行完整的仿真,增加代码的复杂性和可读性,从而增强应用程序的安全性,防止恶意攻击和逆向工程。但需要注意的是,OCDM并不能提供绝对的安全性,仍然需要其他安全措施的配合来保护应用程序的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值