- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个小型雷达项目,可以测量心脏和胸部产生的多普勒频移。由于我事先知道源的数量,因此我决定选择 MUSIC 算法进行频谱分析。我正在获取数据并将其发送到 Python 进行分析。然而,我的 Python 代码表示,具有两个频率为 1 Hz 和 2 Hz 的混合正弦波的信号的所有频率的功率是相等的。我的代码与示例输出链接在此处:
from scipy import signal
import numpy as np
from numpy import linalg as LA
import matplotlib.pyplot as plt
import cmath
import scipy
N = 5
z = np.linspace(0,2*np.pi, num=N)
x = np.sin(2*np.pi * z) + np.sin(1 * np.pi * z) + np.random.random(N) * 0.3 # sample signal
conj = np.conj(x);
l = len(conj)
sRate = 25 # sampling rate
p = 2
flipped = [0 for h in range(0, l)]
flipped = conj[::-1]
acf = signal.convolve(x,flipped,'full')
a1 = scipy.linalg.toeplitz(c=np.asarray(acf),r=np.asarray(acf))#autocorrelation matrix that will be decomposed into eigenvectors
eigenValues,eigenVectors = LA.eig(a1)
idx = eigenValues.argsort()[::-1]
eigenValues = eigenValues[idx]
eigenVectors = eigenVectors[:,idx]
idx = eigenValues.argsort()[::-1]
eigenValues = eigenValues[idx]# soriting the eigenvectors and eigenvalues from greatest to least eigenvalue
eigenVectors = eigenVectors[:,idx]
signal_eigen = eigenVectors[0:p]#these vectors make up the signal subspace, by using the number of principal compoenets, 2 to split the eigenvectors
noise_eigen = eigenVectors[p:len(eigenVectors)]# noise subspace
for f in range(0, sRate):
sum1 = 0
frequencyVector = np.zeros(len(noise_eigen[0]), dtype=np.complex_)
for i in range(0,len(noise_eigen[0])):
frequencyVector[i] = np.conjugate(complex(np.cos(2 * np.pi * i * f), np.sin(2 * np.pi * i * f)))#creating a frequency vector with e to the 2pi *k *f and taking the conjugate of the each component
for u in range(0,len(noise_eigen)):
sum1 += (abs(np.dot(np.asarray(frequencyVector).transpose(), np.asarray( noise_eigen[u]) )))**2 # summing the dot product of each noise eigenvector and frequency vector taking the absolute value and squaring
print(1/sum1)
print("\n")
"""
(OUTPUT OF THE ABOVE CODE)
0.120681885992
0
0.120681885992
1
0.120681885992
2
0.120681885992
3
0.120681885992
4
0.120681885992
5
0.120681885992
6
0.120681885992
7
0.120681885992
8
0.120681885992
9
0.120681885992
10
0.120681885992
11
0.120681885992
12
0.120681885992
13
0.120681885992
14
0.120681885992
15
0.120681885992
16
0.120681885992
17
0.120681885992
18
0.120681885992
19
0.120681885992
20
0.120681885992
21
0.120681885992
22
0.120681885992
23
0.120681885992
24
Process finished with exit code 0
"""
以下是音乐算法的公式:
https://drive.google.com/file/d/0B5EG2FEWlIZwYmkteUludHNXS0k/view?usp=sharing
最佳答案
从数学上来说,问题在于i和f都是整数。因此,2*π*i*f 是 2π 的整数倍。考虑到一点点舍入误差,这会给出非常接近 1.0 的余弦和非常接近 0.0 的正弦值。从一次迭代到下一次迭代,这些值的 FrequencyVector 几乎没有变化。
我还发现一个问题,即您设置了signal_eigen 矩阵,但从未使用过它。这个算法不需要信号本身吗?因此,您所做的就是以 2πi 的间隔对噪声进行采样。
<小时/>让我们尝试将一个周期分割成 sRate 均匀分布的采样点。这会导致峰值为 0.24 和 0.76(超出范围 0.0 - 0.99)。这符合您对它应该如何工作的直觉吗?
signal_eigen = eigenVectors[0:p]
noise_eigen = eigenVectors[p:len(eigenVectors)] # noise subspace
print "Signal\n", signal_eigen
print "Noise\n", noise_eigen
for f_int in range(0, sRate * p + 1):
sum1 = 0
frequencyVector = np.zeros(len(noise_eigen[0]), dtype=np.complex_)
f = float(f_int) / sRate
for i in range(0,len(noise_eigen[0])):
# create a frequency vector with e to the 2pi *k *f and taking the conjugate of the each component
frequencyVector[i] = np.conjugate(complex(np.cos(2 * np.pi * i * f), np.sin(2 * np.pi * i * f)))
# print f, i, np.pi, np.cos(2 * np.pi * i * f)
# print frequencyVector
for u in range(0,len(noise_eigen)):
# sum the squared dot product of each noise eigenvector and frequency vector.
sum1 += (abs(np.dot(np.asarray(frequencyVector).transpose(), np.asarray( noise_eigen[u]) )))**2
print f, 1/sum1
输出
Signal
[[ -3.25974386e-01 3.26744322e-01 -5.24205744e-16 -1.84108176e-01
-7.07106781e-01 -6.86652798e-17 2.71561652e-01 3.78607948e-16
4.23482344e-01]
[ 3.40976541e-01 5.42419088e-02 -5.00000000e-01 -3.62655793e-01
-1.06880232e-16 3.53553391e-01 -3.89304223e-01 -3.53553391e-01
3.12595284e-01]]
Noise
[[ -3.06261935e-01 -5.16768248e-01 7.82012443e-16 -3.72989138e-01
-3.12515753e-16 -5.00000000e-01 5.19589478e-03 -5.00000000e-01
-2.51205535e-03]
[ 3.21775774e-01 8.19916352e-02 5.00000000e-01 -3.70053622e-01
1.44550753e-16 3.53553391e-01 4.33613344e-01 -3.53553391e-01
-2.54514258e-01]
[ -4.00349040e-01 4.82750272e-01 -8.71533036e-16 -3.42123880e-01
-2.68725150e-16 2.42479504e-16 -4.16290671e-01 -4.89739378e-16
-5.62428795e-01]
[ 3.21775774e-01 8.19916352e-02 -5.00000000e-01 -3.70053622e-01
-2.80456498e-16 -3.53553391e-01 4.33613344e-01 3.53553391e-01
-2.54514258e-01]
[ -3.06261935e-01 -5.16768248e-01 1.08027782e-15 -3.72989138e-01
-1.25036869e-16 5.00000000e-01 5.19589478e-03 5.00000000e-01
-2.51205535e-03]
[ 3.40976541e-01 5.42419088e-02 5.00000000e-01 -3.62655793e-01
-2.64414807e-16 -3.53553391e-01 -3.89304223e-01 3.53553391e-01
3.12595284e-01]
[ -3.25974386e-01 3.26744322e-01 -4.97151703e-16 -1.84108176e-01
7.07106781e-01 -1.62796158e-16 2.71561652e-01 2.06561854e-16
4.23482344e-01]]
0.0 0.115397176866
0.04 0.12355071192
0.08 0.135377011677
0.12 0.136669716901
0.16 0.148772917566
0.2 0.195742574649
0.24 0.237792763699
0.28 0.181921271171
0.32 0.12959840172
0.36 0.121070836044
0.4 0.139075881122
0.44 0.139216853056
0.48 0.117815494324
0.52 0.117815494324
0.56 0.139216853056
0.6 0.139075881122
0.64 0.121070836044
0.68 0.12959840172
0.72 0.181921271171
0.76 0.237792763699
0.8 0.195742574649
0.84 0.148772917566
0.88 0.136669716901
0.92 0.135377011677
0.96 0.12355071192
<小时/>
我也不确定正确的实现;拥有更多有关公式上下文的论文会有所帮助。我不确定 f 值的范围和采样。当我使用 FFT 软件时,f 以小增量扫过波形,通常为 2π/sRate。
<小时/>我现在没有得到那些独特的尖峰——不确定我之前做了什么。我做了一个小的参数化更改,添加了 num_slice 变量:
num_slice = sRate * N
for f_int in range(0, num_slice + 1):
sum1 = 0
frequencyVector = np.zeros(len(noise_eigen[0]), dtype=np.complex_)
f = float(f_int) / num_slice
当然,您可以按照自己喜欢的方式计算它,但随后的循环仅运行一个周期。这是我的输出:
0.0 0.136398199883
0.008 0.136583829848
0.016 0.13711117893
0.024 0.137893463111
0.032 0.138792904453
0.04 0.139633157335
0.048 0.140219450839
0.056 0.140365986349
0.064 0.139926689416
0.072 0.138822121693
0.08 0.137054535152
0.088 0.13470609994
0.096 0.131921188389
0.104 0.128879079596
0.112 0.125765649854
0.12 0.122750994163
0.128 0.119976226317
0.136 0.117549199221
0.144 0.115546862203
0.152 0.114021482029
0.16 0.113008398728
0.168 0.112533730494
0.176 0.112621097254
0.184 0.113296863522
0.192 0.114593615279
0.2 0.116551634665
0.208 0.119218062482
0.216 0.12264326497
0.224 0.126873674308
0.232 0.131940131305
0.24 0.137840727381
0.248 0.144517728837
0.256 0.151830000359
0.264 0.159526062508
0.272 0.167228413981
0.28 0.174444818009
0.288 0.180621604818
0.296 0.185241411664
0.304 0.187943197745
0.312 0.188619481273
0.32 0.187445977812
0.328 0.184829467764
0.336 0.181300320748
0.344 0.177396490666
0.352 0.173576190425
0.36 0.170171993077
0.368 0.167379359825
0.376 0.165265454514
0.384 0.163786582966
0.392 0.16280869726
0.4 0.162130870823
0.408 0.161514399035
0.416 0.160719375729
0.424 0.159546457646
0.432 0.157875982968
0.44 0.155693319037
0.448 0.153091632029
0.456 0.150251065569
0.464 0.147402137481
0.472 0.144785618099
0.48 0.14261932062
0.488 0.141076562538
0.496 0.140275496354
0.504 0.140275496354
0.512 0.141076562538
0.52 0.14261932062
0.528 0.144785618099
0.536 0.147402137481
0.544 0.150251065569
0.552 0.153091632029
0.56 0.155693319037
0.568 0.157875982968
0.576 0.159546457646
0.584 0.160719375729
0.592 0.161514399035
0.6 0.162130870823
0.608 0.16280869726
0.616 0.163786582966
0.624 0.165265454514
0.632 0.167379359825
0.64 0.170171993077
0.648 0.173576190425
0.656 0.177396490666
0.664 0.181300320748
0.672 0.184829467764
0.68 0.187445977812
0.688 0.188619481273
0.696 0.187943197745
0.704 0.185241411664
0.712 0.180621604818
0.72 0.174444818009
0.728 0.167228413981
0.736 0.159526062508
0.744 0.151830000359
0.752 0.144517728837
0.76 0.137840727381
0.768 0.131940131305
0.776 0.126873674308
0.784 0.12264326497
0.792 0.119218062482
0.8 0.116551634665
0.808 0.114593615279
0.816 0.113296863522
0.824 0.112621097254
0.832 0.112533730494
0.84 0.113008398728
0.848 0.114021482029
0.856 0.115546862203
0.864 0.117549199221
0.872 0.119976226317
0.88 0.122750994163
0.888 0.125765649854
0.896 0.128879079596
0.904 0.131921188389
0.912 0.13470609994
0.92 0.137054535152
0.928 0.138822121693
0.936 0.139926689416
0.944 0.140365986349
0.952 0.140219450839
0.96 0.139633157335
0.968 0.138792904453
0.976 0.137893463111
0.984 0.13711117893
0.992 0.136583829848
1.0 0.136398199883
关于python - MUSIC算法Spectrum Python实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37841704/
特别是收到此错误: ERROR: Error when calling external catalog API: The number of partition keys do not match
我正在使用以下代码从 np 数组中获取 specgram2D: specgram2D, freq, time = mlab.specgram(samples, Fs=11025, NFFT=1024,
这听起来很荒谬,但我一生都无法弄清楚如何或以什么为目标来创建一个简单的点击事件。 http://jsfiddle.net/ctkY3/2740/ 我隐藏了 sp-dd 元素。我想做的是,当您单击红色部
NI 正在尝试通过 Redshift Spectrum 将 parquet 数据加载到 Redshift 中。 我已经设置了信任关系等,并且可以很好地承担 Redshift 的角色。 但是我收到了 S
关闭。这个问题是opinion-based .它目前不接受答案。 6年前关闭。 锁定。这个问题及其答案是locked因为这个问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 你最喜欢的汇编器
我试图在 jQuery 对话框上显示 Spectrum 颜色选择器,但它没有显示。这是我用于加载频谱的代码: $(document).ready(function() { $("#colour").s
我正在尝试让 Spectrum 颜色选择器按照其文档中的方式工作;我想使用一个按钮来切换颜色选择器以保持界面整洁。无论出于何种原因,它都不起作用。 $("#btn-toggle").click(fun
我正在尝试将颜色代码发送到 Spectrum color picker使用 t.typeText(colorPickerInput) 输入,但此输入被隐藏并且 Testcafe 抛出错误。基于文档选项
我正在使用 raphaeljs 库,我想指定 getColor 给出的颜色功能。如果可以的话,该怎么办?谢谢 最佳答案 这是不可能的。该函数采用的唯一参数是亮度。这是code taken from v
我已经实现了一个 Spectrum 颜色选择器,它工作得很好,除了 showInput 选项使文本输入不可编辑,它甚至不可选择,它甚至不关注自己。但是,如果我选择颜色,十六进制值会出现在输入中,因此它
我很难弄清楚如何将我从光谱中选择的颜色设置为另一个 div。我的 HTML 是这样的: Full Example 输入是光谱,它改变了小框的颜色。这是插件的所有标准。我也想为其中一个框(内部
我很好地实现了 Spectrum 的颜色选择器 $(document).ready(function() { $("#font_color").spectrum({ color: "#f0
我正在使用 Redhshift 频谱。我创建了一个外部表并在 S3 上上传了一个包含大约 550 万条记录的 csv 数据文件。如果在这个外部表上触发查询,大约需要 15 秒,而如果我在 Amazon
给定 S3 上由时间戳字段分区的 1.4 TB Parquet 数据的数据源(因此分区为 year - month - day ),我正在查询特定日期的数据(2.6 GB 数据)并检索 Parquet
我想配置 RedShift Spectrum具有 Cloud Formation 模板的资源。执行此操作的 CF 模板参数是什么? 例如,普通的 RedShift 可以是 templated就像, m
我正在使用angular-spectrum-colorpicker使用spectrum.js在我的代码中。除了该值未使用模型初始化外,它基本上工作正常。以下是我使用的设置: 这里有一个 jsbin
当我在 Athena 查询编辑器中运行此查询时,它按预期工作。 SELECT * FROM "sampledb"."elb_logs" limit 10; elb_logs表是根据官方教程生成的。当我
我在 Redshift Spectrum 上创建了一个外部表的简单 View : CREATE VIEW test_view AS ( SELECT * FROM my_external_sche
我正在尝试使用 Redshift Spectrum 查询 Hive View ,但它给了我这个错误: SQL Error [500310] [XX000]: [Amazon](500310) Inva
有时在 ZX Spectrum Basic 中编码时,我需要评估由两个操作数和一个逻辑异或组成的逻辑表达式,如下所示: IF (left operand) xor (right operand) TH
我是一名优秀的程序员,十分优秀!