线性调频信号的解线调(dechirp,去斜)处理matlab仿真

线性调频信号的解线调

      • 线性调频信号的回波模型
      • 参考信号
      • 去斜处理
      • 去斜处理傅里叶变换得到脉压结果
      • 解线调仿真
      • 总结

线性调频信号的回波模型

对于线性调频脉冲压缩雷达,其发射信号为:
s ( t ) = r e c t ( t T ) e x p ( j π μ t 2 ) \begin{equation} s(t)=rect(\frac{t}{T})exp(j\pi \mu t^2) \end{equation} s(t)=rect(Tt)exp(μt2)
其中
r e c t ( t T ) = { 1 , 0 ≤ t ≤ T 0 , o t h e r w i s e . \begin{equation} rect(\frac{t}{T})= \left\{ \begin{array}{ll} 1, & 0\leq t \leq T\\ 0, & otherwise. \end{array} \right. \end{equation} rect(Tt)={1,0,0tTotherwise.
其中 t t t为快时间变量, T T T为脉冲宽度, μ \mu μ为调频斜率, B = T μ B=T\mu B=Tμ为雷达信号的带宽,搭载到载频上的发射信号为:
s ( t ) = r e c t ( t T ) e x p ( j π μ t 2 ) e x p ( j 2 π f c t ) \begin{equation} s(t)=rect(\frac{t}{T})exp(j\pi \mu t^2)exp(j2\pi f_c t) \end{equation} s(t)=rect(Tt)exp(μt2)exp(j2πfct)
假设单目标的情况,目标位于 R t a r R_{tar} Rtar处,接收到的回波信号表达式为
s r ( t ) = r e c t ( t − t 0 T ) e x p ( j π μ ( t − t 0 ) 2 ) e x p ( j 2 π f c ( t − t 0 ) ) \begin{equation} s_r(t)=rect(\frac{t-t_0}{T})exp(j\pi \mu (t-t_0)^2)exp(j2\pi f_c (t-t_0)) \end{equation} sr(t)=rect(Ttt0)exp(μ(tt0)2)exp(j2πfc(tt0))
其中 t 0 = 2 R t a r / c t_0=2R_{tar}/c t0=2Rtar/c

参考信号

参考信号同样是一个线性调频信号,调频斜率、载频与雷达发射的信号一样,但是脉宽大于雷达发射线性调频信号的 T T T,这个脉宽其实就是一个信号处理窗,我们接收到一个脉冲重复周期的雷达回波之后,对选定的一段信号进行处理,这一段信号的长度就是窗,因为我们不知道雷达回波中的脉冲位置,所以选取的窗应该至少等于脉冲宽度才能将其“覆盖”住。参考信号可以表示为:
s r e f ( t ) = r e c t ( t − t r e f T r e f ) e x p ( j π μ ( t − t r e f ) 2 ) e x p ( j 2 π f c ( t − t r e f ) ) \begin{equation} s_{ref}(t)=rect(\frac{t-t_{ref}}{T_{ref}})exp(j\pi \mu (t-t_{ref})^2)exp(j2\pi f_c (t-t_{ref})) \end{equation} sref(t)=rect(Trefttref)exp(μ(ttref)2)exp(j2πfc(ttref))
其中, t r e f = 2 R r e f / c t_{ref}=2R_{ref}/c tref=2Rref/c c c c为光速, R r e f R_{ref} Rref是参考距离, T r e f T_{ref} Tref是接收窗,一般而言 T r e f > T T_{ref}>T Tref>T
在这里插入图片描述

图1 雷达回波和参考信号示意图

去斜处理

解线调就是将雷达回波和参考信号的共轭进行混频
s d e ( t ) = s r ( t ) ⋅ s r e f ∗ ( t ) = r e c t ( t − t 0 T ) e x p ( j 2 π ( − μ ( t 0 − t r e f ) ) t ) e x p ( − f c ( t 0 − t r e f ) ) e x p ( 1 / 2 μ ( t 0 2 − t r e f 2 ) ) ) \begin{equation} s_{de}(t)=s_r(t)\cdot s_{ref}^{*}(t)=rect(\frac{t-t_0}{T})exp(j2\pi (-\mu (t_0-t_{ref}))t)exp(-f_c(t_0-t_{ref}))exp(1/2\mu(t_0^2-t_{ref}^2))) \end{equation} sde(t)=sr(t)sref(t)=rect(Ttt0)exp(j2π(μ(t0tref))t)exp(fc(t0tref))exp(1/2μ(t02tref2)))
上面式子中一共有3个指数项,且只有第一个指数项是时间 t t t的函数,后面两个记为 e x p ( j ϕ ) exp(j\phi) exp(jϕ),则可以化简为:
s d e ( t ) = s r ( t ) ⋅ s r e f ∗ ( t ) = r e c t ( t − t 0 T ) e x p ( j 2 π ( − μ ( t 0 − t r e f ) ) t ) e x p ( j ϕ ) \begin{equation} s_{de}(t)=s_r(t)\cdot s_{ref}^{*}(t)=rect(\frac{t-t_0}{T})exp(j2\pi (-\mu (t_0-t_{ref}))t)exp(j\phi) \end{equation} sde(t)=sr(t)sref(t)=rect(Ttt0)exp(j2π(μ(t0tref))t)exp(jϕ)
可以看到解线调后的信号是一个单频信号,其频率为 f = − μ ( t 0 − t r e f ) f=-\mu (t_0-t_{ref}) f=μ(t0tref),它是调频斜率 − μ -\mu μ和相对时间 ( t 0 − t r e f ) (t_0-t_{ref}) (t0tref)的函数, ( t 0 − t r e f ) (t_0-t_{ref}) (t0tref)也就是雷达回波的脉冲相对于参考信号时间窗的延时。 t r e f t_{ref} tref是已知的,那么由解线调信号的频率便可以得到目标的延时。

去斜处理傅里叶变换得到脉压结果

我么对解线调信号进行傅里叶变换
S d e ( f ) = F { s d e ( t ) } = ∫ s d e ( t ) e x p ( − j 2 π f t ) d t = T r e f e x p ( j φ ( f ) ) s i n c ( T r e f ( f − f t a r ) ) \begin{equation} S_{de}(f)=\mathcal{F}\{s_{de}(t) \}=\int s_{de}(t)exp(-j2\pi ft)dt=T_{ref}exp(j\varphi (f))sinc(T_{ref}(f-f_{tar})) \end{equation} Sde(f)=F{sde(t)}=sde(t)exp(j2πft)dt=Trefexp(jφ(f))sinc(Tref(fftar))
其中 f t a r f_{tar} ftar R t a r R_{tar} Rtar具有以下关系:
R t a r = R r e f + ( c ⋅ f t a r ) / ( 2 μ ) \begin{equation} R_{tar}=R_{ref}+(c\cdot f_{tar})/(2\mu) \end{equation} Rtar=Rref+(cftar)/(2μ)

整个流程如下图所示,解线调之后由频域图可以得到和匹配滤波相同的结果,它们都是sinc函数。
在这里插入图片描述

图2 解线调流程图及时频图

解线调仿真

下面仿真的例子:
线性调频信号的带宽为2MHz,采样频率为8MHz,雷达发射线性调频信号脉宽50us,解线调脉宽100us。

%%Dechirp仿真,解线性调频
% 雷达信号采用线性调频信号,
% 主要内容:线性调频信号的生成、雷达回波的模拟、解线调参考信号生成、解线调操作、结果绘制
% Author: baidan @beijing 2023.1.11
%=========================================================================%
%                        雷达参数设置                                     %
%=========================================================================%
clear all;close all;clc;
C = 3.0e8;              %光速(m/s)
BandWidth = 2.0e6;      %雷达发射信号带宽,带宽=B=1/tau,tau是脉冲宽度
TimeWidth = 50.0e-6;    %雷达发射信号的脉冲时宽
k = BandWidth/TimeWidth;%调频斜率
PRT = 100e-6;           %雷达发射脉冲重复周期(s),100us对应1/2*100*300=15000米最大无模糊距离
Fs = BandWidth*4;       %采样频率 采样点数为PRT*FS=480
NoisePower = 1;         %噪声功率
SNR = 0;                %信噪比,以dB为单位
SigPower = 10^(SNR/10); %目标功率,无量纲
TargetDistance = 2500;  %目标距离,单位:
TargetDelay = 2*TargetDistance/C;           %延时时间,由目标的距离换算成时间,即线性调频信号的时间
mDelayNumber = fix(Fs*2*TargetDistance/C);  %把目标距离换算成采样点(距离门)
plot_enable_H = 1;      %绘图控制符
plot_enable_L = 0;      %绘图控制符
%=========================================================================%
%                            调用函数产生线性调频信号                     %
%=========================================================================%
[LFMPulse,targetEchoPRT,matchedFilterCoeff,pulseNumber,PRTNumber] = GenerateLFMSignal(BandWidth,TimeWidth,PRT,Fs,SigPower,TargetDistance,plot_enable_L);%调用函数
fprintf('Target appear in the %.1f us, distence is %.1f m, at %dth sampling point\n',TargetDelay*1e6,TargetDistance,mDelayNumber);
%=========================================================================%
% %                        产生功率为1高斯白噪声并添加噪声                  %
% %=========================================================================%
noise = GaussianNoise(PRT,Fs);
%mixedSignal = targetEchoPRT + noise; %添加噪声
mixedSignal = targetEchoPRT; %不添加噪声
%=========================================================================%
%                                   产生参考信号                          %
%=========================================================================%
[referSig,sigSamNumber] = ReferenceSignal(k,PRT,Fs,plot_enable_H); %四个参数分别是调频斜率,脉宽,采样率,绘图控制符
sref = referSig; %进行共轭
sde = targetEchoPRT.*(sref); %雷达回波和参考信号相乘
Sde = fftshift(fft(sde))*2/1600; % 对dechirp之后的信号进行fft
f=Fs*(0:PRTNumber-1)/PRTNumber-Fs/2;% -fs/2到 fs/2
figure;
subplot(4,1,1);plot(real(targetEchoPRT),'linewidth',1);axis tight;title('Target echo '); %绘制雷达回波
subplot(4,1,2);plot(real(sref),'linewidth',1);axis tight;title('Reference signal'); %绘制参考信号
subplot(4,1,3);plot(real(sde),'linewidth',1);axis tight;title('Dechirp signal'); %绘制参考信号
subplot(4,1,4);plot(f,(abs(Sde)),'linewidth',1);axis tight;title('fft of Dechirp signal'); %绘制参考信号

其中的子函数,产生线性调频信号:

function [LFMPulse,targetEchoPRT,matchedFilterCoeff,pulseNumber,PRTNumber] = GenerateLFMSignal(bandWidth,pulseDuration,PRTDuration,samplingFrequency,signalPower,targetDistece,plotEnableHigh)
% 该函数用于产生线性调频信号,以及雷达的目标反射回波,仅产生单个回波
%  Author:壮神 2023.9.21 @Beijing
% Input : 
%   * bandWidth: 信号带宽 ,参考值:2.0e6 表示2MHz
%   * pulseDuration:脉冲持续时间,参考值:40.0e-6 表示40ms
%   * PRTDuration:脉冲重复周期,参考值:240ms
%   * samplingFrequency:采样频率,参考值:2倍的信号带宽
%   * signalPower:信号能量,参考值:1
%   * targetDistece:目标距离,最大无模糊距离由脉冲重复周期决定。计算公式:1/2*PRTDuration*光速
%   * plotEnableHigh: 绘图控制符,1:打开绘图,0:关闭绘图
% Output : 
%    * LFMPulse:线性调频信号
%    * targetEchoPRT: 目标反射回波
%    * matchedFilterCoeff: 匹配滤波器系数
%    * pulseNumber:当前采样率下线性调频信号的采样点数
%    * PRTNumber:1个PRT对应的采样点数
C = 3.0e8;      %光速(m/s)
BandWidth = bandWidth;  %雷达发射信号带宽,带宽=B=1/tau,tau是脉冲宽度
TimeWidth = pulseDuration; %雷达发射信号的脉冲时宽PRT = PRTDuration;       %雷达发射脉冲重复周期(s),240us对应1/2*240*300=360000米最大无模糊距离
Fs = samplingFrequency;         %采样频率
SampleNumber = fix(Fs*PRT);
%=========================================================================%
%                        目标参数设置                                     %
%=========================================================================%
SigPower = signalPower;           %目标功率,无量纲
TargetDistance = targetDistece; %目标距离,单位:m
DelayNumber = fix(Fs*2*TargetDistance/C); %把目标距离换算成采样点(距离门)
fprintf('目标出现在距离门%d\n',DelayNumber);
%=========================================================================%
%                        产生线性调频信号、匹配滤波器                     %
%=========================================================================%
number = fix(Fs*TimeWidth); %回波采样点数=脉压系数长度=暂态点数目+1
if rem(number,2)~=0nember = nember + 1;
end
Chirp = zeros(1,number);
for i = -fix(number/2):fix(number/2)-1Chirp(i+fix(number/2)+1)=exp(1j*(pi*(BandWidth/TimeWidth)*(i/Fs)^2));%产生复ChIrp信号
end
coeff = conj(fliplr(Chirp)); %把Chirp信号翻转并把复数共轭,产生脉压系数
%=========================================================================%
%                      绘制线性调频信号                                   %
%=========================================================================%
if plotEnableHigh == 1figure;plot(real(Chirp)); %绘制线性调频信号xlabel('Sampling points'); ylabel('Amplitude');title('线性调频信号实部');
end
SignalTemp = zeros(1,SampleNumber); %1个PRT
SignalTemp(DelayNumber+1:DelayNumber+number) = sqrt(SigPower)*Chirp;%将线性调频信号按照距离进行延时
if plotEnableHigh == 1figure;plot(real(SignalTemp)); %绘制1个完整的PRT的雷达回波信号xlabel('Range bin'); ylabel('Amplitude');title('雷达回波的实部');
end
%=========================================================================%
%                          进行脉冲压缩                                   %
%=========================================================================%
Echo = SignalTemp; % 目标回波
pc_time0 = conv(Echo,coeff); % 回波和滤波器卷积的结果
pc_time1 = pc_time0(number:number+SampleNumber-1); %去掉暂态点
realTargetRange = find(abs(pc_time1)==max(abs(pc_time1)))-1; %由脉压结果目标距离
fprintf('The target range bin is  %d',realTargetRange);
if plotEnableHigh == 1figure; %时域脉压结果subplot(2,1,1);plot(abs(pc_time0),'r-');xlabel('Range bin'); ylabel('Amplitude');title('时域脉压结果');subplot(2,1,2);plot(abs(pc_time1),'r-');xlabel('Range bin'); ylabel('Amplitude');title('去掉暂态点的时域脉压结果');
end
%=========================================================================%
%                              返回参数                                   %
%=========================================================================%
LFMPulse = Chirp; %线性调频信号
targetEchoPRT = SignalTemp; %目标反射回波
matchedFilterCoeff = coeff; %匹配滤波器系数
pulseNumber = number; %线性调频信号的采样点数
PRTNumber = SampleNumber; %目标反射回波的采样点数
end

其中的子函数,产生解线调参考信号:

function [referSig,sigSamNumber] = ReferenceSignal(chirpRate,windowDuration,samplingFrequency,plotEnableHigh)
% 该函数用于产生dechirp雷达的参考信号
%  Author:王壮壮 2024.1.14 @shenzhen
% Input : 
%   * chirpRate: 调频斜率
%   * windowDuration:接收信号的时间窗,一般要大于雷达的线性调频信号的脉宽
%   * samplingFrequency:采样频率,参考值:2倍的信号带宽
%   * plotEnableHigh: 绘图控制符,1:打开绘图,0:关闭绘图
% Output : 
%    * referSig:参考信号,也是一个线性调频信号,但是脉宽要大于雷达发射的LFM信号
%    * pulseNumber:当前采样率下线性调频信号的采样点数
C = 3.0e8;      %光速(m/s)
TimeWidth = windowDuration; %接收窗的时宽
Fs = samplingFrequency;         %采样频率
%=========================================================================%
%                              产生线性调频信号                           %
%=========================================================================%
number = fix(Fs*TimeWidth); %采样点数
if rem(number,2)~=0nember = nember + 1;
end
% Chirp = zeros(1,number);
for i = -fix(number/2):fix(number/2)-1Chirp(i+fix(number/2)+1)=exp(1j*(pi*chirpRate*(i/Fs)^2));%产生复ChIrp信号
end
%=========================================================================%
%                              返回参数                                   %
%=========================================================================%
referSig = conj(Chirp); %对复chirp信号进行共轭得到参考信号
sigSamNumber = number; %参考信号的采样点数
%=========================================================================%
%                        分析参考信号的频域                               %
%=========================================================================%
CHIRP = fftshift(fft(referSig))*2/sigSamNumber;  %对参考信号进行fft得到它的频域
frequency_index = Fs*(0:sigSamNumber-1)/sigSamNumber-Fs/2; %频率下标
%=========================================================================%
%                        绘制参考信号                                     %
%=========================================================================%
if plotEnableHigh == 1figure;subplot(2,1,1);plot((1:sigSamNumber),real(Chirp)); %绘制参考信号的时域波形xlabel('Sampling points'); ylabel('Amplitude');title('参考信号实部');subplot(2,1,2);plot(frequency_index,abs(CHIRP)); %绘制参考信号的频谱图xlabel('Frequency/Hz'); ylabel('Amplitude');title('参考信号的频谱');
end
end

绘制图形如下:
在这里插入图片描述

图3 参考信号时频图

在这里插入图片描述

图4 解线调信号时频图

总结

去斜处理的主要原理为用发射副本信号与回波混频得到基带信号,再用傅里叶变换提取基带信号频率,通过时域到频域的转换将时域脉冲信号压缩为频域上的一个峰。匹配滤波和解线调其实都是一个sinc函数乘以一个复指数项的形式,两者的sinc函数一个位于快时间域一个位于距离频率域。去斜处理在一些特殊场合,不仅运算简单,而且可以简化设备,已经广泛应用于SAR和ISAR中作脉冲压缩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习求解TSP:Qlearning求解旅行商问题(Traveling salesman problem, TSP)

一、Qlearning简介 Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获…

等保测评流程是什么样的?测评周期多久?

等保测评流程是什么样的?测评周期多久? 等保测评一般分成五个阶段,定级、备案、测评、整改、监督检查。 1.定级阶段 针对用户的信息系统有等保专家进行定级,一般常见的系统就是三级系统或者是二级系统。在这里有一个小的区分&am…

[ACM算法学习] 诱导排序与 SA-IS算法

学习自诱导排序与SA-IS算法 - riteme.site 为了简化一些操作,定义 # 是字典序最小的字符,其字典序小于字母集里任意字符,并且将其默认作为每个字符串的最后一个字符,即作 S[|S|] SA-IS 算法 SA-IS 算法是基于诱导排序这种思想。…

【二、自动化测试】unittest测试框架简介

你好啊!我是程序员山茶,你也可以称我为测试开发Guide。本文首发“unittest” 每个语言都包含有自己的测试框架,python中同样有很多测试框架,具体如下 unittest: unittest是Python自带的单元测试框架,它提供…

Docker安装Elasticsearch8详细步骤

前面讲了Elasticsearch7的安装步骤,今天讲讲Elasticsearch8的安装,大同小异。 1、配置环境变量 .env 文件设置运行 docker-compose.yml 配置文件时使用的环境变量。 确保使用 ELASTIC_PASSWORD 和 KIBANA_PASSWORD 变量为 elastic 和 kibana_system 用…

基于机器学习的高考志愿高校及专业分析系统

本项目在“基于 Python 的高考志愿高校及专业分析系统”基础上补充添加了机器学习算法对高考总问进行预测; 项目采用了网络爬虫技术,从指定的高考信息网站上抓取了各大高校的历年录取分数线数据。 通过精细的数据清洗过程,这些数据被存储于…

云计算任务调度仿真02

前面已经分享过一个仿真项目,但是基于policy gradient方法实现的,考虑到许多人从零到一实现DQN方法有点难度,所以这次分享一个基于DQN实现的仿真项目,非常简单。 这里之所以简单主要得益于它是用pytorch实现的,而pyto…

NLP论文阅读记录 - 2022 W0S | 基于Longformer和Transformer的提取摘要层次表示模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Hierarchical Representation Model Based on Longformer and …

Unity游戏图形学 Shader结构

shader结构 shader语言 openGL:SLG跨平台 >GLSL:openGL shaderlauguge DX:微软开发,性能很好,但是不能跨平台 >HLSL:high level shader language CG:微软和Nvidia公司联合开发&#xff…

open3d相关操作总结

open3d其实有很多交互式命令,在运行程序打开了open3d渲染的窗口后,鼠标点击窗口,按H就会弹出,交互命令的帮助,如下图所示: 其中比较常用的有: Q :退出当前窗口 H:打印帮…

5 - 异常处理

目录 1. 总览 1.1 Exception 与 Error 1.2 checked unchecked 异常 1)使用 try-catch 进行捕获 2)使用 throws 关键字抛出 1.3 throw 与 throws 1)throw 2)throws 3)区别 1.4 try-catch-finally 2. try wit…

Airflow大揭秘:如何让大数据任务调度变得简单高效?

介绍:Airflow是一个开源的、用于创建、调度和监控数据管道的工作流平台。这个平台使用Python编写,并通过有向无环图(Directed Acyclic Graph, DAG)来管理任务流程,使得用户不需要知道业务数据的具体内容,只…

Python爬虫学习笔记(一)---Python入门

一、pycharm的安装及使用二、python的基础使用1、字符串连接2、单双引号转义3、换行4、三引号跨行字符串5、命名规则6、注释7、 优先级not>and>or8、列表(list)9、字典(dictionary)10、元组(tuple)11…

SDRAM小项目——写模块

写模块跟着视频看了一个多星期,一开始始终有点弄不清楚,现在记录一下理解的过程。 阅读文档信息: 首先阅读文档信息,了解SDRAM写过程的状态转换和时序图 SDRAM整体状态流程如图所示: 在SDRAM整体系统中&#xff0c…

【算法小课堂】动态规划

动态规划 动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都…

Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中(补充)

文章目录 前言步骤测试结果 前言 通过Java–业务场景:在Spring项目启动时加载Java枚举类到Redis中,我们成功将Java项目里的枚举类加载到Redis中了,接下来我们只需要写接口获取需要的枚举值数据就可以了,下面一起来编写这个接口吧。 步骤 在…

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法(违背题意)2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题,一开始并没有想到好的解题思路,写篇博客再来梳理一下吧。 题目要求: 不使用除法在O(n)时间复杂度内 1.使用除法&am…

新一代数字原住民:市场痛点与“繁”思维应对之道

随着科技的迅速发展,尤其是互联网的普及,新一代数字原住民经营者已经逐渐成为市场的主力军。不同于传统的消费者,有着独特的消费习惯和心理需求。企业要在这激烈的市场竞争中获得优势,深入了解这一群体的特征和心理、行为&#xf…

有趣的事,讲给有趣的人听

哈哈哈,今天不写技术了,今天分享一下生活,技术我们什么时候都可以学,但是生活更值得我们现在就去更好的体验! 两年多的涤生大数据,认识了形形色色的小伙伴,陆续沟通下来6000多人,彼时…

数据库锁表原因、排查、解决

一.场景 场景1场景2二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML( insert 、update 、delete ) A操作进行全量数据同步,对整个表的粒度进行上锁,导致B操作只能等待A操作完成才能进入插入数据。此时就出现了锁表…