0

我有一个电压信号,我正在尝试去噪。信号来自非常大的文件(524288 个单元格)。当我获取整个文件并使 n 等于数据集的长度时,我在频率 0 和最大值处得到两个非常大的峰值。

sig = np.genfromtxt(directory + '/'+ file, skip_header=3, dtype=np.float64)
n = len(sig)
freq = np.arange(n)
fhat = np.fft.fft(sig, n)
PSD = fhat * np.conj(fhat) / n

plt.plot(freq,PSD)              
plt.show()

indices: bool = PSD > 100
fhat = indices * fhat
ffilt = np.fft.ifft(fhat)
plt.plot(ffilt)
plt.show()

有没有办法分析整个文件,或者我必须将其拆分为更小的数据集?

4

1 回答 1

0

您可以一次性分析整个文件。那些高峰可能是填充问题。无论如何,我建议您使用 Python 中已经实现的方法之一,例如 Scipy 中的 Welch 方法。这将节省您的时间并减少确定您的实施是否正确的麻烦。这是一个改编自 Scipy 讲座的示例:

import numpy as np
from matplotlib import pyplot as plt    
from scipy import signal

# Seed the random number generator
np.random.seed(0)

time_step = .01
time_vec = np.arange(0, 70, time_step)

# A signal with a small frequency chirp
sig = np.sin(0.5 * np.pi * time_vec * (1 + .1 * time_vec))

plt.figure()
plt.plot(time_vec, sig)

# Compute the Power Spectral Density
freqs, psd = signal.welch(sig)

plt.figure()
plt.semilogx(freqs, psd)
plt.title('PSD: power spectral density')
plt.xlabel('Frequency')
plt.ylabel('Power')
plt.tight_layout()
plt.show()

结果如下: 在此处输入图像描述

于 2021-10-27T13:11:57.730 回答