基于空间平滑MUSIC算法的相干信号DOA估计(2)

2023-11-08

空间平滑MUSIC算法(2)

继续上一篇博客,继续讲后向空间平滑和前/后向空间平滑MUSIC算法。
基于空间平滑MUSIC算法的相干信号DOA估计(1)

2.3 后向空间平滑算法

后向空间平滑
后向空间平滑更准确的说是共轭后向空间平滑,它是对后向子阵列地共轭接收数据协方差矩阵进行平滑。定义第一个共轭后向子阵列由 { M , M − 1 , ⋯   , M − p + 1 } \{M, M-1, \cdots, M-p+1\} {M,M1,,Mp+1} 组成, 第二个子阵列由 { M − 1 , M − 2 , ⋯   , M − p } \{M-1, M-2, \cdots, M-p\} {M1,M2,,Mp} 组成,依次组成的子阵列个数为 L = M − p + 1 个 \mathrm{L}=\mathrm{M}-\mathrm{p}+1 个 L=Mp+1
容易知道,共轭后向空间平滑协方差矩阵 R ~ b \tilde{R}^{b} R~b与前向空间平滑协方差矩阵 R ~ f \tilde{R}^{f} R~f的关系:
R ~ b = J ∗ ( R ~ f ) ∗ ∗ J \tilde{R}^{b}=J*(\tilde{R}^{f})^**J R~b=J(R~f)J利用后向空间平滑协方差矩阵和MUSIC算法也可以分辨出多个相干信号的方位。可以证明,该方法最大也可以检测M/2个相干的信号。

MATLAB代码

% bss.m
% Code For Music Algorithm Based On Backward Spatial Spectrum
% The Signals Are All Coherent
% Author:痒羊羊
% Date:2020/10/29

clc; clear all; close all;
%% -------------------------initialization-------------------------
f = 500;                                        % frequency
c = 1500;                                       % speed sound
lambda = c/f;                                   % wavelength
d = lambda/2;                                   % array element spacing
M = 20;                                         % number of array elements
N = 100;                                        % number of snapshot
K = 6;                                          % number of sources
L = 10;                                         % number of subarray
L_N = M-L+1;                                    % number of array elements in each subarray
coef = [1; exp(1i*pi/6);... 
        exp(1i*pi/3); exp(1i*pi/2);... 
        exp(2i*pi/3); exp(1i*2*pi)];            % coherence coefficient, K*1
doa_phi = [-30, 0, 20, 40, 60, 75];             % direction of arrivals

%% generate signal
dd = (0:M-1)'*d;                                % distance between array elements and reference element
A = exp(-1i*2*pi*dd*sind(doa_phi)/lambda);      % manifold array, M*K
S = sqrt(2)\(randn(1,N)+1i*randn(1,N));         % vector of random signal, 1*N
X = A*(coef*S);                                 % received data without noise, M*N
X = awgn(X,10,'measured');                      % received data with SNR 10dB

%% reconstruct convariance matrix
%% calculate the covariance matrix of received data and do eigenvalue decomposition
Rxx = X*X'/N;                                   % origin covariance matrix
H = fliplr(eye(M));                             % transpose matrix
Rxxb = H*(conj(Rxx))*H;
Rf = zeros(L_N, L_N);                           % reconstructed covariance matrix
for i = 1:L
    Rf = Rf+Rxxb(i:i+L_N-1,i:i+L_N-1);
end
Rf = Rf/L;
[U,V] = eig(Rf);                                % eigenvalue decomposition
V = diag(V);                                    % vectorize eigenvalue matrix
[V,idx] = sort(V,'descend');                    % sort the eigenvalues in descending order
U = U(:,idx);                                   % reset the eigenvector
P = sum(V);                                     % power of received data
P_cum = cumsum(V);                              % cumsum of V

%% define the noise space
J = find(P_cum/P>=0.95);                        % or the coefficient is 0.9
J = J(1);                                       % number of principal component
Un = U(:,J+1:end);

%% music for doa; seek the peek
dd1 = (0:L_N-1)'*d;
theta = -90:0.1:90;                             % steer theta
doa_a = exp(-1i*2*pi*dd1*sind(theta)/lambda);   % manifold array for seeking peak
music = abs(diag(1./(doa_a'*(Un*Un')*doa_a)));  % the result of each theta
music = 10*log10(music/max(music));             % normalize the result and convert it to dB

%% plot
figure;
plot(theta, music, 'linewidth', 2);
title('Music Algorithm For Doa', 'fontsize', 16);
xlabel('Theta(°)', 'fontsize', 16);
ylabel('Spatial Spectrum(dB)', 'fontsize', 16);
grid on;

后向空间平滑可以看到,在6个入射信号均相干的情况下,基于后向空间平滑的MUSIC算法能较好地对其进行DOA估计,且估计精度较高。

2.3 前/后向空间平滑算法

把前向和共轭后向空间平滑协方差矩阵定义为前向空间平滑协方差矩阵和共轭后向空间平滑协方差矩阵的平均值,即:
KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at position 47: …{2}\left(\tilde\̲m̲a̲t̲h̲b̲f̲{R}^{f}+\tilde\…那么只要空间平滑的次数大于等于相干信号源的个数,前向和共轭后向空间平滑协方差矩阵一般情况下都是满秩的。使用前/后向空间平滑的方法最多可以检测的相干信号源个数为 2 M / 3 2 \mathrm{M} / 3 2M/3 个。你可能很好奇这个最大相干信号源检测数是怎么得到的?
假设: 阵列天线的阵元数为 M \mathrm M M个,前/后向空间平滑次数分别为 L \mathrm L L次,则每个子阵的阵元数为 N = M − L + 1 \mathrm N={\mathrm M}-\mathrm{L}+1 N=ML+1 个, 同时可以知道, 可以分辨的最大信号个数为 M − L \mathrm{M}-\mathrm{L} ML个, 也就是子阵的阵元个数减 1 ; 1 ; 1;前后向分别平滑 N \mathrm{N} N次可以解相干信号的个数为 2 L 2 \mathrm{L} 2L个, 最大情况下,两者相等所以 M − L = 2 L \mathrm M- \mathrm L=2 \mathrm L ML=2L,也就是 L = M / 3 ; \mathrm{L}=\mathrm{M} / 3 ; L=M/3; 所以 2 L = 2 M / 3 , 2 \mathrm{L}=2 \mathrm{M} / 3, 2L=2M/3, 所以前/后向空间平滑最大可以解相干的信号个数为 2 M / 3 2 \mathrm{M} / 3 2M/3 个。所以说采用前/后向空间平滑的改进技术可以很大地提高阵列孔径。

MATLAB代码

% fbss.m
% Code For Music Algorithm Based On Forward And Backward Spatial Spectrum
% The Signals Are All Coherent
% Author:痒羊羊
% Date:2020/10/29

clc; clear all; close all;
%% -------------------------initialization-------------------------
f = 500;                                        % frequency
c = 1500;                                       % speed sound
lambda = c/f;                                   % wavelength
d = lambda/2;                                   % array element spacing
M = 20;                                         % number of array elements
N = 100;                                        % number of snapshot
K = 6;                                          % number of sources
L = 10;                                         % number of subarray
L_N = M-L+1;                                    % number of array elements in each subarray
coef = [1; exp(1i*pi/6);... 
        exp(1i*pi/3); exp(1i*pi/2);... 
        exp(2i*pi/3); exp(1i*2*pi)];            % coherence coefficient, K*1
doa_phi = [-30, 0, 20, 40, 60, 75];             % direction of arrivals

%% generate signal
dd = (0:M-1)'*d;                                % distance between array elements and reference element
A = exp(-1i*2*pi*dd*sind(doa_phi)/lambda);      % manifold array, M*K
S = sqrt(2)\(randn(1,N)+1i*randn(1,N));         % vector of random signal, 1*N
X = A*(coef*S);                                 % received data without noise, M*N
X = awgn(X,10,'measured');                      % received data with SNR 10dB

%% reconstruct convariance matrix
%% calculate the covariance matrix of received data and do eigenvalue decomposition
Rxx = X*X'/N;                                   % origin covariance matrix
H = fliplr(eye(M));                             % transpose matrix
Rxxb = H*(conj(Rxx))*H;
Rxxfb = (Rxx+Rxxb)/2;
Rf = zeros(L_N, L_N);                           % reconstructed covariance matrix
for i = 1:L
    Rf = Rf+Rxxfb(i:i+L_N-1,i:i+L_N-1);
end
Rf = Rf/L;
[U,V] = eig(Rf);                                % eigenvalue decomposition
V = diag(V);                                    % vectorize eigenvalue matrix
[V,idx] = sort(V,'descend');                    % sort the eigenvalues in descending order
U = U(:,idx);                                   % reset the eigenvector
P = sum(V);                                     % power of received data
P_cum = cumsum(V);                              % cumsum of V

%% define the noise space
J = find(P_cum/P>=0.95);                        % or the coefficient is 0.9
J = J(1);                                       % number of principal component
Un = U(:,J+1:end);

%% music for doa; seek the peek
dd1 = (0:L_N-1)'*d;
theta = -90:0.1:90;                             % steer theta
doa_a = exp(-1i*2*pi*dd1*sind(theta)/lambda);   % manifold array for seeking peak
music = abs(diag(1./(doa_a'*(Un*Un')*doa_a)));  % the result of each theta
music = 10*log10(music/max(music));             % normalize the result and convert it to dB

%% plot
figure;
plot(theta, music, 'linewidth', 2);
title('Music Algorithm For Doa', 'fontsize', 16);
xlabel('Theta(°)', 'fontsize', 16);
ylabel('Spatial Spectrum(dB)', 'fontsize', 16);
grid on;

前/后向空间平滑因为前/后向空间平滑的改进技术很大地提高了阵列孔径,从以上的DOA结果图可以看出分辨率提高了。

参考论文:《阵列信号处理相关技术研究,陈四根》
代码Code均为原创。
欢迎转载,表明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于空间平滑MUSIC算法的相干信号DOA估计(2) 的相关文章

  • Matlab Solve():未给出所有解决方案

    我试图找到两条曲线的交点 syms x y g x 20 exp x 30 3 5 1 sol x sol y solve x 22 3097 2 y 16 2497 2 25 y g x x y Real true 它只提供一种解决方案
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua
  • 定义自定义 Mupad 程序的一般相对搜索路径

    假设我有一个 mupad 笔记本myMupadNotebook mn在路径上 C projectFolder ABC abc 它调用程序MyMupadProcedure mu它位于 C DEF GHI 现在我有一个 Matlab 脚本mai
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 如何每次使用按钮将数据添加到 MATLAB 中的现有 XLSX 文件?

    我有一个函数可以生成一些变量 例如分数 对 错 未回答 使用按钮调用此功能 问题是如何每次将函数生成的这些值添加 附加到 XLSX 文件中 或者 如何创建 MAT 文件以便可以添加它 可能的解决方案是什么 附加到 xls 文件所涉及的挑战是
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • 如何在向量中的所有点之间绘制线?

    我有一个包含二维空间中一些点的向量 我希望 MATLAB 用从每个点到每个其他点绘制的线来绘制这些点 基本上 我想要一个所有顶点都连接的图 你能用情节来做到这一点吗 如果可以 怎么做 一种解决方案是使用该函数为每个点组合创建一组索引MESH
  • 如何在Matlab中打印带有千位分隔符的整数?

    我想使用逗号作为千位分隔符将数字转换为字符串 就像是 x 120501231 21 str sprintf 0 0f x 但随着效果 str 120 501 231 21 如果内置fprintf sprintf做不到 我想可以使用正则表达式
  • for 循环中的绘图没有可见点

    我正在努力解决我想使用 for 循环制作的情节 我知道当我在循环之后添加它时它会起作用 只是一个简单的图 但我想用另一种方式尝试一下 fib ones 1 10 for k 3 10 hold on fib k fib k 1 fib k
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以
  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr

随机推荐

  • SpringBoot 性能优化

    1 服务监控 在开始对SpringBoot服务进行性能优化之前 我们需要做一些准备 把SpringBoot服务的一些数据暴露出来 比如 你的服务用到了缓存 就需要把缓存命中率这些数据进行收集 用到了数据库连接池 就需要把连接池的参数给暴露出
  • HashMap底层原理全解析

    作为面试中的高频题目 我相信每一个java程序员都有必要搞懂HashMap的底层原理和实现细节 废话不多说直接开撸 首先简单说一下HashMap的实现原理 首先有一个Node
  • win10双屏让任务栏显示不相同的方法

    经常使用win10的双屏幕模式 在使用的过程中 发现有些不太合适的地方 就是底部的任务栏的图标 两个屏幕 两个任务栏 这个无可厚非 但是 第二个屏幕上的程序 在第一个屏幕上还保留有任务栏位置 这个就比较有些匪夷所思了 点击第一个屏幕上的任务
  • 学妹毕业一年拿40万offer,经验其实就两点

    我经常和一位小学妹聊天 交流经验 昨天她告诉我 她终于实现了当年发过的誓 毕业2年内 进BAT 拿30万年薪 最终超额完成目标 毕业1年进了阿里 年薪40万 学妹聊起毕业后这一年来的经历时 颇有感慨 刚毕业的时候 学妹一心想进大厂 可是偏偏
  • Beautiful Soup 基本使用方法

    我们就来介绍一个强大的解析工具Beautiful Soup 它借助网页的结构和属性等特性来解析网页 有了它 我们不用再去写一些复杂的正则表达式 只需要简单的几条语句 就可以完成网页中某个元素的提取 1 简介 简单来说 Beautiful S
  • 入门级题解142. 环形链表 II

    给定一个链表 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos来表示链表尾连接到链表中的位置
  • OnnxRunTime的推理流程

    文章目录 一 torch转onnx模型 二 python下推断onnx模型 三 C 下用OnnxRunTime来推断模型 一 torch转onnx模型 用pytorch训练得到模型后 这时候需要转成onnx模型 torch提供函数 torc
  • excel将数据按某一列值分组并绘制分组折线图

    目录 一 实现按id分组 二 绘制分组折线图 今天在处理数据的时候发现了一个很巧妙的EXCEL绘制分组折现图的方法 简单记录分享一下 我的数据大概长这样 我希望实现的目标是根据产品id分组绘制不同产品的销量图 一 实现按id分组 复制产品i
  • python3.5 实现批量修改json文件中的中文字段

    改了好久才改好 关键问题编码格式 要改成gbk coding gbk import os import json 获取目标文件夹的路径 filedir os getcwd updatejson 获取文件夹中的文件名称列表 filenames
  • Axure RP暗黑色高保真中后台原型组件模板库及组件库素材

    Axure RP暗黑色高保真中后台原型组件模板库及组件库素材 黑色一直以来就可以给人以高级 神秘的语义象征 相比于浅色模式 暗色模式藏着更多可能性 色彩具有层级关系 深色会在视觉感官上自动后退 浅色部分则会向前延展 这样对比强烈的层次关系可
  • 2023网络安全毕业设计选题推荐 - 信息安全毕业设计题目大全

    文章目录 0 简介 2 如何选题 1 最新网安毕设选题 3 最后 0 简介 毕业季马上就要开始了 不少同学询问学长管理选题开题类的问题 今天跟大家分享信息安全毕设选题 最新的信息安全 网络安全 专业毕设选题 难度适中 适合作为毕业设计 大家
  • redis 由浅入深之 简介和开发环境搭建

    简介 redis是一个key value 存储系统 和Memcached类似 它支持存储的value类型相对更多 包括string 字符串 list 链表 set 集合 zset sorted set 有序集合 和hash 哈希类型 这些
  • Centos7 安装Tesseract-OCR

    第一步 依赖安装 yum install y autoconf automake libtool libjpeg libpng libtiff zlib libjpeg devel libpng devel libtiff devel zl
  • 基于时间序列的回归问题(4)——时间序列预测的基本思路

    前言 大家好 这个系列之前以及写了几篇博客 都是对于时间序列回归预测的一些前期准备知识 相信很多人 包括笔者在内 第一次接触这种项目 可能大体的思路方案都不是很清楚 那么 这么博客将为大家梳理一下做基于时间序列数据回归预测问题的大体思路 1
  • 线性代数——矩阵的初等变换

    矩阵的初等变换 矩阵的初等变换分为初等行变换和初等列变换 初等变换矩阵与矩阵之间用箭头连接 不能用等号 初等行变换 交换两行 用k k 0 乘以某一行 某一行的1倍加到某一行上去 定理1 任何矩阵都可通过初等变换化为标准形 行变换和列变换都
  • eclipse实用配置

    在eclipse打开当前文件在本地电脑中所在的路径配置 Run gt External Tools gt External Tools Configurations new 一个 program location 里面填 C WINDOWS
  • 一文带你从零到一深入透析 @RefreshScope 结合 Nacos 动态刷新源码

    嗨 您好 我是 vnjohn 在互联网企业担任 Java 开发 CSDN 优质创作者 推荐专栏 Spring MySQL Nacos Java 后续其他专栏会持续优化更新迭代 文章所在专栏 Nacos 我当前正在学习微服务领域 云原生领域
  • 学生php实训个人总结300字,实训总结300字通用版5篇

    导语 实训目的要明确 在理论上验证定理 公式 算法 并使实验者获得深刻和系统的理解 在实践上 掌握使用实验设备的技能技巧和程序的调试方法 一般需说明是验证型实验还是设计型实验 是创新型实验还是综合型实验 无忧考网为大家整理的实训总结300字
  • 使用 AWK 去掉文本文档中的空白行

    在 Linux 操作系统中 可以使用 AWK 命令高效地处理文本文档 AWK 命令通过执行使用 AWK 语言编写的脚本程序 处理文本文档 AWK 脚本程序是由模式 patterns 与相关操作 corresponding actions 组
  • 基于空间平滑MUSIC算法的相干信号DOA估计(2)

    空间平滑MUSIC算法 2 继续上一篇博客 继续讲后向空间平滑和前 后向空间平滑MUSIC算法 基于空间平滑MUSIC算法的相干信号DOA估计 1 2 3 后向空间平滑算法 后向空间平滑更准确的说是共轭后向空间平滑 它是对后向子阵列地共轭接