Перейти к основному содержимому

Принцип сжатия AAC

Принципы сжатия AAC

AAC (Advanced Audio Coding) – это аудиокодек, разработанный для замены MP3 и улучшения качества звучания при том же уровне сжатия. Основные принципы сжатия AAC включают в себя несколько ключевых этапов обработки аудиосигнала, направленных на уменьшение избыточности информации и удаление несущественных для восприятия человеком компонентов звука.

Алгоритм кодирования звука в AAC

Для понимания процесса кодирования звука в формате AAC важно учитывать следующие этапы обработки аудиосигнала:

  1. Разделение на фреймы: Входящий аудиосигнал разбивается на небольшие фрагменты (фреймы), каждый из которых обрабатывается отдельно. Обычно длина фрейма составляет 1024 или 2048 выборок.
  2. Модифицированное косинусное преобразование (MDCT): Каждый фрейм подвергается MDCT, которое преобразует временные данные в частотные коэффициенты. Формула MDCT выглядит следующим образом:

Формула 1.

где X(k) — коэффициент частотного спектра, x(n) — значение выборки во временной области, N — размер окна (обычно 1024 или 2048).

  1. Анализ психоакустики: На этом этапе применяются психоакустические модели для анализа частотных составляющих сигнала. Целью является определение тех частот, которые являются малозаметными для человеческого слуха. Такие частоты могут быть удалены или ослаблены без существенного влияния на восприятие.
  2. Перцептивная замена шума (PNS): Высокие частоты, которые трудно передать точно, заменяются шумоподобными сигналами. Это позволяет сэкономить битовый ресурс без заметного ухудшения качества звука. Математически это выражается через замену части частотного спектра случайным белым шумом.
  3. Квантование: Квантование — это процесс округления численных значений до ближайших допустимых уровней. В случае AAC применяется адаптивное квантование, когда шаг квантования выбирается индивидуально для каждой частотной полосы. Шаг квантования определяется на основании психоакустического анализа и требуемого битрейта.
  4. Темпоральная формация шума (TNS): Чтобы минимизировать влияние ошибок квантования на восприятие, TNS перераспределяет эти ошибки по времени таким образом, чтобы они становились менее заметными. Это достигается путем фильтрации остаточного сигнала после квантования.
  5. Энтропийное кодирование: Заключительный этап включает применение энтропийного кодирования, такого как Хаффмановское кодирование, для дальнейшей оптимизации объема данных. Энтропийное кодирование позволяет эффективно упаковывать информацию, используя переменную длину кода для различных символов.

Псевдокод алгоритма

def encode_aac(audio_signal):
# Разбиваем сигнал на фреймы
frames = split_into_frames(audio_signal)

for frame in frames:
# Применяем MDCT
frequency_coefficients = mdct(frame)

# Проводим психоакустический анализ
perceptually_important_bands = psychoacoustic_analysis(frequency_coefficients)

# Применяем PNS
pns_applied_coefficients = apply_pns(perceptually_important_bands)

# Квантуем коэффициенты
quantized_coefficients = adaptive_quantization(pns_applied_coefficients)

# Применяем TNS
tns_processed_coefficients = temporal_noise_shaping(quantized_coefficients)

# Применяем энтропийное кодирование
encoded_data = entropy_coding(tns_processed_coefficients)

# Сохраняем закодированные данные
save_encoded_frame(encoded_data)

Этот псевдокод иллюстрирует основные шаги процесса кодирования звука в формате AAC. Реализация конкретных функций, таких как mdct, psychoacoustic_analysis, apply_pns, adaptive_quantization, temporal_noise_shaping и entropy_coding, зависит от конкретной библиотеки или реализации, которую вы используете.

Вложения