首页 > 编程语言 >算法原理-Music

算法原理-Music

时间:2024-07-22 10:42:16浏览次数:8  
标签:plt music 算法 Music rcParams np 原理 90

应用

DOA估计

原理

MUSIC算法,叫做多信号分类算法 (Multiple Signal Classification),是一种基于特征结构的高分辨率DOA算法。该算法利用了信号子空间和噪声子空间正交性的特点,构造噪声空间然后通过谱峰搜索来检测信号的波达方向。需要注意的是,该算法有一个前提,即各个入射信号之间互不相关,这样才能保证入射信号的协方差矩阵是满秩的。

一维阵列

线阵

二维阵列

矩阵

python实现

import numpy as np
import matplotlib.pyplot as plt

# 高斯白噪声
def awgn(x: np.array, snr: int or float) -> np.array:
    # snr(dB)
    len_x = len(x)
    Ps = np.sum(np.power(x, 2)) / len_x
    Pn = Ps / np.power(10, snr / 10)
    n_gaussian = np.sqrt(Pn / 2) * np.random.randn(len_x)
    return x + n_gaussian


f = 10e9  # 频率10GHz
c = 3e8  # 光速
l = c / f  # 波长
d = l / 2  # 半波长
M = 10  # 阵元数
N = 100  # 快拍数(采样点)
K = 6  # 信源数
phi = np.asarray([-30, 0, 20, 40, 60, 75])  # 来波方向
phi = phi * np.pi / 180
dd = np.arange(M) * d
A = np.exp(-2j * np.pi * np.outer(dd, np.sin(phi)) / l)
S = np.sqrt(2) / (np.random.randn(K, N) + 1j * np.random.randn(K, N))
X = A @ S
Rx = X @ np.conj(X).T / N
V, U = np.linalg.eig(Rx)
index = np.argsort(V)[::-1]
U = U[:, index]
P = np.sum(V)
P_cum = np.cumsum(V)
J = np.where(P_cum / P >= 0.95)
Un = U[:, int(J[0][0]+1):]

theta = np.arange(-90, 90, 0.1)
theta = np.pi / 180 * theta
doa = np.exp(-2j * np.pi * np.outer(dd, np.sin(theta)) / l)
music = np.abs(1 / np.diag(np.conj(doa).T @ Un @ np.conj(Un).T @ doa))
music = 10 * np.log10(music/np.max(music))

plt.rcParams['font.family'] = ['SimSun', 'Times New Roman']  # 设置字体族,中文为SimSun,英文为Times New Roman
plt.rcParams['font.size'] = 12
plt.rcParams['lines.linewidth'] = 1
plt.rcParams['lines.color'] = 'r'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['mathtext.fontset'] = 'stix'  # 设置数学公式字体为stix

fig, ax = plt.subplots(1, 1, figsize=(5, 3.95))
fig.set_tight_layout('pad')
ax.plot(np.arange(-90, 90, 0.1), music)
ax.set_ylabel('空间谱(dB)')
ax.set_xlabel('角度($^o$)')
plt.show()

标签:plt,music,算法,Music,rcParams,np,原理,90
From: https://www.cnblogs.com/hit-ztx/p/18290642

相关文章

  • 【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析
    ✨✨欢迎大家来到景天科技苑✨✨......
  • PCL使用贪婪三角形算法曲面重构
    内容介绍贪婪投影三角化算法是一种对原始点云进行快速三角化的算法,该算法假设曲面光滑,点云密度变化均匀,不能在三角化的同时对曲面进行平滑和孔洞修复。方法:(1)将三维点通过法线投影到某一平面(2)对投影得到的点云作平面内的三角化(3)根据平面内三位点的拓扑连接关系获得一个......
  • 【数学】【模板】扩展欧几里得算法
    扩展欧几里得算法思想首先回忆一下裴蜀定理:对于任意一对不全为\(0\)的整数\(a,b\),存在\(x,y\)使得\(ax+by=\gcd(a,b)\)。扩展欧几里得算法就是求出一组解满足\(ax+by=\gcd(a,b)\),这里用到了欧几里得算法,不会的,可以看看我的博客。我们看看怎么求:当\(b=......
  • 【数学】【模板】欧几里得算法
    欧几里得算法思想\[\gcd(a,b)=\gcd(b,a\bmodb)\]证明\(\gcd(a,b)=\gcd(b,a\bmodb)\):首先,如果有\(d|a\),\(d|b\),那么\(d|ax+by\)。然后,\(a\bmodb=a-\left\lfloor\dfrac{a}{b}\right\rfloorb\)。假设\(p=\gcd(a,b)\),那么\(p|......
  • 【搜索】【模板】A* 算法
    学了IDA*,然后学学A*。A*A*可以简单理解为在bfs的时候分个先后,哪个最有可能先到达就先走哪一步。A*是在某个最短路问题中(比如求最小的步骤等),如果所有边权都是非负的,那么就可以使用启发函数来优化bfs过程。例题P1379八数码难题思路我们在bfs的过程中加入函数\(h......
  • 算法学习(算法笔记胡凡)
    目录考生排序递归问题数塔问题回文字符串棋盘覆盖问题盒分形自然数分解之最大积自然数分解之方案数01串STL练习迭代器的使用考生排序https://sunnywhy.com/sfbj/4/1/92结构体的使用,sort函数的使用递归问题数塔问题https://sunnywhy.com/sfbj/4/3/116动态规划问题dp例如给......
  • 洛谷算法题
    目录数字反转迪杰斯特拉算法背包问题字符串排序P1192台阶问题P1111修复公路炸铁路问题计数问题......
  • 即使通过了示例测试用例,Dijkstra 算法也不起作用
    所以我遵循了维基百科关于Dijkstra算法和Brilliants的伪代码。https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm#Pseudocodehttps://brilliant.org/wiki/dijkstras-short-路径查找器/这是我的代码,它不起作用。谁能指出我的代码中的缺陷吗?#Usespyt......
  • 用 300 行代码手写提炼 Spring 核心原理 [2]
    系列文章用300行代码手写提炼Spring核心原理[1]用300行代码手写提炼Spring核心原理[2]上文中我们实现了mini-spring的1.0版本,接下来我们在此基础上进行优化,将init()方法中的代码进行封装。按照之前的思路,先搭建基础框架,再“填肉注血”。初始化阶段in......
  • 基于GA遗传算法的WSN网络节点覆盖优化matlab仿真
    1.程序功能描述      通过遗传优化算法,优化WSN无线传感器网络中的各个节点的坐标位置以及数量,使得整个网络系统已最少数量的节点达到最大的网络覆盖率。仿真最后输出覆盖率收敛曲线,节点数量收敛曲线,GA优化前后的覆盖率变化情况。 2.测试软件版本以及运行结果展示MATLA......