DOATools.py - 使用我自己的信号源(未生成)
DOATools.py - Using my own signal source (NOT generated)
我正在使用 doatools.py 库 (https://github.com/morriswmz/doatools.py)
现在,我的代码如下所示:
import numpy as np
from scipy import constants as const
import math
import doatools.model as model
import doatools.estimation as estimation
def calculate_wavelength(frequency):
return const.speed_of_light / frequency
# Uniform circular array
# X
# |
# X---------X
# |
# X
NUMBER_OF_ELEMENTS = 4 # elements are shown as "X"
RADIUS = 0.47 / 2
FREQ_MHZ = 315
freq = FREQ_MHZ * const.mega
wavelength = calculate_wavelength(freq)
antenna_array = model.UniformCircularArray(NUMBER_OF_ELEMENTS, RADIUS)
# Create a MUSIC-based estimator.
grid = estimation.FarField1DSearchGrid()
estimator = estimation.MUSIC(antenna_array, wavelength, grid)
R = np.array([[1.5, 2, 3, 4], [4, 5, 6, 5], [45, 5, 5, 6], [5, 1, 0, 5]])
_, estimates = estimator.estimate(R, 1, return_spectrum=False, refine_estimates=True)
print('Estimates: {0}'.format(estimates.locations))
我可以用这个库生成信号,但是如何使用我自己的?例如,来自 ADC 的信号(像这样:
-> Switching to antenna 0 : [0, 4, 7, 10]
-> Switching to antenna 1 : [5, 6, 11, 83]
-> Switching to antenna 2 : [0, 23, 2, 34]
-> Switching to antenna 3 : [23, 105, 98, 200]
)
我想你的问题是你应该如何从天线馈送真实数据,对吧?
假设您的数据应该按时间顺序排列。我的意思是在 "antenna 0 : [0, 4, 7, 10]" 的情况下,0 是第一个输入的数据,依次为 4、7,而 10 是时间上的最后一个。
如果是,您可以将它们保留为一个简单的矩阵,就像您在上面输入的那样:
r = matrix 4x4 of
0, 4, 7, 10
5, 6, 11, 83
0, 23, 2, 34
23, 105, 98, 200
//===============
r(0,0) = 0, r(0,1) = 4, r(0,2) = 7, r(0,3) = 10
r(1,0) = 5, r(1,1) = 6, ... etc.
r(2,0) = 0, ...etc.
//==============
R = r 与其厄密矩阵的乘积(r.h in python)。
R = r @ r.h
这是您需要作为函数中第一个参数填写的协方差矩阵。
我正在使用 doatools.py 库 (https://github.com/morriswmz/doatools.py) 现在,我的代码如下所示:
import numpy as np
from scipy import constants as const
import math
import doatools.model as model
import doatools.estimation as estimation
def calculate_wavelength(frequency):
return const.speed_of_light / frequency
# Uniform circular array
# X
# |
# X---------X
# |
# X
NUMBER_OF_ELEMENTS = 4 # elements are shown as "X"
RADIUS = 0.47 / 2
FREQ_MHZ = 315
freq = FREQ_MHZ * const.mega
wavelength = calculate_wavelength(freq)
antenna_array = model.UniformCircularArray(NUMBER_OF_ELEMENTS, RADIUS)
# Create a MUSIC-based estimator.
grid = estimation.FarField1DSearchGrid()
estimator = estimation.MUSIC(antenna_array, wavelength, grid)
R = np.array([[1.5, 2, 3, 4], [4, 5, 6, 5], [45, 5, 5, 6], [5, 1, 0, 5]])
_, estimates = estimator.estimate(R, 1, return_spectrum=False, refine_estimates=True)
print('Estimates: {0}'.format(estimates.locations))
我可以用这个库生成信号,但是如何使用我自己的?例如,来自 ADC 的信号(像这样:
-> Switching to antenna 0 : [0, 4, 7, 10]
-> Switching to antenna 1 : [5, 6, 11, 83]
-> Switching to antenna 2 : [0, 23, 2, 34]
-> Switching to antenna 3 : [23, 105, 98, 200]
)
我想你的问题是你应该如何从天线馈送真实数据,对吧? 假设您的数据应该按时间顺序排列。我的意思是在 "antenna 0 : [0, 4, 7, 10]" 的情况下,0 是第一个输入的数据,依次为 4、7,而 10 是时间上的最后一个。 如果是,您可以将它们保留为一个简单的矩阵,就像您在上面输入的那样:
r = matrix 4x4 of
0, 4, 7, 10
5, 6, 11, 83
0, 23, 2, 34
23, 105, 98, 200
//===============
r(0,0) = 0, r(0,1) = 4, r(0,2) = 7, r(0,3) = 10
r(1,0) = 5, r(1,1) = 6, ... etc.
r(2,0) = 0, ...etc.
//==============
R = r 与其厄密矩阵的乘积(r.h in python)。
R = r @ r.h
这是您需要作为函数中第一个参数填写的协方差矩阵。