- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
深知新手在接触毫米波雷达板硬件时需要花费的沉没成本,因此在行将告别毫米波雷达之际,总结这两年以来在毫米波雷达上的一些经验和教训.
本文档用于为实现基于 AWR1243BOOST 等单板毫米波雷达开发提供参考指南与解决方案,主要包括 硬件配置 、 基础参数 、 信号模型 、 应用DEMO开发 以及 可深入研究方向思考 等;为更好地匹配后续级联雷达应用的学习路线,在本手册中会尽可能同化单板雷达和级联雷达中的相关表述.
本指南作者信息: Xuliang ,联系方式: 22134033@zju.edu.cn 。未经本人允许,请勿用于商业和学术用途.
希望后者在使用本指南时可以考虑引用作者在毫米波雷达旅途中的相关工作,如本文参考文献[1]. 本章节为可深入研究方向思考章节之线谱估计,主要讨论线谱估计有关的几个问题。 欢迎各位读者通过邮件形式与笔者交流讨论,本章节完整程序请私信笔者,希望使用本代码时能够提供一份引用和Star,以表示对笔者工作的尊重,谢谢!在后续将定时维护更新。 https://github.com/DingdongD/TDMA-MIMO 。
往期内容: 炉火纯青:毫米波雷达开发手册之大话空间谱估计 登堂入室:毫米波雷达开发手册之信号模型 初出茅庐:毫米波雷达开发手册之基础参数 扬帆起航:毫米波雷达开发手册之硬件配置 眼观四海:自动驾驶&4D成像毫米波雷达 如今几何?
在正式开始本文讨论前,不妨思考下列问题: 频率估计是什么?为什么要频率估计? 空间谱估计的方法是否可以用来做频率估计? 如果可以,是否直接套用到频率信号上即可?
频率估计通常通常可以分为非参数化估计和参数化估计,在参数化估计中可以细分为连续谱估计和线谱估计。连续谱估计的常用方法是ARMA模型,线谱估计则是认为目标信号在某个域上可以用有限的原子/基信号去表征,其思想与子空间方法类似(但并不局限于子空间方法)。 在下面的讨论中,我们讨论的是线谱估计,线谱估计在毫米波雷达的距离、多普勒速度、空间信号估计以及呼吸、心跳信号检测中是贯穿全线的,如果要有一个词来一统雷达信号处理,笔者认为 线谱估计 能胜其任。 说到这里,频率估计的意义想必很明确了,目的就是为了从含噪信号中能够将信号映射到频域、空域分别解析出在该维度下的信息,总的来说可以如下总结(如有不合理,欢迎指正): 快时间维度---映射至频域---距离信息 慢时间维度---映射至频域---多普勒速度信息 相位维度 ---映射至频域---呼吸/心跳信息 阵列维度 ---映射至空域---方位/俯仰信息 。
空间谱估计方法能否直接用到频域上?不可以,但也可以。 很多人可能像 @秋姐姐 一样,自以为自己写的空间谱估计等价于频域信号估计,这里要注意的区别是: 1、空间谱估计,也称为波达角(DOA,Direction-of-Arrival)估计,这一估计通常是有角度频率限制的,例如,常用的限制区间为[0:180°]或[0:pi];但是频率信号估计通常是没有约束条件的,我们可以对整个频带内的型号进行估计; 2、空间谱估计是在空域信号上的估计,空域信号对应的是阵列流形空间的表征模式,其通常可以分为单快拍和多快拍下信号,在单快拍下信号维度为 \(\mathbb R^{M\times 1}\) ,在多快拍下信号维度为 \(\mathbb R^{M\times N}\) ,在这里 \(M\) 表示阵元数目, \(N\) 表示快拍数目(这里的快拍通常是能够表征同一距离采样点下的统计分布的累积,通常在毫米波雷达中对应慢时间维度的快拍)。而我们的频域信号维度通常是 \(\mathbb R^{L}\) , \(L\) 表示快拍数目(这里的快拍可以是快时间维度或慢时间维度的快拍,取决于需要恢复的信息所在维度)。 OK,不难发现:空间谱估计和频域信号估计的信号维度实际上是不统一的,前者为单快拍矢量或多快拍矩阵,而后者为矢量。但这并不影响,通常频域信号估计是对某个确定维度(距离、多普勒等)的估计,而我们所得到的数据不出意外为时域信号,时域信号实质上是对该维度信息的累积观测/统计表征,因此我们可以通过对这个矢量信号重构为类似于空域信号的模式表征,那么我们就可以基于新的模式表征实现空间谱估计(此空间谱估计不是真的空间谱估计,而是使用了空间谱估计方法追求了超分辨效果罢了) 。
那么,要怎么构建这个新的类似空间谱估计的模式表征呢?其实这个思想和子空间方法中的旋转子空间方法( ESPRIT )也是类似的,通过将大矩阵滑动分解为若干小矩阵来实现旋转不变性;这里也是通过滑动窗口模拟空间维度上的统计积累.
M = 16; % 虚拟阵元数目,这个可以抽象为空间谱估计中的阵元
N = length(data); % data为你的时域输入信号
for i = 1 : N - M
X(:, i) = data(i + M - 1 : -1 : i).'; % 构建新的模式表征
end
下面,我们希望给出一份实际案例来更好地帮助各位理解。 下面的程序案例中给出了实信号和复信号在FFT/MUSIC算法下的频率谱测试,如果想尝试其他空间谱估计的超分辨算法(旋转子空间方法/压缩感知OMP、L1NORM、IAA、OFFGRID、ANM等),可以阅读笔者的 炉火纯青:毫米波雷达开发手册之大话空间谱估计 到这里为此,我们某种程度上已经统一了毫米波雷达信号处理的思想,并且实际上也已经为各种应用(距离维信号重构、多普勒维信号重构、生命体征重构等)开篇.
clc;clear;close all;
%% 本文件用于实现多频率信号的估计
%% By Xuliang
fs = 40e3; % 采样频率
Tc = 4e-3; % 持续时间
n = 1 / fs : 1 / fs : Tc; %采样点
Npoint = 2^nextpow2(length(n));
snr = 10; % 信噪比
% sig = cos(2*pi*3259*n + pi /3); % 单目标
% sig = 2 * cos(2 * pi * 2182 * n + pi * 4 /3) + 1.6 * cos(2 * pi * 2550 * n+ pi / 8) + 1 * cos(2 * pi * 4100 * n + pi / 4); % 多目标
sig = 3 * exp(1j * 2 * pi * 2182 * n) + 1.5 * exp(1j * 2 * pi * 2550 * n) + exp(1j * 2 * pi * 4250 * n);
sig = awgn(sig, snr, 'measured'); % 加高斯白噪声
fftdata = (fft(sig, Npoint)); % FFT
freq_idx = fs / Npoint : fs / Npoint : fs / 2; % 频率间隔
figure(1);
plot(freq_idx, abs(fftdata(1:end/2))); % FFT可视化
title('FFT谱');
M = 32; % 信号子空间维度,可以通过修改这个值来检查算法效果
P = 3; % 信源数目 这里要考虑目标数目*2
if isreal(sig)
P = P * 2; % 如果为实信号 需要考虑信源*2 这个可以去结合特征值进一步理解
else
P = P; % 复信号 信源数目不变
end
music_spectrum = FREQ_MUSIC(sig, M, P, Npoint, fs); % MUSIC估计
figure(2);
plot(freq_idx, db(music_spectrum(1:Npoint/2)));
title('MUSIC谱');
function [PoutMusic] = FREQ_MUSIC(data, M, P, Npoint, fs)
% By Xuliang
% data: 输入信号(呼吸信号,快时间信号,慢时间信号均可) 一维 N * 1
% P: 信源个数
% M: 自相关矩阵阶数
% Npoint: 频率点数
% fs : 采样频率
searchGrids = fs / Npoint : fs / Npoint : fs; % 频率间隔
N = length(data); % 输入信号数据长度
for i = 1 : N - M
X(:, i) = data(i + M - 1 : -1 : i).'; % 构建新的模式表征
end
snap = N - M; % 快拍数
RX = X * X' / snap; % 自协方差矩阵
[V, D] = eig(RX); % 特征值分解
eig_value = real(diag(D)); % 提取特征值
[B, I] = sort(eig_value, 'descend'); % 排序特征值
EN = V(:, I(P+1:end)); % 提取噪声子空间
PoutMusic = zeros(1, length(searchGrids));
for id = 1 : length(searchGrids)
atheta_vec = exp(-1j * 2 * pi * [0:M-1]' * searchGrids(id) / fs); % 导向矢量
PoutMusic(id) = (abs(1 / (atheta_vec' * EN * EN' * atheta_vec))) ; % 功率谱计算
end
end
[1] X. Yu, Z. Cao, Z. Wu, C. Song, J. Zhu and Z. Xu, "A Novel Potential Drowning Detection System Based on Millimeter-Wave Radar," 2022 17th International Conference on Control, Automation, Robotics and Vision (ICARCV), Singapore, Singapore, 2022, pp. 659-664, doi: 10.1109/ICARCV57592.2022.10004245. 。
最后此篇关于一统江湖:毫米波雷达开发手册之大话线谱估计的文章就讲到这里了,如果你想了解更多关于一统江湖:毫米波雷达开发手册之大话线谱估计的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 3年前关闭。 Improve t
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我可以从哪里下载 cakephp 1.3 的手册.......? 最佳答案 强烈建议不要下载手册,因为它与开发的方式相同,并且可以改进和更改。但是,我承认需要离线副本,您可以在此处找到有关在哪里查看以
我想使用 GKSession 连接两台设备,其中一台作为服务器,另一台作为客户端。使用此配置我无法使用 GKPeerPickerController。 我在连接两个设备时遇到问题: 仅使用蓝牙:不可能
我花了相当多的时间寻找教程并在 Web 服务目录上实现签名和加密。现在我需要扩展该功能以允许每个用户拥有自己的签名和加密 key 。 出于这个原因,我开始四处寻找一些关于如何使用 WSS4J 拦截器的
使用ggplot2我通常使用geom_text和position=jitter之类的东西来注释我的图。 但是 - 对于一个漂亮的情节,我经常发现手动注释是值得的。如下所示: data2 <- stru
谁能推荐一本好的 ANSI SQL 引用手册吗? 我不一定是指教程,而是当您需要基本或更深入的解释或示例时可以查找的适当引用文档。 目前我正在使用W3Schools SQL Tutorial和 SQL
我正在尝试为我的 CS 1 类(class)编写代码。 代码的要点是编写一个代码,您可以在其中从一百美元的钞票中进行任何金额的找零,我需要归还适当的钞票和硬币。 我必须手动编写 JFrame 如果有人
我正在阅读 shellcoder 的手册。我正在跟踪,但由于某种原因无法让我的 shellcode 运行。我已经编译了该程序 gcc -mpreferred-stack-boundary=2 -m32
我的作业(不是家庭作业,只是“如果你能做到就试试”的事情)是使用位操作来加密和解密 .txt 文件。 这是程序。它成功打开文件进行读/写,但将所有 0 和空格放入 output.txt 文件而不是预期
我在谷歌上搜索了很多关于 C 的不必要结果。我希望能在本地获得最好的 C 手册。我发现引用资料很有用 here.我想自己做笔记并删除手册。 Can I manage it somehow like a
我在这个例子中 w.r.t. shellcoder's handbook(second edition),还有一些关于栈的问题 root@bt:~/pentest# gdb -q sc Readin
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
所以我有一份 PDF 手册,我们正在尝试为其创建可打印的 HTML 版本。我遇到了一些障碍,包括: 100% 缩放与缩小以适合(FF/IE 中的默认设置似乎不同) 只打印一页,后面没有空格页脚(或者甚
当我开始使用 PHP(大约 10 年前)时,最吸引我的是 .chm 格式的手册。我过去常常让“索引”选项卡保持打开状态,然后在其中输入我需要的任何内容,它会引导我进入一个漂亮、简洁但详尽的引用页面。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我想更好地了解如何使用 LLDB 调试我的 iOS 代码。我经常看到我的同事使用提示进行调试,例如查看变量的值等等。我在哪里可以找到一些关于如何在命令行上使用 LLDB 调试器的文档? 提前致谢。 最
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
Springer 的 Consolidated Ada Reference Manual 2005 Edition (ISO/IEC 8652:2007(E), Ed. 3) 和 Annotated
我遇到过几个关于使用 mysql 连接器/C++ 的文档,其中所有文档都使用不同的函数来完成相同的事情。例如 `sql::mysql::MySQL_Driver *driver; sql::Conne
我是一名优秀的程序员,十分优秀!