Diese Seite bezieht sich auf die erste Auflage (2020) des Buches.   ➜   Zur aktuellen Auflage.

Programme

Alle Programme, die in diesem Buch besprochen werden, und die Programme zu den Musterlösungen der Übungsaufgaben können Sie auch als ein zip-Archiv herunterladen.

Download    Programm 9.7 Schwingungen/fft_sinus_gedaempft.py

"""Fourier-Transformation einer gedämpften Sinusschwingung. """

import numpy as np
import matplotlib.pyplot as plt

# Zeitdauer des Signals [s] und Abtastrate [1/s].
T = 0.2
rate = 44100

# Erzeuge ein gedämpftes, sinusförmiges Signal.
t = np.arange(0, T, 1 / rate)
x = np.sin(2 * np.pi * 500 * t) * np.exp(-30 * t)

# Führe die Fourier-Transformation durch.
x_ft = np.fft.fft(x) / x.size

# Bestimme die zugehörigen Frequenzen.
freq = np.fft.fftfreq(x.size, d=1/rate)

# Sortiere die Frequenzen in aufsteigender Reihenfolge.
freq = np.fft.fftshift(freq)
x_ft = np.fft.fftshift(x_ft)

# Erzeuge eine Figure und ein GridSpec-Objekt.
fig = plt.figure(figsize=(10, 5))
fig.set_tight_layout(True)
gs = fig.add_gridspec(2, 2)

# Erzeuge eine Axes und plotte den Zeitverlauf.
ax1 = fig.add_subplot(gs[:, 0])
ax1.set_xlabel('t [s]')
ax1.set_ylabel('Auslenkung')
ax1.grid()
ax1.plot(t, x)

# Erzeuge eine Axes und plotte Real- und Imaginärteil der
# Fourier-Transformierten.
ax2 = fig.add_subplot(gs[0, 1])
ax2.set_xlabel('Frequenz [Hz]')
ax2.set_ylabel('Amplitude')
ax2.set_xlim(-1000, 1000)
ax2.grid()
ax2.plot(freq, np.real(x_ft), 'r', label='Realteil')
ax2.plot(freq, np.imag(x_ft), 'b', label='Imaginärteil')
ax2.legend(loc='upper right')

# Erzeuge eine Axes und plotte den Betrag der
# Fourier-Transformierten.
ax3 = fig.add_subplot(gs[1, 1])
ax3.set_xlabel('Frequenz [Hz]')
ax3.set_ylabel('Amplitude')
ax3.set_xlim(-1000, 1000)
ax3.grid()
ax3.plot(freq, np.abs(x_ft), label='Betrag')
ax3.legend()

# Zeige den Plot an.
plt.show()