几种OFDM雷达感知参数估计方法的MATLAB实现 您所在的位置:网站首页 fig-al00参数 几种OFDM雷达感知参数估计方法的MATLAB实现

几种OFDM雷达感知参数估计方法的MATLAB实现

2023-04-13 10:25| 来源: 网络整理| 查看: 265

摘要:本文简单介绍了几种用于通感一体化系统的OFDM雷达感知算法,用于测量目标的距离和径向速度,并给出了MATLAB代码。下面链接指向本文的Github仓库。

通感一体化OFDM雷达系统模型

令发射符号为 S_{m,n} , 其中S_{m,n} 为调制后的通信符号,此处为QAM符号。OFDM系统的子载波间隔为 \Delta f ,OFDM符号的有效长度为 T=\frac{1}{\Delta f} , 则OFDM符号的长度为 T_{s}=T+T_{CP} ,其中 T_{CP} 为循环前缀长度。

基于上面的表述,发射信号可以表示为:

s(t)=\sum_{n=0}^{N-1}\sum_{m=0}^{M-1}S_{m,n}e^{j2\pi m \Delta f(t-nT_s)}\mathrm{rect}(\frac{t-nT_s}{T})+\sum_{n=0}^{N-1}\sum_{m=0}^{M-1}S_{m.n}e^{j2\pi \Delta f(t-nT_s+T)}\mathrm{rect}(\frac{t-nT_s+T_{CP}}{T_{CP}})

其中等式右边的第一部分为OFDM有效码元,第二部分为循环前缀。

发射信号在感知信道中收到时延和多普勒效应的影响,假设发射端和接收端时钟信号完美同步,所以接受信号可以表示为:

r(t)=\beta s(t-\tau)e^{j2\pi \nu(t-\tau)}+n(t)

其中 \beta 为信道增益,包含路径损耗、散射损耗等因素, n(t) 为接收噪声,这里令其为高斯白噪声。 \tau 为信道时延, \nu 为多普勒频率,且满足:

\tau=\frac{2R}{c},\nu=\frac{2v}{\lambda}

R 为目标距离, v 为目标的径向速度, c 为光速, \lambda 为电磁波波长。

经过采样和去CP和FFT操作后,可以得到接收矩阵 \mathbf{R} ,推导可得,其元素满足:

\mathbf{R}_{m,n}=\tilde\beta S_{m,n}e^{-j2\pi\Delta f\tau m}e^{j2\pi\nu T_s n} +\omega_{m,n} ,

其中 \tilde\beta=\beta e^{-j2\pi\nu\tau}, \omega_{m,n} 为经过处理后的白噪声,由于FFT是酉变换,故其也可以近似看作为白噪声。

大部分算法都是对接收矩阵 \mathbf{R} 的数据进行处理,下面介绍几种参数估计算法。

基于2D-FFT的方法[1]

显然,对 \mathbf{R} 做逐元素除法,即可消除 S_{m,n} 的影响, \mathbf{R} 中的有用信号就变为了一个二维复指数信号,参数估计问题也变为了复指数信号的频率估计问题。对 \mathbf{R} 在子载波域上做IFFT,在时域上做FFT,并寻找峰值,其行列序号则对应了目标的距离和径向速度。这种一种很简单很经典的方法。

也可以对 \mathbf{R} 与 S_{m,n} 做逐元素乘法,再进行后续操作。这样做就等效于互相关运算,当 S_{m,n} 足够随机时,也可以实现较好的感知效果。

基于CCC(Cyclic Cross Correlation)的方法[2]

不同于基于2DFFT的方法,CCC并没有直接按上面的方法得到接受矩阵,而是直接用发射信号和接收信号按时间分组做互相关。这是一个较为新颖的方法,具体操作可以参考[2]。

基于超分辨率估计的方法

由于前面说过,参数估计问题可以看作是复指数信号频率估计的问题,由于基于FFT的方法收到瑞丽限的影响,分辨率并不理想,故可以考虑超分辨率算法以突破瑞丽限,使估计性能接近CRLB。本文代码采用了TLS-ESPRITMUSIC算法实现超分辨率估计。

主程序代码:

%% A comparison of OFDM Radar signal processing methods % Description: This project compares some classical sensing algorithm. % Algorithms in this project: % % 1. 2DFFT % 2. Cyclic Cross Correlation % 3. Super Resolution Estimation: MUSIC and TLS-ESPRIT % % Author: Yunbo HU (SIMIT, UCAS) % GitHub: https://github.com/edenhu1111 clc; clear; addpath('fig'); global c0 fc lambda M N delta_f Ts CPsize %% ISAC Transmitter % System parameters c0 = 3e+8; % velocity of light fc = 30e+9; % carrier frequency lambda = c0 / fc; % wavelength M = 1024; % number of subcarriers N = 15; % number of symbols per subframe delta_f = 120e+3; % subcarrier spacing T = 1 / delta_f; % symbol duration Tcp = T / 4; % cyclic prefix duration Ts = T + Tcp; % total symbol duration CPsize = M / 4; % cyclic prefix length bitsPerSymbol = 2; % bits per symbol qam = 2^(bitsPerSymbol); % 16-QAM modulation % Transmit data data = randi([0 qam - 1], M, N); TxData = qammod(data, qam, 'gray'); % OFDM modulator TxSignal = ifft(TxData, M); % IFFT TxSignal_cp = [TxSignal(M - CPsize + 1: M, :); TxSignal]; % add CP TxSignal_cp = reshape(TxSignal_cp, [], 1); % time-domain transmit signal %% Channel % Sensing Data Generation SNR = 30; r = [30]; % range.(it can be a row vector) v = [20]; %velocity RxSignal = sensingSignalGen(TxSignal_cp, r,v,SNR); k = length(r); %% OFDM Radar Receivers % 1. 2DFFT based (classical method, reference is omitted here) Rx = RxSignal(1:size(TxSignal_cp,1),:); Rx = reshape(Rx,[],N); Rx = Rx(CPsize + 1 : M + CPsize,:); % remove CP and reshape it into a matrix Rx_dem = fft(Rx,M); CIM_2dfft = Rx_dem .* conj(TxData); %elementwise-multiply(equals to match filtering) RDM_2dfft = fft(ifft(CIM_2dfft,M).',10*N); % plot the range doppler map figure(1); range_2dfft = linspace(0,c0/(2*delta_f),M+1); range_2dfft = range_2dfft(1:M); velocity_2dfft = linspace(0,lambda/2/Ts,10*N+1); velocity_2dfft = velocity_2dfft(1:10*N); [X,Y] = meshgrid(range_2dfft,velocity_2dfft); RDM_2dfft_norm = 10*log10( abs(RDM_2dfft)/max(abs(RDM_2dfft),[],'all')); % Maximized Likelihood Estimation(In theory) mesh(X,Y,(RDM_2dfft_norm)); title('2D-FFT based method'); xlabel('range(m)'); ylabel('velocity(m/s)'); savefig('fig/figure1.fig'); % 2. CCC-based (Method proposed by Kai Wu et al.) figure(2); % setting parameters for CCC-based sensing method % please refer to the paper for the meaning of these paramaters mildM = 512; Qbar = 64; mildQ = 128; % CCC [r_cc,RDM] = cccSensing(RxSignal,TxSignal_cp,mildM,Qbar,mildQ); % ccc sensing %plot the range doppler map Tsa = 1/delta_f/M; mildN = floor((length(TxSignal_cp)-Qbar-mildQ)/(mildM - Qbar)); range_ccc = linspace(0,c0/2*Tsa*mildM, mildM+1); doppler_ccc = linspace(0,lambda/(mildM-Qbar)/Tsa/2,10*mildN+1); range_ccc = range_ccc(1:mildM); doppler_ccc = doppler_ccc(1:10*mildN); RDM_norm = 10*log10(abs(RDM)/max(abs(RDM),[],'all')); [X,Y] = meshgrid(range_ccc,doppler_ccc); mesh(X,Y,(RDM_norm)); % plot the range-doppler map title('CCC based method'); xlabel('range(m)'); ylabel('velocity(m/s)'); savefig('fig/figure2.fig'); % 3. Super resolution sensing method % 3.1 MUSIC based (a time consuming but precise method) CIM = Rx_dem .*conj(TxData); [P_music_range,P_music_velo] = MUSICforOFDMsensing(CIM,k); % plot the MUSIC power spectrum figure(3); title('MUSIC for OFDM sensing'); subplot(1,2,1); plot(linspace(0,100,length(P_music_range)),abs(P_music_range)/max(abs(P_music_range))); ylabel('Pmusic'); xlabel('range(m)'); ylim([10^-3,1]); title('MUSIC for range estimation'); subplot(1,2,2); plot(linspace(0,100,M),abs(P_music_velo)/max(abs(P_music_velo))); ylabel('Pmusic'); xlabel('velocity(m/s)'); ylim([10^-3,1]); title('MUSIC for velocity estimation'); savefig('fig/figure3.fig'); % 3.2 ESPRIT based method [range,velocity] = ESPRITforOFDMsensing(CIM,k); fprintf('The estimation result of TLS-ESPRIT is :\n'); fprintf('Range = %f\n',range); fprintf('Velocity = %f\n',velocity);

仿真接收信号生成代码:

%% Sensing Channel Generation % Description: Generating a simulated time shifted and doppler modulaed % signal. % TxSignal_cp: transmit signal % % range: target range. When it is a row vector, it indicated that there are % more than one target; % % velocity:target relative velocity. Its size should be the same as "range" % % SNR: Signal-to-noise Ratio % % Author: Yunbo HU (SIMIT, UCAS) % GitHub: https://github.com/edenhu1111 %% Code function RxSignal = sensingSignalGen(TxSignal_cp,range,velocity,SNR) global c0 lambda M delta_f delay = 2 * range / c0; h_gain = exp(1j*2*pi*rand(size(delay))); doppler = 2*velocity/lambda; % max_delay = max(delay,[],'all'); % RxSignal = zeros(size(TxSignal_cp,1) + max_delay,1); RxSignal = zeros(size(TxSignal_cp,1) ,1); d = zeros(size(TxSignal_cp)); for p = 1:length(delay) ii = 0:length(d)-1; d = exp(1j*2*pi*doppler(p)*ii'/(delta_f*M)); tau = exp(-1j*2*pi*delay(p)*delta_f*M/length(d)*ii'); % RxSignal = RxSignal + h_gain(p) * ... % [zeros(delay(p),1);... % TxSignal_cp .* d... % ;zeros(max_delay-delay(p),1)]; RxSignal = RxSignal + h_gain(p)*ifft(fft(TxSignal_cp.*d).*tau); end RxSignal = RxSignal + 10^(-SNR/10)*(randn(size(RxSignal)) + 1j*randn(size(RxSignal)))/sqrt(2); end

CCC算法:

%% Cycle Cross-Correlation based sensing algorithm % RxSignal: Received sensing signal (column vector, only in time domain) % % TxSignal_cp: Transmitted signal (only in time domain) % % mildM: number of data per sub-block % % Qbar: number of overlapped data between adjacent sub-blocks % % mildQ: length of VCP(Virtual Cyclic Prefix) % Code Author: Yunbo HU % GitHub: https://github.com/edenhu1111 % Reference: K. Wu, J. A. Zhang, X. Huang, and Y. J. Guo, %¡®Integrating Low-Complexity and Flexible Sensing Into Communication Systems¡¯, % IEEE Journal on Selected Areas in Communications function [r_cc,RDM] = cccSensing(RxSignal,TxSignal_cp,mildM,Qbar,mildQ) % regrouping original received signal % adjcent groups overlap Qbar points mildN = floor((length(TxSignal_cp)-Qbar-mildQ)/(mildM - Qbar)); Rx_sub = zeros(mildM,mildN); Tx_sub = zeros(size(Rx_sub)); for ii = 0:size(Rx_sub,2)-1 Rx_sub(:,ii+1) = RxSignal(ii*(mildM-Qbar)+1 : ii*(mildM-Qbar)+mildM ,:); Tx_sub(:,ii+1) = TxSignal_cp(ii*(mildM-Qbar)+1 : ii*(mildM-Qbar)+mildM,:); end % add VCP for ii = 0:size(Rx_sub,2)-1 Rx_sub(1:mildQ,ii+1) = Rx_sub(1:mildQ,ii+1) + RxSignal(ii*(mildM-Qbar)+mildM+1 : ii*(mildM-Qbar)+mildM+mildQ); end % Cross Correlation r_cc = ifft( fft(Rx_sub) .* conj(fft(Tx_sub)) ); RDM = fft(r_cc.',10*mildN); end

MUSIC算法:

%% MUSIC for OFDM sensing % CIM: Input channel information matrix(pre-processed by known transmitted symbols) % k:target number % Author: Yunbo HU(SIMIT, UCAS) % GitHub: https://github.com/edenhu1111 function [P_music_range,P_music_velo] = MUSICforOFDMsensing(CIM,k) global M N c0 delta_f lambda Ts %% range estimation R_range = CIM*CIM'/N; [V,D]=eig(R_range); [~,ind_D] = sort(diag(D),'descend'); U_n = V(:,ind_D(k+1:end)); delay = linspace(0,2*100/c0*delta_f,M); ii = 0:M-1; A = exp(-1j*2*pi*kron(ii',delay)); P_music_range = zeros(size(A,2),1); for jj = 1:size(A,2) P_music_range(jj) = 1/(A(:,jj)'*(U_n*U_n')*A(:,jj)); end %% Velocity Estimation R_dop = CIM.'*conj(CIM)/M; [V,D]=eig(R_dop); [~,ind_D] = sort(diag(D),'descend'); U_n = V(:,ind_D(k+1:end)); doppler = linspace(0,2*100/lambda*Ts,M); ii = 0:N-1; A = exp(1j*2*pi*kron(ii',doppler)); P_music_velo = zeros(size(A,2),1); for jj = 1:size(A,2) P_music_velo(jj) = 1/(A(:,jj)'*(U_n*U_n')*A(:,jj)); end end

TLS-ESPRIT:

%% ESPRIT for OFDM sensing % CIM: Input channel information matrix(pre-processed by known transmitted symbols) % k:target number % Author: Yunbo HU(SIMIT, UCAS) % GitHub: https://github.com/edenhu1111 function [range,velocity] = ESPRITforOFDMsensing(CIM,k) global lambda delta_f c0 Ts [M,N] = size(CIM); %% range estimation z = [CIM(1:M-1,:);CIM(2:M ,:)]; R_zz = z*z'/N; [U,~,~] = svd(R_zz); Es = U(:,1:k); Esx = Es(1:M-1,:); Esy = Es(M:end,:); EE = [Esx,Esy]; [F,~,~] = svd(EE'*EE); F = F(:,end-k+1:end); F1 = F(1:k,:); F2 = F(k+1:2*k,:); psi = -F1*inv(F2); [~,D] = eig(psi); phi = angle(diag(D)); phi(phi>0) = phi(phi>0) - 2*pi; tau = -phi/(2*pi*delta_f); range = tau*c0/2; %% doppler estimation z = [CIM(:,1:N-1),CIM(:,2:N)]; R_zz = z.'*conj(z)/M; [U,~,~] = svd(R_zz); Es = U(:,1:k); Esx = Es(1:N-1,:); Esy = Es(N:end,:); EE = [Esx,Esy]; [F,~,~] = svd(EE'*EE); F = F(:,end-k+1:end); F1 = F(1:k,:); F2 = F(k+1:2*k,:); psi = -F1*inv(F2); [~,D] = eig(psi); phi = angle(diag(D)); phi(phi


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有