脉冲压缩,相干积累,MTI,CFAR详解

更新时间:2024-01-26 04:40:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MATLAB雷达数据处理:脉冲压缩,相干积累,MTI,CFAR详解

2014-05-14 21:42:29| 分类: 雷达信号处理 | 标签:雷达数据仿真 动目标检测 脉压 恒虚警率 |字号 订阅

% Thanks to M. A. Richards for providing the code. clear, hold off format compact J = sqrt(-1); close all

% Get root file name for reading results file=input('Enter root file name for data file: ','s'); eval(['load ',file,'.mat'])

fprintf('\\nPulse length = %g microseconds\\n',T/1e-6) fprintf('Chirp bandwidth = %g Mhz\\n',W/1e6) fprintf('Sampling rate = %g Msamples/sec\\n',fs/1e6) figure

plot((1e6/fs)*(0:length(s)-1),[real(s) imag(s)]) title('Real and Imaginary Parts of Chirp Pulse') xlabel('time (usec)') ylabel('amplitude') grid PRI = 1/PRF;

fprintf('\\nWe are simulating %g pulses at an RF of %g GHz',Np,fc/1e9) fprintf('\\nand a PRF of %g kHz, giving a PRI of %g usec.',PRF/1e3,PRI/1e-6) fprintf('\\nThe range window limits are %g to %g usec.\\n', ... T_out(1)/1e-6,T_out(2)/1e-6)

% Compute unambiguous Doppler interval in m/sec % Compute unambiguous range interval in meters vua = 3e8*PRF/(2*fc); rmin = 3e8*T_out(1)/2; rmax = 3e8*T_out(2)/2; rwin = rmax-rmin; rua = 3e8/2/PRF;

fprintf('\\nThe unambiguous velocity interval is %g m/s.',vua) fprintf('\\nThe range window starts at %g km.',rmin/1e3) fprintf('\\nThe range window ends at %g km.',rmax/1e3) fprintf('\\nThe sampled range window is %g km long.',rwin/1e3) fprintf('\\nThe unambiguous range interval is %g km.\\n\\n',rua/1e3)

% Convert range samples to absolute range units. [My,Ny]=size(y);

range=(3e8/2)*((0:My-1)*(1/fs) + T_out(1))/1e3; % T_out(1) 是接收窗的起始时刻,即range从多远的距离开始观测 pulse = (1:Ny);

% Force oversize FFT, and compute doppler scale factor Lfft = 2^(nextpow2(Ny)+3); % Lfft是慢时间上FFT的点数

doppler = (((0:Lfft-1)/Lfft)-0.5)*vua; %此处的 doppler表征的是速度,不是fd = 2v / lambda这个定义式

fprintf('\\nThe Doppler increment is %g Hz.',PRF/Lfft)

fprintf('\\nThe velocity increment is %g m/s.',3e8*PRF/Lfft/2/fc)

% Start with a few plots to examine the data

% plot power of raw data in dB

ydB=db(abs(y)/max(max(abs(y))),'voltage'); figure

mesh(pulse,range,ydB)

title('FAST-TIME/SLOW-TIME PLOT OF RAW DATA') ylabel('range (km)') xlabel('pulse number')

% Plot overlay of individual range traces disp(' ') disp(' ')

disp('...plotting overlay of range traces') figure

plot(range,db(y,'voltage'))

title('OVERLAY OF RANGE TRACES') xlabel('distance (km)') ylabel('amplitude (dB)') grid

% Noncoherently integrate the range traces and display disp('...plotting integrated range trace') figure

plot(range,db(sum((abs(y).^2)')','power')) %看看功率的非相干积累 title('NONCOHERENTLY INTEGRATED RANGE TRACE') xlabel('range bin') ylabel('power') grid

% Doppler process and square-law detect the whole % unprocessed array and display mesh. % Use Hamming window throughout. disp('...computing raw range-Doppler map')

% 下句效果和Y=fft(conj(y').*(hamming(Ny)*ones(1,My)),Lfft,1); 一样。dim = 1 表示沿着列做fft

Y=fft(conj(y').*(hamming(Ny)*ones(1,My)),Lfft); %y‘是20-by-337的,对y’的慢时间维(按列)做Lfft点FFT,进行相干积累

% Y= fftshift(Y.*conj(Y),1); 的效果与Y=git_rotate(Y.*conj(Y),Lfft/2); 完全相同,git_rotate是将矩阵的上下循环移位

Y=git_rotate(Y.*conj(Y),Lfft/2); % note we take mag-squared of Y here also 注意Y是做完相干积累后才取模平方的

YdB=db(abs(Y),'power'); figure

mesh(doppler,range,YdB')

Since I used the DFT(K points) to perform the Doppler analysis, bin #0 (#1 in MATLAB indexing) corresponds to zero Doppler shift, while each successive bin represents an increment of PRF/K Hz.I used a modest DFT size of 256 to get adequate Doppler definition, the corresponding increment in velocity is (lambda*PRF/2/K) m/s per FFT bin.

The DFT causes the target energy to concentrate along the frequency axis; a target signal that was a sinusoid across all 20 slow time samples and was lost among the noise and clutter is now an asinc function peaking at the appropriate Doppler shift. The asinc is still fairly “fat” simply because I have only 20 slow-time samples, which limits the Doppler resolution. The noise remains spread out across all of the range and velocity bins. The clutter is now a clearly

evident concentration of energy around zero velocity, extending through all of the range bins.

Note also that the four targets are now clearly visible. Each is in the form of a “hump” of energy extending across 1.5 km of range. This is because I have not yet done pulse compression. The signal from a target on a given pulse is just an echo of my transmitted pulse, which was 10 ?s long. This is equivalent to (c/2)(10 ?s) = 1.5 km.

title('RANGE-DOPPLER PLOT OF UNPROCESSED DATA') ylabel('range (km)') xlabel('velocity (m/s)')

levels=(max(YdB(:))+[-1 -5 -10 -15 -20 -25 -30]); figure

contour(doppler,range,YdB',levels)

title('RANGE-DOPPLER CONTOUR PLOT OF UNPROCESSED DATA') ylabel('range (km)') xlabel('velocity (m/s)') grid

% Now start processing the data ...

% Pulse compression first. Use time-domain Hamming weighting of the % impulse response for range sidelobe control Ls = length(s); % Ls = 120

disp('...performing matched filtering')

h = conj( s(Ls:-1:1) ); % 接收信号的时域匹配滤波器: h(t) = conj( s(-t) ),注意我以前不会序列的反转如何实现

h = h.*hamming(length(h)); % time-domain Hamming window for range sidelobe control

yp = zeros(My+length(h)-1,Ny); % My+length(h)-1 是一个脉冲宽度内的My点的chirp回波信号与h(n)卷积结果的数据长度

for i=1:Ny % Ny是一个CPI中包含的脉冲个数,对每个脉冲做匹配滤波 yp(:,i) = conv(h,y(:,i)); end

[Myp,Nyp]=size(yp); % yp大小为456-by-20

% yp = fftfilt( h, y ); % using fftfilt instead of conv because it filters

% 注意yp=fftfilt(h,y)的结果与yp = conv(h,y)的前length(yp)点相同!此处匹配滤波要的是conv(h,y)的后面的值

%因此fftfilt在这里并不能得到需要的结果,fftfilt和conv的比较见最后! %y1 = fftfilt(b,x); % using fftfilt

%y2 = conv(b,x,'full'); y2=y2(1:length(y1));

% % multiple columns with one call

本文来源:https://www.bwwdw.com/article/8mzw.html

Top