以下是我写的一段代码,不知道对不对,实在是不会,如何添加目标的距离,角度和频率,主要是想复现图片中的这个论文的方法,但是我这段代码fft以后的距离,频率,角度都不对
clc;
clear;
close all;
% 基本参数设置
c = 3e8; %光速
fc=77e9;%载频(Hz)载频越大,传输的信息量越大
lamada= c/fc;
D = lamada/2;
Fs=4e6; %ADC采样率 见配置说明
% FMCW参数
B_valid =4e+09; %带宽
slope=70e12; %调频斜率
tr=B_valid/slope;%chirp周期(Hz)
fr=1/tr;%chirp的频率(Hz)
detaR=c/(2*B_valid);%距离分辨率
numTx = 2; % 发射天线数量
numRx = 4; % 接收天线数量
n_samples = 200; % 快采样点数(每个chirp的采样点数)
numFrames = 1024; % 帧数
numChirpsPerFrame = 2; % 每帧的chirp数量
chirpPeriod = 57; % chirp周期
n_chirps=numFrames*numChirpsPerFrame;
N=256; %距离向FFT点数
M=128; %多普勒向FFT点数
Q = 180; %角度FFT
% 目标1和目标2的位置和角度(单位: m, deg)
%% 目标参数
%距离、振幅、频率
% 目标1参数: 距离, 振动幅度, 频率
target1_dist = 1; % 米
target1_breath_amp = 1; % 呼吸振幅 (米)
target1_heart_amp = 1; % 心跳振幅 (米)
target1_breath_freq = 35; % 呼吸频率 (Hz)
target1_heart_freq = 12; % 心跳频率 (Hz)
% 目标2参数: 距离, 振动幅度, 频率
target2_dist = 3;
target2_breath_amp = 1;
target2_heart_amp =1;
target2_breath_freq=25;
target2_heart_freq=15;
%% 每一个目标的信息按顺序分别为距离(m)、速度(靠近为﹣,远离为+)(m/s)、角度(°)、信噪比 DB;
% 此处的距离是按照第一幅发射天线维坐标原点建立的相对位置
targetnumber= 2;
targetinfoR = [10 30]';
targetinfoV = [0 0]';
targetinfoP = [-30 30]';
signalAmplitude = [20 20]';
% 创建时序向量
% 创建时间轴(假设采样率足够高以满足奈奎斯特准则)
Fs = n_samples * numChirpsPerFrame / chirpPeriod;
t = (0:1/Fs:( n_chirps*n_samples-1)/Fs).';
%% 构造目标到每一副接受天线之间的延时
TXarraydis = [0 4*D]'; %发射天线在坐标轴上的位置
RXarraydis = numTx*numRx*D + [0 : 1 : numRx-1]' * D; %接受天线在坐标轴上的位置
figure;
plot ([TXarraydis; RXarraydis],1, '*b');
for i = 1 : targetnumber %生成目标的TX延时txrtao
txrtao(:,i) = sqrt(repmat(targetinfoR(i)^2 , numTx , 1) + TXarraydis.^2 - 2*targetinfoR(i)*TXarraydis*cosd(90 - targetinfoP(i)))/c;
end
for i = 1 : targetnumber %生成目标的RX延时txrtao
rxrtao(:,i) = sqrt(repmat(targetinfoR(i)^2 , numRx , 1) + RXarraydis.^2 - 2*targetinfoR(i)*RXarraydis*cosd(90 - targetinfoP(i)))/c;
end
% 按照3法4收获取12副接受天线的延时,用于后续构造阵列使用
cnt = 1;
for i=1 : 1 : numTx
for j = 1 : 1 : numRx
tao(cnt,:) = txrtao( i , :) + rxrtao( j,:);
cnt = cnt + 1;
end
end
Rx_signal = zeros(numTx*numRx , n_chirps*n_samples);
for i=1:numTx*numRx
%时延
xt1=2*(target1_breath_amp*sin(2*pi* target1_breath_freq*t)+...
target1_heart_amp*sin(2*pi* target1_heart_freq*t))/c;
xt2= 2*(target2_breath_amp*sin(2*pi* target2_breath_freq*t)+...
target2_heart_amp*sin(2*pi* target2_heart_freq*t))/c;
xt=[xt1;xt2];
delay_target_1=tao(i,1)+xt1 ;
delay_target_2=tao(i,2)+ xt2;
targe_1_signal=sin(2*pi*(fc*(t-delay_target_1)+0.5*slope*(t-delay_target_1).^2));
targe_2_signal=sin(2*pi*(fc*(t-delay_target_2)+0.5*slope*(t-delay_target_2).^2));
Rx_signal(i,:)=targe_1_signal+targe_2_signal;
end
%%数据重组
Mixing_signal = reshape(cdata,n_samples,n_chirps,4);
%% 3维FFT处理
%距离FFT
range_win = hamming(n_samples); %加海明窗
doppler_win = hamming(n_chirps);
range_profile = [];
for k=1:numRx
for m=1:n_chirps
temp=Mixing_signal(:,m,k).*range_win; %加窗函数
temp_fft=fft(temp,N); %对每个chirp做N点FFT
range_profile(:,m,k)=temp_fft;
end
end
%多普勒FFT
speed_profile = [];
for k=1:numRx
for n=1:N
temp=range_profile(n,:,k).*(doppler_win)';
temp_fft=fftshift(fft(temp,M)); %对rangeFFT结果进行M点FFT
speed_profile(n,:,k)=temp_fft;
end
end
signal_AD=speed_profile(:,:,1);
% 画图
Y_1=[0 40];
X_1=[0 4];
figure;
imagesc(X_1,Y_1,20*log10(abs(signal_AD)));