Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет_лаба1.docx
Скачиваний:
2
Добавлен:
25.04.2024
Размер:
313.87 Кб
Скачать

Считывание данных файла и визуализация

Во второй части выполнения данной лабораторной работы необходимо написать программу, которая производит открытие полученного модельного аудиофайла, визуализирует содержащийся в нём сигнал, а также вычисляет и визуализирует амплитудный спектр сигнала. Список используемых переменных представлен в таблице 2, а в листинге 2 – исходный код программы.

Таблица 2. Список используемых переменных

Название

Тип

Описание

Fft_spectrum

Массив чисел

Результат БПФ над исходным сигналом

Magnitude_spectrum

Массив чисел

Амплитудный спектр сигнала

Freqs

Массив чисел

Частотный спектр сигнала

signal

Массив чисел

Исходный сигнал

Sample_rate

целочисленный

Частота дискретизации сигнала

Листинг 2. Открытие и визуализация аудиофайла

def frec_magni_graph(signal, freq: int):

    # Вычисление амплитудного спектра сигнала

    fft_spectrum = np.fft.fft(signal)

    magnitude_spectrum = 20 * np.log10(np.abs(fft_spectrum))

    print(magnitude_spectrum)

    # Генерация частотной оси

    freqs = np.fft.fftfreq(len(fft_spectrum), 1/sample_rate)

    # Построение амплитудного спектра

    plt.figure(figsize=(12, 6))

    plt.plot(freqs[:len(freqs)//2], magnitude_spectrum[:len(freqs)//2])

    plt.xlabel('Частота (Гц)')

    plt.ylabel('Уровень (Дб)')

    plt.title('Амплитудный спектр аудиосигнала')

    plt.grid()

    plt.semilogx()

#--------- Открываем файл для визуализации ------------

signal, sample_rate = sf.read("output_audio.wav")

t = [i/sample_rate for i in range(len(signal))]

plt.figure(figsize=(12, 6))

plt.plot(t, signal, label=['Левое ухо', "Правое ухо"], alpha=0.6)

plt.legend()

plt.ylabel("Максимальная амплитуда")

plt.xlabel("Время (с)")

plt.title("График сигнала для разных каналов")

#---------- Вычисление и визуализация АЧХ ------------

signal, sample_rate = sf.read("output_audio.wav")

frec_magni_graph(signal[:,0], sample_rate)

plt.show()

Далее необходимо проверить работу данной программы. Попробуем сгенерировать аудиосигнал длительностью 7 секунд с частотой 1000 Гц. На рисунке 3 приведена визуализация исходного аудиосигнала, а на рисунке 4 – амплитудный спектр сигнала.

Рисунок 3 – Визуализация аудиосигнала

Рисунок 4 – Амплитудный спектр сигнала

Как видно из данных рисунков, визуализации соответствуют действительности, поскольку из 3 рисунка видно, что длительность аудиосигнала – 7 секунд (ось х), а из 4 рисунка – частота сигнала ровно 100 Гц. Далее попробуем взять любой другой аудиофайл и создадим для него точно такие же визуализации. В качестве звукового файла была выбрана музыка из радио из игры Portal [6]. Созданные визуализации показаны на рисунках 5 и 6.

Рисунок 5 – Визуализация аудиофайла

Рисунок 6 – Амплитудный спектр сигнала

Выводы

Подводя итоги к проделанной работе, можно сделать вывод о том, что в ходе выполнения данной лабораторной работы мною были получены элементарные навыки по работе с аудиофайлами на языке Python, а именно генерация звуковых дорожек заданной длинны, заданной частоты и с определенным условием. Помимо этого, я получил навык по визуализации аудиофайла, а также по созданию амплитудного спектра сигнала. По данному спектру было видно, что сгенерированный звук имеет идеальный пик по амплитуде ровно в той частоте, на которой и был создан звук. При создании такого же спектра, только уже сложного аудиосигнала достаточно трудно выявить какие-то преобладающие частоты.

Соседние файлы в предмете Мультимедиа технологии