Построение спектрограммы с использованием Matplotlib

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся создавать график спектрограммы с использованием Matplotlib. Спектрограмма представляет собой визуальное представление спектра частот сигнала в зависимости от времени. Спектрограммы широко используются для анализа частотного состава сигнала в течение времени, например, в области распознавания речи, анализа музыки и обработки аудиосигналов. Мы будем использовать Python и Matplotlib для создания графика спектрограммы сигнала.

Советы по работе с ВМ

После запуска ВМ кликните в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт библиотек

Начнем с импорта необходимых библиотек: NumPy и Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Генерация сигнала

Далее мы сгенерируем сигнал для построения. В этом примере мы создадим сигнал, который представляет собой сумму двух синусоид с разными частотами и некоторого случайного шума.

## Fixing random state for reproducibility
np.random.seed(19680801)

dt = 0.0005
t = np.arange(0.0, 20.0, dt)
s1 = np.sin(2 * np.pi * 100 * t)
s2 = 2 * np.sin(2 * np.pi * 400 * t)

## create a transient "chirp"
s2[t <= 10] = s2[12 <= t] = 0

## add some noise into the mix
nse = 0.01 * np.random.random(size=len(t))

x = s1 + s2 + nse  ## the signal

Генерация спектрограммы

Теперь мы сгенерируем график спектрограммы сигнала. Мы будем использовать метод specgram из класса Axes Matplotlib для генерации спектрограммы. Этот метод возвращает четыре объекта: Pxx, freqs, bins и im. Pxx — это периодограмма, freqs — это вектор частот, bins — это центры временных интервалов, а im — это экземпляр AxesImage, представляющий данные на графике.

NFFT = 1024  ## the length of the windowing segments
Fs = int(1.0 / dt)  ## the sampling frequency

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.plot(t, x)
Pxx, freqs, bins, im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900)

Настройка графика

Мы можем настроить график, добавив заголовки, метки осей и цветовые карты.

fig, (ax1, ax2) = plt.subplots(nrows=2)
ax1.set_title('Time Domain Signal')
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('Amplitude')
ax1.plot(t, x)

ax2.set_title('Spectrogram')
ax2.set_xlabel('Time (s)')
ax2.set_ylabel('Frequency (Hz)')
im = ax2.specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900, cmap='viridis')
fig.colorbar(im[3], ax=ax2)

Отображение графика

Наконец, мы отобразим график.

plt.show()

Резюме

В этом практическом занятии мы узнали, как создавать график спектрограммы с использованием Matplotlib. Мы сгенерировали сигнал и использовали метод specgram из класса Axes Matplotlib для генерации графика спектрограммы. Мы также настроили график, добавив заголовки, метки осей и цветовые карты. Спектрограммы полезны для анализа частотного состава сигнала в течение времени и широко используются в области распознавания речи, анализе музыки и обработке аудиосигналов.