[PYTHON] RC-Schaltungssimulation

Ich möchte den Geräuschpegel aus der vom Geräuschmesser aufgezeichneten Stimme berechnen

In Bezug auf die Zeitgewichtungscharakteristik des Geräuschmessers scheint Fast eine Zeitkonstante von 125 ms zu haben. Ich habe viel recherchiert, um dies mit Python zu tun, also machen Sie sich eine Notiz.

In dem Geräuschmesser, den ich benutze, den in diesem Bild, den ich ausgeliehen habe Es scheint, dass der Schalldruck im Quadrat zu $ V_ {in} $ eingegeben und $ V_ {out} $ ausgegeben wird. Ich habe überhaupt keine Schaltungen gemacht, also habe ich herumgetastet.

RC回路

Ich habe beschlossen, es mit der Ausgabe der folgenden Site zu vergleichen, um zu überprüfen, ob es richtig simuliert werden kann. (Amateur weiß nicht, was richtig ist. Übrigens, wenn Sie denken, es ist ein Schaltplan oder ein Bild, werden Sie überrascht sein, es bedienen zu können!) Transientenanalyse / Wechselstromanalyse der primären RC-Schaltung

Nachdem Sie verschiedene Dinge untersucht haben, scheint es, dass Sie dies mit scipy.signal, control.matlab tun können. (Zuerst waren beide verwirrt und in Panik ...)

Hier ist die Frequenzcharakteristik der RC-Schaltung, die Sie simulieren möchten.

\begin{align}
\text{Frequenzcharakteristik:}\quad \frac{V_{out}(s)}{V_{in}(s)}&=\frac{1}{1+sCR}\\
\end{align}

Methoden, um dies zu reproduzieren, sind scipy.signal.lsim und control.matlab.lsim. //python-control.readthedocs.io/de/0.8.3/generated/control.matlab.lsim.html).

Sie können ein lineares zeitinvariantes System erstellen und ein beliebiges Signal eingeben, um die Ausgabe zu erhalten. scipy verwies auf diese Site. Wenn Sie beispielsweise $ lti ([a_1, a_2, a_3], [b_1, b_2, b_3]) $ angeben Die Frequenzcharakteristiken sind $ \ frac {a_1 s ^ 2 + a_2 s + a_3} {b_1 s ^ 2 + b_2 s + b_3} $ Es scheint, dass sich die Anzahl der Stunden erhöht, wenn Sie die erforderliche Anzahl festlegen. Für RC-Schaltungen ist $ lti ([1], [R * C, 1]) $ in Ordnung.

Das konnte ich tun.

RC_circuit_signal.py


from matplotlib import pyplot as plt
import scipy.signal as sg
import numpy as np

R    = 1000        # 1k Ohm(s/F)
C    = 0.000_000_1 # 0.1 F 
# 1 / (R * C * s + 1)
num  = [1]
den  = [R * C, 1]
t    = np.linspace(0, 0.01, 1000) 
freq = 250   
v_in = 0.5 + 0.5 * np.sign(np.sin(2 * np.pi * freq * (t - 0.001))) 

system = sg.lti(num, den) 
t_out, v_out, x = sg.lsim(system, v_in, t)

plt.style.use('grayscale')
plt.plot(t,     v_in,  label="$V_{in}$")
plt.plot(t_out, v_out, label="$V_{out}$")
plt.xlabel('Time[s]')
plt.ylabel('Amplitude')
plt.legend()
plt.grid()
plt.show()

image.png

control.matlab erstellt ein System mit control.tf. Es sieht ähnlich aus wie das vorherige, aber es sieht so aus. Es ist unangenehm, dass die Reihenfolge der Rückgabewerte von lsim unterschiedlich ist. .. ..

RC_circuit_control_matlab.ipynb


from matplotlib import pyplot as plt
import control.matlab as ctrl
import numpy as np

R    = 1000        # 1k Ohm(s/F)
C    = 0.000_000_1 # 0.1 F 
# 1 / (R * C * s + 1)
num  = [1]
den  = [R * C, 1]
t    = np.linspace(0, 0.01, 1000) 
freq = 250   
v_in = 0.5 + 0.5 * np.sign(np.sin(2 * np.pi * freq * (t - 0.001))) 

system = ctrl.tf(num, den)
print(system)
v_out, t_out, x = ctrl.lsim(system, v_in, t)

plt.style.use('grayscale')
plt.plot(t,     v_in,  label="$V_{in}$")
plt.plot(t_out, v_out, label="$V_{out}$")
plt.xlabel('Time[s]')
plt.ylabel('Amplitude')
plt.legend()
plt.grid()
plt.show()
      1
------------
0.0001 s + 1

image.png

Übrigens wird bei der Ausgabe des erstellten Systems die Formel angezeigt. Clever!

import control.matlab as ctrl
ctrl.tf([1,2,3], [4,5,6])
\frac{s^2 + 2 s + 3}{4 s^2 + 5 s + 6}

Wie ich dieses Mal zum ersten Mal erfahren habe, ist die Python Control Systems Library jedenfalls erstaunlich. Formeln können programmgesteuert geschrieben werden und Formeln erscheinen deutlich in Bildern. Darüber hinaus ist es möglich, Differentialgleichungen zu lösen und Simulationen durchzuführen. Es ist anders als früher. .. .. (Früher habe ich die Gleichung, nachdem ich sie selbst gelöst hatte, in eine Differenzgleichung umgewandelt und ein Programm erstellt, aber jetzt halte ich es nicht für notwendig.)

Die Seite, die ich heute gesehen habe. Als Memo aufgeführt.

Recommended Posts

RC-Schaltungssimulation
Rolltreppensimulation