LFM信号仿真程序分析

先贴一下程序的原地址: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,如图:
首先,在命令行窗口输入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,当然你也可以在哔哩哔哩上找到教程

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41824788

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值