栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于python的MUSIC算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于python的MUSIC算法

        因为目前再做基于深度学习的波达角估计,传统波达角估计的仿真大都基于MATLAB的编程,而深度学习的仿真又大都基于python,觉得两个软件来回数据交换太复杂了,所以想着把一些简单的MATLAB程序改为python程序。

        但修改的过程中,发现python对于矩阵的运算和信号处理并不如MATLAB方便,在MUSIC算法中尤其是维度的匹配、转置,高斯噪声的添加非常麻烦,中间一度想放弃。最后整个代码也具有非常深的MATLAB痕迹,对于python面向对象的特性做的还不够好,但总算改了出来。

import numpy as np
import scipy.signal as ss
import scipy.linalg as LA
import matplotlib.pyplot as plt

derad = np.pi / 180
radeg = 180 / np.pi

def awgn(x, snr):
    spower = np.sum((np.abs(x) ** 2)) / x.size
    x = x + np.sqrt(spower / snr) * (np.random.randn(x.shape[0], x.shape[1]) + 1j * np.random.randn(x.shape[0], x.shape[1]))
    return x


def MUSIC(K,d,theta,snr,n):

    iwave = theta.size
    A = np.exp(-1j*2*np.pi*d.reshape(-1,1)@np.sin(theta*derad))
    S = np.random.randn(iwave,n)
    X = A@S
    X = awgn(X,10)
    Rxx = X@(X.conj().T)/n
    D,EV = LA.eig(Rxx)
    index = np.argsort(D)
    EN = EV.T[index].T[:,0:K-iwave]




    for i in range(numAngles):
        a = np.exp(-1j*2*np.pi*d.reshape(-1,1)*np.sin(Angles[i]))
        SP[i] = ((a.conj().T@a)/(a.conj().T@EN@EN.conj().T@a))[0,0]

    return SP




Angles = np.linspace(-np.pi / 2, np.pi / 2, 360)
numAngles = Angles.size
d = np.arange(0,4,0.5)
theta = np.array([10,30,60]).reshape(1,-1)
SP = np.empty(numAngles,dtype=complex)
SP = MUSIC(K=8,d=d,theta=theta,snr=10,n=500)


SP = np.abs(SP)
SPmax = np.max(SP)
SP = 10 * np.log10(SP / SPmax)
x = Angles * radeg
plt.plot(x, SP)
plt.show()






转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号