【问题标题】:using Principal Component Analysis to decorrelate noises使用主成分分析去相关噪声
【发布时间】:2017-02-13 06:55:39
【问题描述】:

我必须创建 13 个彼此完全去相关的高斯白噪声。 有人告诉我 PCA 可以实现它,所以我搜索了一些可以在 python 中使用的信息和工具。 我使用 sklearn 的 PCA 模块来执行 PCA。以下是我的代码。

import numpy as np
from sklearn.decomposition import PCA

n = 13 # number of completely decorrelated noises
ms = 10000 #duration of noise in milli-seconds
fs = 44100 # sampling rate

x = np.random.randn(int(np.ceil(fs*ms/1000)),n)

# calculate the correlation between any two noise
for i in range(n):
    for j in range(n):
        omega = np.corrcoef(x[:,i],x[:,j])[0,1]
        print omega

# perform PCA
pca = PCA(n_components=n)
pca.fit(x)
y = pca.transform(x)

for i in range(n):
    for j in range(n):
        omega_new = np.corrcoef(y[:,i],y[:,j])[0,1]
        print omega_new

PCA前的相关系数在0.0005~0.0014左右,进行PCA后降低到1e-16左右。 我对 PCA 不太了解,所以我不确定我是否做对了。 另外,经过PCA变换,那些新的数据集还是高斯白噪声吗?在将它们写入波形文件之前,我将对每个噪声进行归一化,使其最大幅度为 0.999。我还能得到 13 个具有相似平均功率的高斯白噪声吗?

【问题讨论】:

    标签: python signal-processing pca


    【解决方案1】:

    我可能正在做一个稻草人,但这里是针对一个大大简化的问题的攻击:如果我平均两个高斯噪声,我会得到一个高斯噪声吗?

    如果我们隔离新的噪声,它无疑是高斯的。如果我们假设精确计算(没有浮点错误),我相信无法将新噪声与新生成的噪声区分开来。

    但是,如果我们将它与我们平均的一个或两个噪声联系起来,很明显它是它们的平均值。

    我不确定 PCA 究竟是如何工作的,但这种转换在本质上似乎也是线性的。

    TBH,我对 PCA 了解不多,无法评论您的情况,但我希望进一步的编辑将有助于扩展此答案以适合您的问题。

    【讨论】: