44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
import numpy as np
|
|
# import matplotlib
|
|
# matplotlib.use("TkAgg") # oder "QtAgg", falls Qt installiert ist
|
|
import matplotlib.pyplot as plt
|
|
from scipy.signal import freqz
|
|
|
|
# =========================
|
|
# PARAMETER
|
|
# =========================
|
|
fs = 44100 # Samplerate
|
|
N = 8192 # FFT-Auflösung
|
|
|
|
# Liste von Biquads (Reihenfolge = Signalfluss)
|
|
biquads = [
|
|
([1.026721, -1.919612, 0.901093], [1.0, -1.922258, 0.925168]), # LOWSHELF
|
|
([0.802626, -1.424665, 0.670208 ], [1.0, -1.424665, 0.472834 ]), # PEAKINGEQ
|
|
([2.092489, -2.262849, 0.808592], [1.0, -0.597000, 0.235232]), # HIGHSHELF
|
|
]
|
|
|
|
w = np.linspace(0, np.pi, N)
|
|
H = np.ones_like(w, dtype=complex)
|
|
|
|
for b, a in biquads:
|
|
_, h = freqz(b, a, worN=w)
|
|
H *= h
|
|
|
|
f = w * fs / (2*np.pi)
|
|
mag_db = 20 * np.log10(np.abs(H) + 1e-12)
|
|
|
|
# =========================
|
|
# PLOT
|
|
# =========================
|
|
plt.figure(figsize=(9,5))
|
|
plt.semilogx(f, mag_db)
|
|
plt.xlim(20, fs/2)
|
|
plt.ylim(-15, 15)
|
|
plt.grid(True, which='both')
|
|
plt.xlabel("Frequency (Hz)")
|
|
plt.ylabel("Amplitude (dB)")
|
|
plt.title("Biquad frequency response")
|
|
plt.tight_layout()
|
|
# plt.show()
|
|
plt.savefig("biquad_response.png", dpi=150)
|
|
print("Plot gespeichert als biquad_response.png") |