ich Plotte Sinuswellen (linke Spalte) und ihre jeweiligen Frequenzbereichsdarstellungen (rechte Spalte):Fourier Transform von Sinuswellen mit unerwarteten Ergebnissen
- Die erste Welle (Amplitude: 10; Frequenz: 0,5) hat eine etwas vermasselte fft-Darstellung
- Die zweite Welle (Amplitude: 15; Frequenz: 5,0) sieht absolut wie erwartet aus.
- Die dritte Welle ist nur die erste und die zweite Welle aufsummiert und erbt die Probleme
Die zweite Frequenzdarstellung hat genau einen Peak bei x = 5 (Frequenz), y = 15 (Amplitude).
Warum hat das erste Frequenzdiagramm mehrere Spitzen, wenn nur eine Frequenz vorhanden ist?
import numpy as np
import matplotlib.pyplot as plt
def sine(freq, time_interval, rate, amp=1):
w = 2. * np.pi * freq
t = np.linspace(0, time_interval, time_interval*rate)
y = amp*np.sin(w * t)
return y
def buildData():
secs = 3
Fs = 44100
# frequency, duration, sampling rate, amplitude
y1 = sine(0.5, secs, Fs, 10)
y2 = sine(5, secs, Fs, 15)
y3 = y1 + y2
signals = [y1, y2, y3]
showSignals(signals, Fs, secs)
def showSignals(signals, fs, secs):
nrSigs = len(signals)
fig = plt.figure()
fig.subplots_adjust(hspace=.5)
for i in range(len(signals)):
cols=2
pltIdc = []
for col in range(1,cols+1):
pltIdc.append(i*cols+col)
s = signals[i]
t = np.arange(0, secs, 1.0/fs)
ax1 = plt.subplot(nrSigs, cols, pltIdc[0])
ax1.set_title('signal')
ax1.set_xlabel('time')
ax1.set_ylabel('amplitude')
ax1.plot(t, s)
amps = 2*abs(np.fft.fft(s))/len(s) # scaled power spectrum
amps = amps[0:len(amps)/2] # because of the symmetry
amps = amps[0:50] # only the first 50 frequencies, arbitrarily chosen
# this should be close to the amplitude:
print 'magnitude of amplitudes: ' + str(sum(amps*amps)**0.5)
freqs=np.arange(0, len(amps), 1)/secs
ax2 = plt.subplot(nrSigs, cols, pltIdc[1])
ax2.grid(True)
ax2.set_title(r"$\frac{2 \cdot fft(s)}{len(s)}$")
ax2.set_xlabel('freq')
ax2.set_ylabel('amplitude')
ax2.stem(freqs, amps)
plt.show()
buildData()
Danke. Was sind gängige Fenstermethoden zur Verarbeitung nicht ganzzahliger Zyklen? Besonders wenn es um reale Daten geht. Hamming/Hanning? – bogus
@bogus: Das ist eine gute Frage; aber eine separate Frage, die daher als separate Frage hier oder im dsp.stackexchange gestellt werden sollte, und nicht als Kommentar – hotpaw2