def build_plot_by_signal_section(start: float, end: float, signal: np.array, fs: int) -> np.ndarray: """Функція побудови графіку за заданим інтервалом часу, масивом даних та частотою дискретизації. На виході функції вектор з відліками часу і сигналу""" time = get_signal_duration(signal, fs) start_id = int(start * fs) end_id = int(end * fs) + 1 if start_id < 0 or end_id > len(time) or start_id > end_id: return f"Введено некоректний проміжок. Проміжок має бути від 0 до {round(len(time)/fs, 2)} секунд" section_time = time[start_id:end_id] section_signal = signal[start_id:end_id] build_single_plot(section_time, section_signal) return np.column_stack((section_time, section_signal))
frames = int(fs * duration) filename = f'{path}record_{fs}_{datetime.datetime.now().strftime("%H%M%S")}.wav' print('Йде запис...') record = sd.rec(frames=frames, samplerate=fs, channels=1) sd.wait() write(filename, fs, record) print('Запис завершено!') return filename sample_rate = 8000 # при записі іншого аудіфайлу замінюється значення дискретизації на 44100 duration = 5 path_to_save = '../data/sound_records/' # запис аудіофайлу filename = record_sound(duration, sample_rate, path_to_save) data, _ = sf.read(filename, dtype='float32') time = get_signal_duration(data, sample_rate) # побудова графіку build_single_plot(time, data, x_label='Час, t', y_label='Амплітуда, А', size=(12, 4), title=f'Графік аудіофайлу {sample_rate}Гц', plot_name_to_save=f'sound_plot_{sample_rate}') # відтворення записаного файлу sd.play(data, sample_rate) sd.wait()
import numpy as np from laba3.services import get_signal_duration, build_multiple_plot ekg_normal = np.load('../data/norm/1600715877.npz') ekg_anomaly = np.load('../data/anomaly/1600717447.npz') fs = ekg_normal['fs'] save_as = 'EKG_plot' time_normal = get_signal_duration(ekg_normal['signal'], fs) time_anomaly = get_signal_duration(ekg_anomaly['signal'], fs) data_list = [{ "title": "ЕКГ в нормі", "time": time_normal, "signal": ekg_normal['signal'] }, { "title": "ЕКГ аномальне", "time": time_anomaly, "signal": ekg_anomaly['signal'] }] ylabel = ['Напруга, мВ', 'Напруга, мВ'] labels = [ekg_normal['labels'], ekg_anomaly['labels']] labels_indexes = [ekg_normal['labels_indexes'], ekg_anomaly['labels_indexes']] build_multiple_plot(2, data_list, title='Графіки сигналів ЕКГ', x_label='Час, с', y_label=ylabel, labels=labels, labels_indexes=labels_indexes, plot_name_to_save=save_as)
import numpy as np from laba3.services import get_signal_duration, build_single_plot signal = np.load('../data/TBI_ICP.npy') sample_rate = 125 time = get_signal_duration(signal, sample_rate) build_single_plot(time, signal, x_label="Час, с", y_label="Тиск, мм рт.ст.", title="Графік внутрішньочерепного тиску", plot_name_to_save="intracranial_pressure_plot")
import numpy as np from laba3.services import get_signal_duration, build_multiple_plot path_standing = '../data/standing.csv' path_running = '../data/running.csv' path_walking = '../data/walking.csv' paths = [path_standing, path_running, path_walking] saves = ['standing', 'running', 'walking'] for path, save in zip(paths, saves): data = np.genfromtxt(path, delimiter=';', encoding='utf-8', skip_header=True) accelerometers = data[:, :3] gyroscopes = data[:, 3:] sample_rate = 2 time_array = get_signal_duration(data, sample_rate) data_list = [ {'title': "Акселерометр", 'signal': accelerometers, 'time': time_array}, {'title': "Гіроскоп", 'signal': gyroscopes, 'time': time_array} ] label_y = [r'Прискорення, $\frac{м}{с^{2}}$', r'Кутова швидкість, $\frac{град.}{с}$'] legend = ["X", 'Y', 'Z'] build_multiple_plot(2, data_list, title=f'Графіки сигналів ({save})', x_label='Час, с', y_label=label_y, legend=legend, plot_name_to_save=save)