【发布时间】:2022-01-20 21:04:10
【问题描述】:
我正在使用 Numpy 的 FFT 通过首先计算功率谱来计算信号的自相关函数。我相信autocorrelation functions are positive definite。但是,当我test 时,如果我的模拟自相关函数是正定的,它通常会失败。下面是一些示例代码:
import numpy as np
def is_pos_def(x):
return np.all(np.linalg.eigvals(x) > 0)
n = 5
signal = np.random.random(size=(n,n)) #create a real valued signal
F = np.fft.fftn(signal) #FFT of real signal is conjugate symmetric
A = np.abs(F) #amplitudes/magnitudes
ps = A**2 #power spectrum is square of magnitudes
acf = np.fft.ifftn(ps) #autocorrelation function is ifft of the power spectrum
acf = acf.real #.real to clean up since the acf is real anyways by definition, and indeed the imaginary terms are zero.
print(is_pos_def(acf))
这会输出False。我错过了什么吗?
【问题讨论】:
-
我不知道你的问题的答案是什么,但我确实注意到你得到的几个特征值是
is_pos_def是复杂的。这是预期的行为吗? -
嗯,我运行它时没有得到复杂的值。然而,运行它几次后,我偶尔会得到复杂的值,我猜这只是依赖于随机种子。
-
“自相关函数是正定的”,但是你链接到一个关于自相关矩阵的问题,这不是一回事。 “正定”是矩阵的属性,而不是函数的属性。请注意,如果输入是 1D 函数或 3D 函数,那么您将无法进行计算。
-
@CrisLuengo 哦,我没有意识到它们是不同的。我想我的意思是矩阵,而不是函数,因为我正在使用 numpy 数组(如果它是一个 numpy 数组而不是一个 numpy 矩阵有关系吗?)。我会更新问题说矩阵。
-
不,你的数组是一个离散函数,它不是一个自相关矩阵。自相关矩阵来自随机向量,而不是来自信号或函数。 en.wikipedia.org/wiki/… — 我们在这里谈论不同的概念。没有理由期望图像矩阵的特征值是正的,甚至存在……
标签: python numpy signal-processing fft linear-algebra