trapezoid function
rodzic
e070bdcda4
commit
f6c579f04b
36
sample.py
36
sample.py
|
@ -35,6 +35,30 @@ dy = 0.0
|
||||||
|
|
||||||
shape = False # False = koło , True = kwadrat
|
shape = False # False = koło , True = kwadrat
|
||||||
|
|
||||||
|
# definicja funkcji trapezowej - do generowania kształtu kwadratu na ekranie X/Y
|
||||||
|
def trapezoid(angle):
|
||||||
|
"""
|
||||||
|
Funkcja generuje sygnał w postaci trapezowego przebiegu na podstawie kąta.
|
||||||
|
Zakłada 4 segmenty:
|
||||||
|
- pierwszy: liniowy wzrost
|
||||||
|
- drugi: stała funkcja
|
||||||
|
- trzeci: liniowy spadek
|
||||||
|
- czwarty: stała funkcja
|
||||||
|
"""
|
||||||
|
# Dopasowanie kąta do zakresu 0..2*pi (obsługuje kąty większe niż 2*pi)
|
||||||
|
angle = angle % (2 * np.pi)
|
||||||
|
|
||||||
|
# Sygnał o wartościach -1 do 1
|
||||||
|
if 0 <= angle < np.pi / 2: # Pierwszy segment: rosnąca funkcja liniowa
|
||||||
|
return 2 * (angle / (np.pi / 2)) - 1 # Liniowy wzrost od -1 do 1
|
||||||
|
elif np.pi / 2 <= angle < np.pi: # Drugi segment: stała funkcja
|
||||||
|
return 1 # Funkcja stała (maksimum)
|
||||||
|
elif np.pi <= angle < 3 * np.pi / 2: # Trzeci segment: malejąca funkcja liniowa
|
||||||
|
return -2 * (angle - np.pi) / (np.pi / 2) + 1 # Liniowy spadek od 1 do -1
|
||||||
|
elif 3 * np.pi / 2 <= angle < 2 * np.pi: # Czwarty segment: stała funkcja
|
||||||
|
return -1 # Funkcja stała (minimum)
|
||||||
|
return 0 # Domyślny przypadek
|
||||||
|
|
||||||
# kształt = koło
|
# kształt = koło
|
||||||
def gen_circle():
|
def gen_circle():
|
||||||
global l_org_samples, r_org_samples
|
global l_org_samples, r_org_samples
|
||||||
|
@ -42,13 +66,21 @@ def gen_circle():
|
||||||
l_org_samples = np. sin(2 * np.pi * frequency * t) * scale # lewy kanał
|
l_org_samples = np. sin(2 * np.pi * frequency * t) * scale # lewy kanał
|
||||||
r_org_samples = np.cos(2 * np.pi * frequency * t) * scale # prawy kanał
|
r_org_samples = np.cos(2 * np.pi * frequency * t) * scale # prawy kanał
|
||||||
|
|
||||||
# kształt = kwadrat
|
# kształt = kwadrat ( na podstawie f.kwadratowej, ale to renderuje 4 punkty a nie ślad kwadratu)
|
||||||
def gen_square():
|
def gen_square4():
|
||||||
global l_org_samples, r_org_samples
|
global l_org_samples, r_org_samples
|
||||||
t = np.arange(0, sample_duration, 1/sample_rate) # czas
|
t = np.arange(0, sample_duration, 1/sample_rate) # czas
|
||||||
l_org_samples = np.sign(np.sin(2 * np.pi * frequency * t)) * scale # lewy kanał
|
l_org_samples = np.sign(np.sin(2 * np.pi * frequency * t)) * scale # lewy kanał
|
||||||
r_org_samples = np.sign(np.cos(2 * np.pi * frequency * t)) * scale # prawy kanał
|
r_org_samples = np.sign(np.cos(2 * np.pi * frequency * t)) * scale # prawy kanał
|
||||||
|
|
||||||
|
# ksztalt = kwadrat ale rysowany funkcją trapezową
|
||||||
|
def gen_square():
|
||||||
|
global l_org_samples, r_org_samples
|
||||||
|
t = np.arange(0, sample_duration, 1/sample_rate) # czas
|
||||||
|
angles = 2 * np.pi * t # Kąt w pełnym okresie 0 do 2*pi
|
||||||
|
l_org_samples = np.array([trapezoid(angle * frequency) for angle in angles]) * scale # lewy kanał , faza = 0
|
||||||
|
r_org_samples = np.array([trapezoid(angle * frequency + np.pi/2) for angle in angles]) * scale # prawy kanał , faza = pi/2
|
||||||
|
|
||||||
def set_shape(shape):
|
def set_shape(shape):
|
||||||
if shape:
|
if shape:
|
||||||
gen_square()
|
gen_square()
|
||||||
|
|
Ładowanie…
Reference in New Issue