FFT에서 너무 많은 노이즈를 삭제하는 방법을 알고 있습니까? 다음은 FFT의 내 코드입니다 :fft 차트에서 노이즈 제거
import numpy as np
fft1 = (Bx[51:-14])
fft2 = (By[1:-14])
# Loop for FFT data
for dataset in [fft1]:
dataset = np.asarray(dataset)
psd = np.abs(np.fft.fft(dataset))**2
freq = np.fft.fftfreq(dataset.size, float(300)/dataset.size)
plt.semilogy(freq[freq>0], psd[freq>0]/dataset.size**2, color='r')
for dataset2 in [fft2]:
dataset2 = np.asarray(dataset2)
psd2 = np.abs(np.fft.fft(dataset2))**2
freq2 = np.fft.fftfreq(dataset2.size, float(300)/dataset2.size)
plt.semilogy(freq2[freq2>0], psd2[freq2>0]/dataset2.size**2, color='b')
어떤 아이디어가? 웰치가 작동하지 않으므로 차트를 부드럽게하고 싶지는 않지만 두 번째 그림에 표시된 수준으로 너무 많은 노이즈를 지우고 싶습니다. 당신이 할 수
# Loop for FFT data
for dataset in [fft1]:
dataset = np.asarray(dataset)
freqs, psd = welch(dataset, fs=266336/300, window='hamming', nperseg=512)
plt.semilogy(freqs, psd/dataset.size**2, color='r')
for dataset2 in [fft2]:
dataset2 = np.asarray(dataset2)
freqs2, psd2 = welch(dataset2, fs=266336/300, window='hamming', nperseg=512)
plt.semilogy(freqs2, psd2/dataset2.size**2, color='b')
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')
코드의 비트
이것은 웰치가하는 일입니다 Welch가 잘 구성되어 있는지 확인하십시오. 60Hz 전기 라인과 고조파 모드를 보여줍니다. 그것은 거의 좋았지 만 그것은 내 음모를 완전히 매끄럽게했다. 원하는 그래프 2를보십시오. Btw. Welch 플롯에서는 y 축척이 잘못되었지만 두 축척에 대한 전력 데이터의 경우에 불과합니다.
nperseg = 8192로 변경되었으며 효과가있었습니다. 결과를보십시오. 여기
당신은 소음 "을 지울 수 없습니다"를; 스펙트럼 밀도 추정에 원시 FFT를 사용할 때 특히 그렇습니다. Welch가 당신을 위해 작동하지 않는다고 생각하는 이유는 무엇입니까? 아래 그림은 Welch가 생산할 것으로 기대되는 것과 정확하게 같습니다. – kazemakase
원인 welch는 다음과 같습니다 (질문 참조). 당신은 내 아이디어로 무엇을 할 수 있습니까? – Hiddenguy
'welch'는'nperseg' 인자를 가지고 있습니다. 값이 높을수록 주파수 해상도가 향상되고 값을 낮추면 노이즈가 더 많이 줄어 듭니다. 'signal.welch (dataset, fs = 300, window = 'hamming', nperseg = 256)로 시작한 다음 노이즈가 여전히 받아 들여지면'nperseg = 512'를 시도하십시오. 나는 당신이 그들에게 느낌을주기 위해 값으로 놀 것을 제안한다 (또한 'noverlap' 논쟁을 보라). – kazemakase