MATLAB 程序设计
如图 1 所示,在 xoy 平面存在一个点目标 T,其坐标(xT, yT)未知,且 yT >0。现在 A 点(0 m, 0 m)发射一脉冲信号,其传播速度为 1000 m/s;该脉冲信号沿路径 1 直 线传播到达点目标 T,经目标 T 散射(假设散射过程没有能量损失)后分别沿路 径2和路径3直线传播至B点(0.18 m, 0 m)和C点(0.25 m, 0 m)。若A、B和C 三点的脉冲信号的时间序列如图 2 所示,数据见群共享 tABC.txt(包含 4 列,第 1 列为时间(单位 s)数据,第 2 列为 A 点发射的脉冲信号数据,第 3 列和 4 列 分别为 B 点和 C 点接收的脉冲信号数据),求目标 T 的坐标为多少?
图1
图2 要求:尽量结合《信号与系统》中有关卷积(conv)、相关(xcorr)、离散傅里叶变换(fft)
和希尔伯特变换(hilbert)等知识,采用 MATLAB 的 M 文件进行编程(尽量包含一个自定 义函数),并对程序代码作简单注释说明。上交可运行的 M 文件及 Word(求解思路的说明 和复制的程序代码内容),压缩打包,文件名格式为:班级+姓名+学号。注意不要相互抄袭!
程序最开始一般为:clear all;clc;
要将 tABC.txt 的数据导入 MATLAB,可用 data=textread(‘目录\tABC.txt’); 也可
以使用其他函数
接下来对导入 MATLAB 的 data 矩阵进行处理来求取目标的位置: 方法 1:通过脉冲信号的传播时间来确定目标位置
a、求脉冲信号的传播时间
1 通过脉冲信号的最大值(max)求
2 对脉冲信号取包络(hilbert),然后通过包络信号的最大值求 3 通过脉冲信号的卷积(conv)或相关(xcorr)求
b、确定目标位置
传播时间一定,l 路径 1+l 路径 2 及 l 路径 1+l 路径 3 均为定值,这样会形成两个椭圆:一个 是以 A 和 B 为焦点,一个是以 A 和 C 为焦点,这两个椭圆的交点即为目标位置 (注意yT >0)
1 通过列椭圆方程组用符号计算求解(solve)
2 数值计算求解,定义向量 x 取两个椭圆 x 轴方向[-a a]的公共部分,步长先不 要太大,如 step= 1e-3 或 1e-4,分别计算两个椭圆下半部分所对应 y1 和 y2,找 出 abs(y1-y2)取最小值时 x(i)的位置;然后对 x 的区间[x(i-1) x(i+1)]进行细分,如 步长 step=1e-6 或 1e-7,重新求出对应的 y1 和 y2,然后找出 abs(y1-y2)取最小值 时的位置即为目标的位置
方法 2:对于平面 y>=0 的上各点,通过求从 A 点传来的前向脉冲信号与从 B 点 或 C 点逆向传来的逆向脉冲信号的相关来确定目标位置
1 在时域上进行求解
对于平面 y>=0 的上一点,分别求得从 A 点传到该点的前向脉冲信号和从 B 点 或 C 点逆向传到该点的逆向脉冲信号的波形数据,然后进行相关(xcorr)处理, 取 τ=0 时相关值,平面上其他各点也做类似处理,这样会在平面上形成一个偏移 椭圆环状图样;将 A 点和 B 点形成的图案与 A 点和 C 点形成的图案叠加会出现 一个峰,该峰的位置即为目标位置
2 在频域上进行求解(基于时域中的相关可以转换为频域中与共轭相乘的思想) 该方法首先对 A、B 和 C 三点脉冲信号作离散傅里叶变换(fft)为 A(ω), B(ω)和 C(ω);对于平面 y>=0 的上一点 X,从 A 点传播到该点的脉冲信号在频域可以表 示为 A(ω)exp(-iωxA/v),从 B 点或 C 点逆向传播到该点的脉冲信号在频域可以表 示为 B(ω)exp(iωxB/v)或 C(ω)exp(iωxC/v);在该点的相关在频域可以表示为
I X =AB* expi / v(x x )或AC* expi / v(x x )
平面上其他各点也做类似处理,取 I 的实部或模就会在平面上形成一个偏移椭圆 环状图样;将 A 点和 B 点形成的图案与 A 点和 C 点形成的图案叠加会出现一个 峰,该峰的位置即为目标位置
AB
AC