資源簡介
雷達信號處理程序,包括線性調頻,匹配濾波,產生目標回波加噪聲,回波積累,時域脈壓,頻域脈壓,加窗脈壓,相干積累,mti對消,mtd檢測,cfar檢測,歡迎下載
代碼片段和文件信息
function?y=maiya(PulseNumberrangeFsTargetVelocitySNR)
C=3e8;
Tr=800e-6;%單脈沖最大可測距離0.5*Tr*C=120000m
Tp=160e-6;
fr=1/Tr;
lamda=0.03;
B=1e6;
%%?產生線性調頻信號?
number=fix(Fs*Tp);%單脈沖發射信號內采樣點數
SampleNumber=fix(Fs*Tr);%一個脈沖采樣點數800;則每個采樣間距代表120000/799m
TotalNumber=SampleNumber*PulseNumber;
for?i=-fix(number/2):fix(number/2)-1
????Chirp(i+fix(number/2)+1)=exp(j*(pi*(B/Tp)*(i/(Fs))^2));?
end??
figure
plot(real(Chirp));
title(‘線性調頻信號‘)
coeff=conj(fliplr(Chirp));%匹配濾波函數h
figure
plot(real(coeff))
title(‘匹配濾波函數h‘)
W?=?linspace(-pipi4096);????
[h1w0]?=?freqz(coeff1W);??
figure
plot(w0/pi20*log10(abs(h1/max(h1))));?
title(‘匹配濾波函數H頻率響應‘)
%-------
%%?產生目標回波
TargetDistance(1:2)=range;
DelayNumber(1:2)=fix(Fs*2*TargetDistance(1:2)/C);
TargetFd(1:2)=2*TargetVelocity(1:2)/lamda;?%計算目標多卜勒
SignalAll=zeros(1TotalNumber);%所有脈沖的信號先填0
for?k=1:2%?依次產生各個目標1?2?
????SignalTemp=zeros(1SampleNumber);%?一個脈沖
???
????SignalTemp(DelayNumber(k)+1:DelayNumber(k)+number)=(10^(SNR(k)/10))*Chirp;??%一個脈沖的1個目標(未加多普勒速度)
????Signal=zeros(1TotalNumber);
????for?i=1:PulseNumber
????????Signal((i-1)*SampleNumber+1:i*SampleNumber)=SignalTemp;
????end
????FreqMove=exp(j*2*pi*TargetFd(k)*(0:TotalNumber-1)/Fs);%目標的多普勒速度*時間=目標的多普勒相移
????Signal=Signal.*FreqMove;
????SignalAll=SignalAll+Signal;
end
figure
subplot(211);plot(real(SignalAll)‘r-‘);title(‘目標信號的實部‘);grid?on;zoom?on;
subplot(212);plot(imag(SignalAll));title(‘目標信號的虛部‘);
grid?on;zoom?on;
%%?產生噪聲
SystemNoise=normrnd(010^(-12/10)1TotalNumber)+j*normrnd(010^(-12/10)1TotalNumber);
%%?回波+噪聲
Echo=SignalAll+SystemNoise;???%?+SeaClutter+TerraClutter;
for?i=1:PulseNumber???%在接收機閉鎖期接收的回波為0
????Echo((i-1)*SampleNumber+1:(i-1)*SampleNumber+number)=0;
end
figure
plot(real(Echo));title(‘總回波信號的實部閉鎖期為0‘);
%subplot(212);plot(imag(Echo));title(‘總回波信號的虛部閉鎖期為0‘);
%%?回波積累
Echoplus=zeros(1SampleNumber);
for?i=1:PulseNumber
???Echoplus1(1:SampleNumber)=Echo((i-1)*SampleNumber+1:i*SampleNumber);
???Echoplus=Echoplus+Echoplus1(1:SampleNumber);
end
Echoplus=Echoplus/PulseNumber;
figure
plot(real(Echoplus));title(‘回波脈沖積累信號的實部閉鎖期為0‘);
%%?時域脈壓
pc_time0=conv(Echocoeff);
%figure
%plot(abs(pc_time0));title(‘時域脈壓結果的幅度有暫態點‘);
%%?頻域脈壓
Echo_fft=fft(EchoTotalNumber+number-1);%進行TotalNumber+number-1點FFT
coeff_fft=fft(coeffTotalNumber+number-1);
pc_fft=Echo_fft.*coeff_fft;
pc_freq0=ifft(pc_fft);
pc_freq_abs=abs(pc_freq0);
figure
plot(pc_freq_abs);title(‘(不加窗)頻域脈壓結果的幅度(有暫態點)‘);
%%??數據重排到距離門
pc_freq1=pc_freq0(number:TotalNumber+number-1);
for?i=1:PulseNumber
???pc(i1:SampleNumber)=pc_freq1((i-1)*SampleNumber+1:i*SampleNumber);
end
figure
%subplot(211)
%plot((0:SampleNumber-1)*(120000/(SampleNumber-1))?abs(pc(5:))?);
%?title(‘不加窗脈壓結果‘);xlabel(‘距離‘)ylabel(‘脈壓輸出‘);
?
plot((0:SampleNumber-1)*(120000/(SampleNumber-1))?20*log10(abs(pc(1:)))?);
xlabel(‘距離‘)ylabel(‘脈壓輸出/db‘);
axis([-infinf?-1050]);
title(‘不加窗脈壓結果‘)
%%?加窗處理?
win=chebw
- 上一篇:極小化極大準則matlab仿真
- 下一篇:matlab寫的子波提取 wavelete
評論
共有 條評論