为什么有些信号不允许使用傅里叶变换进行信号滤波?

2024-10-16 17:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在两种类型的数据上尝试了傅里叶变换:

Sample 1:

 [5.22689618e-03 2.41534315e+00 0.00000000e+00 2.44972858e-01
 4.25280086e-02 9.33815370e-01 3.03247287e-01 2.30718622e-01
 3.67055310e-03 1.08563452e-01 1.65198349e+00 0.00000000e+00
 0.00000000e+00 3.81988895e-01 5.76292398e-02 4.30815942e-01
 1.26064346e+00 1.22264457e-01 9.20206465e-01 5.10205014e-02
 1.69624045e-02 1.27946761e-04 9.85479035e-02 1.47322503e-03
 5.88801835e-01 9.14815956e-04 1.58679916e-02 1.80580638e-04
 1.33877873e-02 4.31785412e-01 4.29998728e+00 7.28365507e-02
 2.93196111e-01 6.46923082e-01 1.64020382e+00 2.66995573e-01
 1.73472541e+00 1.20450527e+00 2.93713233e-01 4.37012291e-02]

Sample 2:

 [1.63397428e-05 5.06326672e-05 5.07890481e-05 3.27493146e-05
 6.19592537e-04 2.14127001e-04 3.31584036e-04 3.67715480e-05
 8.80083850e-05 2.70784860e-05 1.82332876e-05 1.13016894e-04
 9.62697824e-06 6.82677776e-06 1.55218678e-05 1.17480350e-04
 6.16809229e-05 7.51721123e-05 1.71455229e-04 3.89279781e-05
 4.14875499e-04 2.91402507e-05 2.07895269e-04 3.54011492e-04
 1.81316474e-06 2.28406092e-06 1.75001077e-04 3.21301398e-04
 2.77558089e-05 4.87684894e-04 1.91564056e-05 5.09892912e-06
 1.91527601e-04 4.01062880e-05 8.71198341e-06 2.87598374e-04
 1.81759066e-04 4.45384356e-05 1.90984648e-05 5.30995670e-04
 9.18908105e-05 6.19051866e-04 7.01213246e-06 1.97357403e-05
 1.52822474e-06 4.44353810e-05 2.12599086e-04 1.10231829e-04
 3.34317235e-05 1.10217651e-04 2.27115357e-05 2.43621107e-04
 9.59827677e-05 1.99824695e-04 1.76506191e-04 2.83759047e-04
 3.95528472e-05 1.04707169e-04 1.92821332e-05 1.69779942e-04
 2.82886397e-04 1.42531512e-04 1.25545297e-05 6.64785458e-05
 2.49983906e-04 7.36739683e-05 1.75280514e-04 6.63189677e-05
 7.10295246e-06 1.45455223e-04 1.71038217e-04 1.80725103e-05
 6.81610965e-05 5.38084605e-04 7.54303898e-05 1.74061569e-05
 1.26723836e-04 8.94035463e-05 9.10723041e-05 1.54759188e-05
 4.62195919e-05 4.98443430e-04 1.13484031e-04 6.36021767e-05
 4.85053842e-05 6.72420582e-05 3.24306672e-04 1.92741144e-05
 7.68752096e-04 3.27063864e-04 2.19143305e-05 7.59406815e-05
 3.59140998e-05 5.66567689e-04 2.57783290e-04 1.20276603e-04
 1.99017206e-05 3.27490253e-04 9.39513533e-05 1.01252991e-04]

我尝试实现傅里叶滤波器变换,从原始信号集中提取信号,但两个信号显示的结果并不相同。当sample 2允许时,sample 1不提取任何函数,如图所示

分析的部分代码如下所示

# Positive sample
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

f = signal
t = np.arange(len(signal))
dt = 1

## Compute the Fast Fourier Transform (FFT)
n = len(t)
fhat = np.fft.fft(f,n)                     # Compute the FFT
PSD = fhat * np.conj(fhat) / n             # Power spectrum (power per freq)
freq = (1/(dt*n)) * np.arange(n)           # Create x-axis of frequencies in Hz
L = np.arange(1,np.floor(n/2),dtype='int') # Only plot the first half of freqs
#print('PSD value is', PSD, '\n\nfhat is', fhat, '\n\nfrequency is', freq)
plt.plot(freq, PSD)

# Extracting datasets ## Use the PSD to filter out noise
indices = PSD > 0.2       # Find all freqs with large power
low_indices = PSD < 0.2  # Find all freqs with small power
PSDnoise = PSD[low_indices]  # store smaller freqs 
PSDclean = PSD * indices  # Zero out all others
fhat_noise = low_indices * fhat
fhat = indices * fhat     # Zero out small Fourier coeffs. in Y
ffilt = np.fft.ifft(fhat) # Inverse FFT for filtered time signal
noise = np.fft.ifft(fhat_noise)

我在噪声数据上重复此过程多次,从三个步骤中获得的图形为:

enter image description here

我可以知道为什么这两个函数的行为不同吗? 提前谢谢


Tags: thesampleimportfftsignal信号asnp