Error using mfsk waveform for multiple target detection

1 次查看(过去 30 天)
Hi I am trying to simulate mfsk waveform for multiple targets and I am getting "Array exceeds maximum array size preference" error. The thing is, before I didnot use to get this error while working with mfsk waveform for 5 targets. There is something wrong in input parameters of mfsk waveform. Can someone tell me what bandwidth, sample rate, frequency offset should be fine?
clear all;
rng(2015);
%[fmcwwaveform,target,tgtmotion,channel,transmitter,receiver,...
% sensormotion,c,fc,lambda,fs,maxbeatfreq] = helperMFSKSystemSetup;
% System parameter
fc = 24e9; % operating frequency
c = 3e8; % propagation speed
lambda = c/fc; % wavelength
tm = 0.001; % sweep time
bw = 240e6; % range resolution
range_res = bw2range(bw,c); % bandwidth
sweep_slope = bw/tm; % sweep slope
range_max = 100;
fr_max = range2beat(range_max,sweep_slope,c);
v_max = 75;
fd_max = speed2dop(2*v_max,lambda);
fb_max = fr_max+fd_max;
fs = max(2*fb_max,bw);
% fmcwwaveform = phased.FMCWWaveform('SweepTime',tm,'SweepBandwidth',bw,...
% 'SampleRate',fs,'SweepDirection','Triangle');
car1_dist = 10;
car1_speed = 10;
car1_rcs = db2pow(min(10*log10(car1_dist)+5,20));
car2_dist = 25;
car2_speed = 20;
car2_rcs = db2pow(min(10*log10(car2_dist)+5,20));
car3_dist = 40;
car3_speed = 30;
car3_rcs = db2pow(min(10*log10(car3_dist)+5,20));
car4_dist = 60;
car4_speed = 40;
car4_rcs = db2pow(min(10*log10(car4_dist)+5,20));
car5_dist = 80;
car5_speed = 50;
car5_rcs = db2pow(min(10*log10(car5_dist)+5,20));
% truck_dist = 85;
% truck_speed = 25;
% truck_rcs = db2pow(min(10*log10(truck_dist)+5,20));
tgtpos = [[car1_dist;0;0],[car2_dist;0;0],[car3_dist;0;0],[car4_dist;0;0],[car5_dist;0;0]];%,[truck_dist;0;0]];
tgtvel = [[car1_speed;0;0],[car2_speed;0;0],[car3_speed;0;0],[car4_speed;0;0],[car5_speed;0;0]];%,[truck_speed;0;0]];
tgtmotion = phased.Platform('InitialPosition',tgtpos,'Velocity',tgtvel);
tgtrcs = [car1_rcs,car2_rcs,car3_rcs,car4_rcs,car5_rcs];%,truck_rcs];
target = phased.RadarTarget('MeanRCS',tgtrcs,'PropagationSpeed',c,...
'OperatingFrequency',fc);
channel = phased.FreeSpace('PropagationSpeed',c,...
'OperatingFrequency',fc,'SampleRate',fs,'TwoWayPropagation',true);
ant_aperture = 6.06e-4; % in square meter
ant_gain = aperture2gain(ant_aperture,lambda); % in dB
tx_ppower = 100*db2pow(5)*1e-3; % in watts
tx_gain = 9+ant_gain; % in dB
rx_gain = 15+ant_gain; % in dB
rx_nf = 4.5; % in dB
transmitter = phased.Transmitter('PeakPower',tx_ppower,'Gain',tx_gain);
receiver = phased.ReceiverPreamp('Gain',rx_gain,'NoiseFigure',rx_nf,...
'SampleRate',fs);
radar_speed = 0;
sensormotion = phased.Platform('Velocity',[radar_speed;0;0]);
mfskwaveform = phased.MFSKWaveform(... %bw=240e6;fs=150e6;tm=0.001
'SampleRate',5*fs,...
'SweepBandwidth',bw,...
'StepTime',tm,...
'StepsPerSweep',512,...
'FrequencyOffset',-468750,...
'OutputFormat','Sweeps',...
'NumSweeps',1);
show(mfskwaveform())
%%spectrograph%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numsamp_step = round(mfskwaveform.SampleRate*mfskwaveform.StepTime);
sig_display = mfskwaveform();
spectrogram(sig_display(1:8192),kaiser(3*numsamp_step,100),...
ceil(2*numsamp_step),linspace(0,4e6,2048),mfskwaveform.SampleRate,...
'yaxis','reassigned','minthreshold',-60)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nsweep = 1;
%release(channel);
channel.SampleRate = mfskwaveform.SampleRate;
%release(receiver);
receiver.SampleRate = mfskwaveform.SampleRate;
xr = helperFMCWSimulate(Nsweep,mfskwaveform,sensormotion,tgtmotion,...
transmitter,channel,target,receiver);
x_dechirp = reshape(xr(numsamp_step:numsamp_step:end),2,[]).';
fs_dechirp = 1/(2*mfskwaveform.StepTime);
xf_dechirp = fft(x_dechirp);
num_xf_samp = size(xf_dechirp,1);
beatfreq_vec = (0:num_xf_samp-1).'/num_xf_samp*fs_dechirp;
%clf;
subplot(211),plot(beatfreq_vec/1e3,abs(xf_dechirp(:,1)));grid on;
ylabel('Magnitude');
title('Frequency spectrum for sweep 1');
subplot(212),plot(beatfreq_vec/1e3,abs(xf_dechirp(:,2)));grid on;
ylabel('Magnitude');
title('Frequency spectrum for sweep 2');
xlabel('Frequency (kHz)')
cfar = phased.CFARDetector('ProbabilityFalseAlarm',1e-2,...
'NumTrainingCells',8);
peakidx = cfar(abs(xf_dechirp(:,1)),1:num_xf_samp);
Fbeat = beatfreq_vec(peakidx);
phi = angle(xf_dechirp(peakidx,2))-angle(xf_dechirp(peakidx,1));
sweep_slope = mfskwaveform.SweepBandwidth/...
(mfskwaveform.StepsPerSweep*mfskwaveform.StepTime);
temp = ...
[1 sweep_slope;mfskwaveform.StepTime mfskwaveform.FrequencyOffset]\...
[Fbeat phi/(2*pi)].';
r_est = c*temp(2,:)/2
v_est = lambda*temp(1,:)/(-2)

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Detection, Range and Doppler Estimation 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by