Ответ
Частота дискретизации (sample rate) — это количество отсчетов (сэмплов) аналогового сигнала, взятых за одну секунду для его преобразования в цифровую форму. Измеряется в герцах (Гц).
Ключевые концепции:
- Теорема Котельникова-Найквиста: Для точного восстановления сигнала частота дискретизации (
f_s) должна быть как минимум вдвое выше максимальной частоты (f_max) в спектре сигнала:f_s > 2 * f_max. Частотаf_maxназывается частотой Найквиста. - Алиасинг (наложение спектров): Если условие теоремы нарушено, высокочастотные компоненты сигнала «маскируются» под низкочастотные, искажая цифровую запись. Для борьбы с этим перед дискретизацией применяют антиалиасинговый фильтр.
Практические примеры:
- Аудио CD: 44.1 кГц (захватывает звуки до ~22.05 кГц, что чуть выше предела слуха человека).
- Высококачественный звук: 48 кГц, 96 кГц.
- Телефонная связь: 8 кГц (речь в полосе до 3.4 кГц).
Визуализация на Python:
import numpy as np
import matplotlib.pyplot as plt
# Параметры исходного аналогового сигнала (1 Гц)
f_signal = 1.0 # Гц
T = 2.0 # Длительность в секундах
# 1. Дискретизация с высокой частотой (10 Гц) - хорошая
fs_high = 10.0
t_high = np.arange(0, T, 1/fs_high)
signal_high = np.sin(2 * np.pi * f_signal * t_high)
# 2. Дискретизация с низкой частотой (1.5 Гц) - алиасинг!
fs_low = 1.5
t_low = np.arange(0, T, 1/fs_low)
signal_low = np.sin(2 * np.pi * f_signal * t_low)
# Построение графиков
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6))
# Исходный сигнал (непрерывный)
t_cont = np.linspace(0, T, 1000)
signal_cont = np.sin(2 * np.pi * f_signal * t_cont)
ax1.plot(t_cont, signal_cont, 'g-', alpha=0.5, label='Аналоговый сигнал (1 Гц)')
ax1.stem(t_high, signal_high, linefmt='b-', markerfmt='bo', basefmt=' ', label=f'Сэмплы (fs={fs_high} Гц)')
ax1.set_title('Корректная дискретизация (fs > 2 * f_signal)')
ax1.legend()
ax2.plot(t_cont, signal_cont, 'g-', alpha=0.5, label='Аналоговый сигнал (1 Гц)')
ax2.stem(t_low, signal_low, linefmt='r-', markerfmt='ro', basefmt=' ', label=f'Сэмплы (fs={fs_low} Гц) -> Алиасинг!')
ax2.set_title('Некорректная дискретизация (fs < 2 * f_signal)')
ax2.legend()
plt.tight_layout()
plt.show()