Передискретизация

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Иллюстрация эффекта наложения спектров (алиасинга) при уменьшении разрешения (децимации) растрового изображения. Сверху — изображение, уменьшенное без фильтрации. Снизу — изображение, уменьшенное с применением фильтра нижних частот.

Передискретиза́ция (англ. resampling) в обработке сигналов — изменение частоты дискретизации дискретного (чаще всего цифрового) сигнала. Алгоритмы передискретизации широко применяются при обработке звуковых сигналов, радиосигналов и изображений (передискретизация растрового изображения — это изменение его разрешения в пикселах).

Отсчёты сигнала, соответствующие новой частоте дискретизации, вычисляются по уже имеющимся отсчётам и не содержат новой информации.

Повышение частоты дискретизации называется интерполяцией, понижение — децимацией.[1]

Общие принципы[править | править вики-текст]

Вычисление промежуточного отсчёта (в точке −0,5) дискретного сигнала с помощью идеального фильтра нижних частот. Синяя кривая — исходный непрерывный сигнал, зелёная — импульсная характеристика идеального ФНЧ. Для интерполяции суммируются значения импульсной характеристики в точках отсчётов, умноженные на величину соответствующих отсчётов.

Согласно теореме Котельникова любой непрерывный сигнал с финитным спектром (то есть таким спектром, в котором спектральные составляющие, соответствующие частотам выше или равным некоторой частоты f_0, отсутствуют) может быть представлен в виде отсчётов дискретного сигнала с частотой дискретизации f_d>2 f_0. При этом такое преобразование является взаимно однозначным, то есть при соблюдении условий теоремы Котельникова по дискретному сигналу можно восстановить исходный сигнал с финитным спектром без искажений.[2]

При передискретизации отсчёты сигнала, соответствующие одной частоте дискретизации, вычисляются по имеющимся отсчётам этого же сигнала, соответствующим другой частоте дискретизации (при этом предполагается, что обе частоты дискретизации соответствуют условиям теоремы Котельникова). Идеальная передискретизация эквивалентна восстановлению непрерывного сигнала по его отсчётам с последующей дискретизацией его на новой частоте.[3]

Точное вычисление значения исходного непрерывного сигнала в определённой точке производится следующим образом:[4][5]

\,\!x(t)=\sum_i x(t_i) \frac{\sin \frac{\omega_d}{2}(t-t_i)}{\frac{\omega_d}{2}(t-t_i)},

где x(t_i) — i-й отсчёт сигнала, t_i — момент времени, соответствующий этому отсчёту, \omega_d=2 \pi f_dциклическая частота дискретизации, x(t) — интерполированное значение сигнала в момент времени t.

Функция \frac{\sin \frac{\omega_d}{2}(t-t_i)}{\frac{\omega_d}{2}(t-t_i)} не является финитной, поэтому для вычисления значения сигнала в определённый момент времени с помощью вышеприведённого выражения необходимо обработать бесконечное число его отсчётов (как в прошлом, так и в будущем), что нереализуемо на практике. В реальной жизни интерполяция осуществляется с помощью других фильтров, при этом выражение для неё принимает следующий вид:[6][7]

\,\!x(t)=\sum_i x(t_i) h(t-t_i),

где h(t)импульсная характеристика соответствующего восстанавливающего фильтра. Вид этого фильтра выбирается в зависимости от задачи.[8]

Прямое вычисление новых отсчётов сигнала по вышеприведённым формулам требует значительных вычислительных ресурсов и нежелательно для приложений реального времени. Существуют важные частные случаи передискретизации, для которых вычисление новых отсчётов производится проще:[9]

  • децимация с целым коэффициентом (уменьшение частоты дискретизации в целое число раз);
  • интерполяция с целым коэффициентом (увеличение частоты дискретизации в целое число раз);
  • изменение частоты дискретизации в рациональное (M/N) число раз (этот случай можно рассматривать как комбинацию двух предыдущих).

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

Передискретизация с помощью цифровых фильтров[править | править вики-текст]

Иллюстрация алгоритма децимации дискретного сигнала (с коэффициентом 2). Красные точки обозначают отсчеты, сплошные линии — непрерывный сигнал, представлением которого эти отсчеты являются. Сверху — исходный сигнал. В середине — этот же сигнал после фильтрации в цифровом фильтре нижних частот. Снизу — децимированный сигнал.
Иллюстрация алгоритма интерполяции дискретного сигнала (с коэффициентом 2). Красные точки обозначают исходные отсчеты сигнала, сплошные линии — непрерывный сигнал, представлением которого эти отсчеты являются. Сверху — исходный сигнал. В середине — этот же сигнал со вставленными нулевыми отсчётами (зеленые точки). Снизу — интерполированный сигнал (синие точки — интерполированные значения отсчётов).

Выбор фильтра для передискретизации[править | править вики-текст]

Выбор функции h(t) обуславливается компромиссом между качеством передискретизации (то есть близости её к идеальной) и вычислительной сложностью этого процесса. В принципе, для передискретизации может быть использован любой фильтр нижних частот с необходимой частотой среза. КИХ-фильтры применяются для этих задач чаще, чем БИХ-фильтры, из-за возможности построения КИХ-фильтров с линейной фазо-частотной характеристикой.[10]

Чаще всего при передискретизации используются следующие классы цифровых фильтров:[11]

1. Фильтры, построенные, исходя из критерия близости частотной характеристики к частотной характеристике идеального фильтра нижних частот:

1.1. Оконные sinc-фильтры (англ. windowed-sinc filters) — их импульсная характеристика h(t) получается путём умножения импульсной характеристики идеального ФНЧ на оконную функцию,
1.2. Равноволновые фильтры Чебышёва.

2. Классические способы интерполяции функций (часто применяются для изображений)[12]:

2.1. Линейные интерполяторы,
2.2. Интерполяторы Лагранжа (частный случай — кубическая интерполяция).

3. CIC-фильтры (каскады гребёнчатых фильтров и интеграторов).[13] Этот класс фильтров не использует умножений при вычислении, что позволяет сэкономить вычислительные ресурсы.

Децимация с целым коэффициентом[править | править вики-текст]

Процесс уменьшения частоты дискретизации сигнала называется децимацией.[1] Иногда этот термин употребляют только для уменьшения частоты дискретизации в целое число раз (далее N).[14] Децимация цифрового сигнала с целым коэффициентом производится в два этапа:[10][15]

  1. Цифровая фильтрация сигнала с целью удаления высокочастотных составляющих, не удовлетворяющих условиям теоремы Котельникова для новой частоты дискретизации;
  2. Удаление (отбрасывание) лишних отсчетов (сохраняется каждый N-й отсчёт).

В англоязычной литературе второй из этих этапов иногда обозначают термином downsampling.[16] В обиходе этот термин может употребляться как синоним термина «децимация».

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

При программной реализации алгоритма децимации «лишние» отсчёты не удаляются, а просто не вычисляются. При этом число обращений к цифровому фильтру уменьшается в N раз. При аппаратной реализации экономии можно достичь путём использования полифазных фильтров.[17]

Интерполяция с целым коэффициентом[править | править вики-текст]

Интерполяцией называют увеличение частоты в целое или дробное число раз[1] путем вычисления промежуточных отсчетов по уже имеющимся. Идеальная интерполяция позволяет точно восстановить значения сигнала в промежуточных отсчётах.

Стандартный алгоритм интерполяции сигнала с целым коэффициентом заключается в следующем:[18]

  1. вставка нулевых отсчетов на место отсчетов, которые необходимо вычислить;
  2. фильтрация сигнала цифровым фильтром нижних частот для того, чтобы убрать спектральные составляющие сигнала, которых заведомо не могло быть в исходном сигнале согласно теореме Котельникова; выход фильтра умножается на коэффициент интерполяции для нормирования.

В англоязычной литературе первый из этих этапов иногда обозначается термином upsampling.[16] При этом в обиходе этот термин может употребляться как синоним термина «интерполяция».

При программной реализации интерполяции нулевые отсчёты не участвуют в вычислении выходного сигнала фильтра, что позволяет оптимизировать процесс вычисления. При аппаратной реализации для экономии ресурсов возможно использование полифазных фильтров.[19][20]

Комбинация интерполяции и децимации[править | править вики-текст]

Для того, чтобы изменить частоту дискретизации сигнала в \frac{M}{N} раз (M и N — целые положительные числа), можно сначала увеличить частоту дискретизации в M раз, а затем уменьшить её в N раз. Фильтрацию сигнала достаточно произвести всего один раз — между интерполяцией и децимацией.[21]

Недостатком данного метода является необходимость фильтрации сигнала на повышенной в M раз частоте дискретизации, что требует значительных вычислительных ресурсов. При этом соответствующая частота может во много раз превосходить как исходную, так и окончательную частоту передискретизации, особенно если M и N — близкие большие числа.[22] Так, например, при передискретизации звукового сигнала с 44100 Гц до 48000 Гц этим методом необходимо увеличить частоту дискретизации в 160 раз до 7056000 Гц и затем уменьшить её в 147 раз до 48000 Гц. Таким образом, в данном примере вычисления приходится производить на частоте дискретизации более 7 МГц.

Передискретизация с помощью полифазных фильтров[править | править вики-текст]

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

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

Полифазные фильтры применяются для передискретизации как с целым, так и с дробным коэффициентом.[24]

Передискретизация с помощью дискретного преобразования Фурье[править | править вики-текст]

Передискретизация с помощью ДПФ используется для повышения частоты дискретизации в целое или дробное число раз. Алгоритм работает только с конечными отрезками сигнала. Пусть N — начальное число отсчётов, M — число отсчётов в передискретизованном сигнале. Алгоритм включает в себя следующие операции:[25][26]

1. Вычисляется ДПФ исходного сигнала (чаще всего по алгоритму быстрого преобразования Фурье).

2. В середину спектра вставляется необходимое число нулевых компонент:

2.1. если N нечётное:
\begin{cases} y_i=x_i & 1 \le i \le \frac{N+1}{2} \\ y_i=0 & \frac{N+1}{2}+1 \le i \le \frac{N+1}{2}+M-N\\ y_{i}=x_{i-M+N} & \frac{N+1}{2}+M-N+1 \le i \le M \end{cases}
2.2. если N чётное:
\begin{cases} y_i=x_i & 1 \le i \le \frac{N}{2} \\ y_i=\dfrac{x_{\frac{N}{2}+1}}{2} & i=\frac{N}{2}+1 \\ y_{i}=0 & \frac{N}{2}+2 \le i \le \frac{N}{2}+M-N \\ y_i=\dfrac{x_{\frac{N}{2}+1}}{2} & i=\frac{N}{2}+M-N+1 \\ y_i=x_{i-M+N} & \frac{N}{2}+M-N+2 \le i \le M \end{cases}

3. Вычисляется обратное дискретное преобразование Фурье с нормировкой.

Любой метод, основанный на ДПФ, предназначен в первую очередь для периодических дискретных сигналов. Для обработки непериодических сигналов необходимо выбирать отрезки сигнала для вычисления ДПФ таким образом, чтобы их концы перекрывались.[27]

Применения[править | править вики-текст]

Широко применяется как аппаратная (на основе специализированных микросхем[28][29] или FPGA[30]), так и программная (на базе процессоров общего назначения (см. ниже) или сигнальных процессоров[31]) реализация алгоритмов передискретизации.

Выбор конкретной реализации алгоритма передискретизации является результатом компромисса между качеством преобразования и его вычислительной сложностью. Основным параметром, влияющим на эти характеристики, является близость используемых цифровых фильтров к идеальным. Более качественные фильтры требуют больших ресурсов для вычисления.[32]

На практике передискретизация в большинстве случаев ведёт к потере информации о сигнале по следующим причинам:

  • при уменьшении частоты дискретизации сигнал необходимо отфильтровать с целью удаления высокочастотных спектральных составляющих, которые не соответствуют условиям теоремы Котельникова для новой частоты дискретизации;
  • неизбежная неидеальность применяемых цифровых фильтров;[33]
  • вычисления, производимые над цифровыми (квантованными по уровню) сигналами ведут к необратимым ошибкам округления.[34]

Таким образом, при увеличении частоты дискретизации с последующим уменьшением её до исходного значения качество сигнала будет потеряно (если только высокая частота не кратна низкой).

Дискретизация сигналов с запасом по частоте дискретизации[править | править вики-текст]

Дискретизация сигналов с запасом по частоте дискретизации (англ. oversampling) подразумевает дискретизацию сигнала на частоте, в несколько раз превышающей частоту Котельникова с последующей децимацией. Такой подход позволяет добиться следующих преимуществ[35]:

Аналогичный подход применяется и при восстановлении сигнала по его отсчётам для упрощения аналогового фильтра восстановления.[36]

При обработке звука[править | править вики-текст]

Оборудование, предназначенное для воспроизведения цифрового звука, как правило, рассчитано на вполне определённую частоту дискретизации сигнала непосредственно перед цифро-аналоговым преобразованием. Все звуковые сигналы с другими частотами дискретизации должны быть рано или поздно передискретизованы[37].

Передискретизация звукового сигнала на требуемую частоту может осуществляться медиаплеером, драйвером звуковой карты или самой звуковой картой. Использование программы-проигрывателя для данной цели может быть оправдано, если есть желание избежать аппаратной передискретизации звука (или передискретизации драйвером) с целью добиться более высокого качества (при большей загрузке центрального процессора). Однако программная передискретизация воспроизводимого материала на частоту, отличную от частоты, поддерживаемой оборудованием, не имеет смысла и приводит только к потере качества сигнала.

Существуют программные передискретизаторы звуковых сигналов с открытым исходным кодом:

  • SRC (Secret Rabbit Code) или libsamplerate[38] — существует плагин для foobar2000;
  • SSRC[39] — существуют плагины для Winamp и foobar2000.
  • SOXR[40] — качественный, быстрый, с минимальными требованиями к ресурсам[41]. Содержит библиотеку для замены SRC, подключается к foobar2000, используется в FFmpeg (с версии 1.1.1), Audacity и других проектах.

Также передискретизация поддерживается программами-редакторами звука (такими как Adobe Audition, Sony Sound Forge или Audacity).

При обработке изображений[править | править вики-текст]

Иллюстрация эффекта муара, вызванного наложением спектров при уменьшении разрешения изображения. Сверху — оригинал, снизу слева — изображение, уменьшенное в 2 раза без фильтрации, снизу справа — изображение, уменьшенное в 2 раза с фильтрацией.

Изменение разрешения является одной из распространённых операций обработки изображений. Передискретизация, приближенная к идеальной, не всегда является желательной. Наоборот, результаты работы фильтров с частотной характеристикой, далёкой от идеальной, могут визуально восприниматься как хорошие.[42] Выбор фильтра для передискретизации является результатом компромисса между типом и выраженностью артефактов и вычислительной сложностью преобразования (актуальной для приложений реального времени).

Типичные артефакты при изменении разрешения изображения:[12]:

Для передискретизации изображений применяется большое число фильтров, которые можно классифицировать следующим образом[12]:

  1. Фильтры интерполяционного типа, обладающие сравнительно узкой импульсной характеристикой. К ним относятся, в частности, треугольный фильтр, производящий билинейную интерполяцию и полином Лагранжа, с помощью которого можно реализовать бикубическую интерполяцию. Применение таких фильтров позволяет осуществить передискретизацию изображения достаточно быстро.
  2. Фильтры с колоколообразной характеристикой, такие как фильтр Гаусса. Эти фильтры хорошо справляются с пикселизацией, звоном и алиасингом, а также отфильтровывают высокочастотные шумы. Их недостаток — заметное размытие изображения.
  3. Оконные sinc-фильтры. Sinc-фильтр — это идеальный фильтр нижних частот. Как говорилось выше, он не может быть реализован. Однако если частотную характеристику sinc-фильтра умножить на оконную функцию, получится реализуемый фильтр с хорошими спектральными свойствами. При применении данных фильтров к изображениям удаётся сохранить относительно высокую чёткость (даже при увеличении разрешения), но может быть сильно заметен эффект звона. Одним из наиболее часто применяемых фильтров данного типа является фильтр Ланцоша.

Нижеприведённые изображения иллюстрируют применение наиболее часто используемых фильтров изменения размера изображений. При увеличении размера изображения без фильтра изображение получается чётким, но пикселизованным. При билинейной интерполяции пикселизация меньше заметна, но изображение размыто. При использовании фильтра Гаусса изображение размыто, но пикселизации практически не заметно. При использовании фильтра Ланцоша пикселизация отсутствует, изображение также размыто и заметен звон (видимый как светлая каёмка вокруг фигур).

При обработке радиосигналов[править | править вики-текст]

При демодуляции цифровых сигналов желательно, чтобы частота дискретизации сигнала была кратна его скорости манипуляции (иначе говоря, чтобы на каждый символ приходилось одинаковое число отсчётов сигнала). Однако частота дискретизации входного сигнала с АЦП, как правило, фиксирована, а скорость манипуляции может меняться. Решением является передискретизация сигнала.[43]

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. 1 2 3 Crochiere, Rabiner 1983, p. 3
  2. Crochiere, Rabiner 1983, p. 19
  3. Crochiere, Rabiner 1983, p. 22
  4. Crochiere, Rabiner 1983, p. 20
  5. Романюк 2005, с. 136.
  6. Crochiere, Rabiner 1983, p. 21
  7. Романюк 2005, с. 149.
  8. Crochiere, Rabiner 1983, p. 180
  9. Crochiere, Rabiner 1983, p. 29
  10. 1 2 Лайонс 2006, с. 383.
  11. Crochiere, Rabiner 1983, p. 143
  12. 1 2 3 Resize and Scaling на сайте программы ImageMagick.
  13. Understanding cascaded integrator-comb filters
  14. Лайонс 2006, с. 382.
  15. 1 2 Crochiere, Rabiner 1983, p. 31
  16. 1 2 Upsampling and interpolation, downsampling and decimation.
  17. Polyphase decimation filter.
  18. Лайонс 2006, с. 387.
  19. Polyphase interpolation filters.
  20. 1 2 Лайонс 2006, с. 391.
  21. Лайонс 2006, с. 389.
  22. Interpolation, Decimation, and Rate Changing by Integer Fractions.
  23. Crochiere, Rabiner 1983, p. 79
  24. Polyphase resampling with a rational factor.
  25. Романюк 2005, с. 223.
  26. Interpolation using FFT.
  27. Романюк 2005, с. 287.
  28. Микросхема GC5016 от Texas Instruments.
  29. Преобразователи частоты дискретизации от Analog Devices.
  30. Xilinx XAPP1113: Designing Efficient Digital Up and Down Converters
  31. ADSP-21000 Family Applications Handbook (Vol 1.0)
  32. Лайонс 2006, с. 181.
  33. Crochiere, Rabiner 1983, p. 33
  34. Л. Рабинер, Б. Гоулд Теория и применение цифровой обработки сигналов — М.: Мир, 1978, с. 327.
  35. Multirate DSP, part 3: ADC oversampling.
  36. Theory of Upsampled Digital Audio.
  37. A complete guide to Foobar 2000
  38. Secret Rabbit Code (aka libsamplerate)
  39. Shibatch Audio Tools
  40. The SoX Resampler library
  41. Сравнение пяти передискретизаторов для foobar2000 + ASIO4ALL Resampler (2011)
  42. Don P. Mitchell, Arun N. Netravali Reconstruction Filters in Computer Graphics // Computer Graphics. — 1988. — Т. 22. — № 4. — С. 221—228..
  43. Building a QAM Demodulator.

Литература[править | править вики-текст]

  • Ronald E. Crochiere, Lawrence R. Rabiner Multirate digital signal processing. — Prentice-Hall, 1983. — 411 с.
  • Ричард Лайонс Цифровая обработка сигналов: второе издание = Understanding digital signal processing, 2nd edition. — Бином-Пресс, 2006. — 656 с. — ISBN 5-951-80149-4
  • Л. Рабинер, Б. Гоулд Теория и применение цифровой обработки сигналов = Theory and Application of Digital Signal Processing. — М.: Мир, 1978. — 848 с.
  • Романюк Ю.А. Основы цифровой обработки сигналов. В 3-х ч. Ч.1. Свойства и преобразования дискретных сигналов: Учебное пособие. — М.: МФТИ, 2005. — 332 с. — ISBN 5-74-170144-2

Ссылки[править | править вики-текст]