先贴一下程序的原地址:https://blog.csdn.net/FPGADesigner/article/details/88534024
本文根据上述文章的程序进行了整理,便于阅读,能力有限,敬请见谅!!!
以下是程序的整理。
clc;
clear;
close all;
f = 10000000; %10MHz 调频信号基础频率
fs = 100e6; %100MHz 采样频率
ts = 1 / fs; %采样周期
B = 10^7; %调频范围 10MHz
T = 10^(-5); %脉冲宽度 10us
u = B / T;
c = 3e8; %信号传播速度
PRT = 500e-6; %脉冲周期500us
r1 = 10000; tao1 = 2*r1/c; n1 = round(tao1 / ts);
r2 = 30000; tao2 = 2*r2/c; n2 = round(tao2 / ts);
r3 = 31000; tao3 = 2*r3/c; n3 = round(tao3 / ts);
NN = PRT / ts;
t1 = 0 : ts : T-ts;
y = sin(2*pi*(f*t1+0.5*u*t1.^2)); %线性调频信号
N = length(y);
%不同距离的回波信号波形一样,回波时间不一样
y1 = [zeros(1, n1), y, zeros(1, NN-n1-N)];
y2 = [zeros(1, n2), y, zeros(1, NN-n2-N)];
y3 = [zeros(1, n3), y, zeros(1, NN-n3-N)];
xt = y1+y2+y3; %三个位置叠加的回波信号
figure; %回波信号波形 窗口1
subplot(2, 1, 1); %距离幅度图像
plot((0:length(xt)-1)*ts*c/2/1000, xt);
xlabel('距离/km');
title('回波信号距离幅度图像')
xtfft = abs(fft(xt, 50000));
subplot(2, 1, 2); %频率幅度图像
fx=(0:length(xt)/2-1)*fs/length(xt);
plot(fx/1e6, xtfft(1:length(xt)/2));
xlabel('频率/MHz');
title('回波信号频率幅度图像')
% 对回波信号采样
fs1 = 100e6;
ts1 = 1/fs1;
t2 = 0 : ts1 : (length(xt)-1)*ts1;
xrt = xt .* sin(2*pi*f*t2); %相干解调后的信号
fx1=(0:length(xt)/2-1)*fs1/length(xt);
figure; %解调后的回波信号波形 窗口2
subplot(2, 1, 1); %距离幅度图像
plot((0:length(xt)-1)*ts*c/2/1000, xrt);
xlabel('距离/km');
title('相干解调距离幅度图像')
xrtfft = abs(fft(xrt, 50000));
subplot(2, 1, 2); %频率幅度图像
fx1=(0:length(xrt)/2-1)*fs1/length(xrt);
plot(fx1/1e6, xrtfft(1:length(xrt)/2));
xlabel('频率/MHz');
title('频率幅度图像');
load fir.mat %导入滤波器,滤波器变量名为fir
firxrt = filter(fir, 1, xrt); %滤波后信号
firfft = abs(fft(firxrt, 50000));
figure; %频率幅度波形 窗口3
plot(fx1/1e6, firfft(1:length(firxrt)/2));
xlabel('频率/MHz');
title('滤波后频率幅度图像')
xrtdown = downsample(firxrt, 4); %下变频信号
value0=abs(fft(xrtdown)); %FFT分析
figure; %窗口4 信号抽取
fx1=(0:length(xrtdown)/2-1)*(fs1/4)/length(xrtdown);
%plot((fx1(1:length(value0)))/1e6, value0);
plot( fx1/1e6, value0(1:length(fx1)));
xlabel('频率/MHz');
title('下变频频率幅度图像')
T = 10^(-5);
u = B / T;
c = 3e8;
fs = 25e6;
ts = 1 / fs;
t1 = 0 : ts : T-ts;
hdt = sin(2*pi*(0*t1+0.5*u*t1.^2)); %匹配滤波信号
figure; % 窗口5
subplot(211)
plot(hdt);
title('匹配滤波信号')
% hdtfft = fft(hdt,256);
% subplot(212);
% plot(hdtfft);
% title('匹配滤波信号频域')
replica = xrtdown;
y = fliplr(hdt);
% out = conv(replica, y);
replica1= [replica,zeros(1,16384-length(replica))];
y1 = [hdt,zeros(1,16384-length(hdt))];
rfft = fft(replica1);
yfft = fft(y1);
out = abs(ifft((rfft.*conj(yfft)))); %脉冲压缩后信号 conj:求yfft复共轭
figure; %窗口6
t = (0:length(xrtdown)-1)*ts*c/2/1000;
plot(t, out(1:length(t)));
xlabel('距离/km');
title('脉冲压缩后信号')
原文中没有低通滤波器的创建方式,这里也给出教程。
首先,在命令行窗口输入fdatool,如图:
然后会看到如下界面:
上图中选择lowpass,FIR,输入Fs,Fpass,Fstop,Apass,Astop的值,点击下方的Design Filter,即可生成滤波器。(个人认为原博主的Astop设置为1太小,还未验证后续,感兴趣的可以试试!)如图所示:
最后一步就是将此滤波器保存下来,以便使用。点击左上角File,选择Export…(不是Export to…),选择下图的输出方式就可以了。Variable Names是可以自己改的,原文章里默认的Num,在本文的程序中改成了fir。
最后附上matlab的fdatool教程地址(不是广告):https://www.ilovematlab.cn/thread-27877-1-1.html,当然你也可以在哔哩哔哩上找到教程