使用主成分分析去除噪声

时间:2017-02-13 06:55:39

标签: python signal-processing pca

我必须创造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个高斯白噪声?

1 个答案:

答案 0 :(得分:0)

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

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

但是,如果我们将其与我们平均的一个或两个噪声相关联,那么很明显,这就是它们的平均值。

我不确定PCA的工作原理,但是这种转换本质上似乎也是线性的。

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