Каковы относительные достоинства различных схем повышения дискретизации?

12

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

Это приводит к моему вопросу: какие методы повышения частоты дискретизации обычно используются и каковы их относительные достоинства? Почему я выбрал бы заполнение нулями, удержание нулевого порядка или удержание первого порядка, и какие другие методы доступны?

Некоторые уточнения:

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

Ответы:

11

Для целей этого ответа я буду использовать терминологию Matlab и определю «повышающую дискретизацию» как процесс вставки нулей между входными выборками, а «интерполяцию» как объединенный процесс повышающей дискретизации и фильтрации для удаления псевдонимов ( - коэффициент интерполяции), который вводит повышающая дискретизация. Для объяснения того, как / почему повышение частоты дискретизации вводит псевдонимы, смотрите эту ветку .м - 1 мm1m1m

Важно понимать, что любой фильтр нижних частот можно использовать, чтобы избавиться от псевдонимов и, таким образом, завершить интерполяцию. Некоторые фильтры имеют преимущества при использовании в интерполяции. Я рассмотрю различные варианты интерполяционной фильтрации ниже.

КИХ-фильтр

Интерполяционные FIR-фильтры эффективны, потому что они объединяют повышающую дискретизацию и фильтрацию псевдонимов в один шаг. Это легче всего увидеть в примере. Предположим, у нас есть последовательность данных и мы хотим интерполировать ее в два раза. Первый шаг - повысить в два раза. Это изменяет исходную последовательность данных с на .х 0 , х 1 , . , , х N х 0 , 0 , х 1 , 0 , . , , х Nx[n]x0,x1,...xNx0,0,x1,0,...xN

Теперь предположим, что у нас есть низкочастотный FIR-фильтр , который мы будем использовать для удаления псевдонима. Когда мы сворачиваем последовательность данных с повышенной дискретизацией с помощью фильтра, половина отводов фильтра стимулируется ненулевыми выборками, а половина отводов неактивна, поскольку они соответствуют нулевым выборкам. Половина, которая стимулируется, и половина, которая неактивна, переворачивается назад и вперед, когда фильтр проходит через данные. Эти два набора отводов иногда называют фазами фильтра.h[n]

Этот тот же эффект может быть достигнут неявно, исключая повышающую дискретизацию и фильтруя исходную последовательность данных с помощью интерполяционного КИХ-фильтра. Интерполяционный FIR-фильтр производит выходов для каждой входной выборки. Для всех выходов фильтр будет работать с одними и теми же входными выборками (где K - количество отводов фильтра, а «ceil» - функция потолка).м с е я л ( К / м )mmceil(K/m)

Надеюсь, пример проиллюстрирует, как это работает. Предположим, что у нас есть фильтр с шестью ответвлениями, и мы интерполируем с коэффициентом два. Краны фильтра: [1 -2 4 4 -2 1]. Если бы мы буквально интерполировали, а затем отфильтровали сэмплы, и отфильтрованные отводы выстроились бы в очередь (после полного перекрытия) следующим образом:

0:1x2:20:4x1:40:2x0:1
Следующий пример ...

x3:10:2x2:40:4x1:20:1
Следующий образец ...

0:1x3:20:4x2:40:2x1:1
И так далее. Смысл интерполяционного фильтра в том, что он пропускает фактическую вставку нулей и просто чередует, какой набор отводов он использует в данный момент. Таким образом, предыдущая последовательность теперь будет выглядеть следующим образом:

x2:2x1:4x0:1

x3:1x2:4x1:2

x3:2x2:4x1:1

Удержание нулевого порядка

Интерполятором удержания нулевого порядка является тот, который просто повторяет каждую выборку раз. Таким образом, в два раза интерполятор удержания нулевого порядка преобразует в . Этот метод привлекателен, потому что его чрезвычайно легко реализовать с точки зрения кодирования и вычислительной нагрузки.m1x0,x1,...xNx0,x0,x1,x1,...xN,xN

Проблема в том, что его фильтрация нижних частот довольно плохая. Мы можем видеть это, когда узнаем, что интерполятор с нулевым удержанием является частным случаем FIR-интерполяции. Это соответствует повышающей дискретизации, за которой следует прямоугольный фильтр шириной . Преобразование Фурье прямоугольного фильтра - это функция sinc, которая является довольно ветхим фильтром нижних частот. Его неровность можно исправить с помощью компенсационного КИХ-фильтра, но если вы собираетесь это сделать, вы можете просто использовать хороший фильтр нижних частот для начала.m

Первый ордер

Удержание первого порядка - это шаг вверх от интерполятора нулевого удержания в том смысле, что он линейно интерполирует повышающие выборки с использованием двух ближайших входных выборок. Таким образом, в два раза интерполятор удержания первого порядка преобразует в .x0,x1,...xNx0,x0+x12,x1,x1+x22,...xN

Подобно интерполятору удержания нулевого порядка, интерполятор удержания первого порядка является частным случаем FIR-интерполяции. Это соответствует передискретизации и фильтрации с треугольным фильтром. Для интерполяции с коэффициентом два фильтр равен , для интерполяции с коэффициентом три фильтр и т. д.[1[12112][132312312]

Треугольный фильтр представляет собой два прямоугольных фильтра, свернутых вместе, что соответствует квадрату sinc в частотной области. Это определенный шаг по сравнению с удержанием нулевого порядка, но он все еще не велик.

БИХ-фильтр

Я никогда не использовал интерполяционный БИХ-фильтр, поэтому не буду много о них говорить. Я предполагаю, что применяются те же аргументы, что и в обычной фильтрации - фильтры БИХ более эффективны, могут быть нестабильными, не иметь линейной фазы и т. Д. Я не верю, что они могут комбинировать этапы повышения дискретизации и фильтрации, как это может сделать FIR-фильтр, но я могу ошибаться по этому поводу.

БПФ интерполяция

Я добавлю это, хотя это не очень распространено (конечно, я не думаю, что нулевая задержка также распространена). Этот поток обсуждает повторную выборку FFT, где повторная выборка - это и интерполяция, и децимация.

Удержание высшего порядка

Удерживающие интерполяторы второго порядка обычно называют «квадратичными интерполяторами». Они являются нелинейными и, следовательно, не могут быть реализованы как КИХ-фильтры, которые являются линейными. Я плохо понимаю математику, стоящую за ними, поэтому не буду обсуждать их работу. Я скажу, однако, что я считаю, что они несколько распространены за пределами обработки сигналов.

Методы более высокого порядка (три или более) также существуют. Они называются «полиномиальными регрессиями».

РЕДАКТИРОВАТЬ:

Cascade Integrator Comb (CIC) Фильтры

Я забыл упомянуть фильтры CIC . Фильтры CIC используются по двум причинам: они используют только сумматоры / вычитатели (теперь это не так уж сложно, поскольку умножения бывают быстрыми и дешевыми), и они могут довольно эффективно выполнять действительно большие изменения частоты дискретизации. Их недостатком является то, что они, по сути, являются эффективной реализацией каскадного фильтра прямоугольников, поэтому они имеют все недостатки фильтров прямоугольников, как обсуждалось выше. Интерполятору CIC почти всегда предшествует компенсационный FIR-фильтр, который предварительно искажает сигнал, чтобы устранить искажение, вносимое CIC. Если изменение частоты дискретизации достаточно велико, стоимость фильтра предварительного искажения того стоит.

Джим Клэй
источник
Фантастический обзор мистер Джим. Чтобы добавить к вашей категории более высоких порядков, я считаю, что это также называется «полиномиальная регрессия». При этом, учитывая определенный набор точек, мы вычисляем прямую, параболу, кубический полином высшего порядка наилучшего соответствия. Получив уравнение, мы можем легко выяснить, что такое промежуточные точки.
Спейси
Вопросы: 1) Я не совсем ясно о последнем абзаце части FIR Filter. Вы упомянули, что 2-й и 3-й выходы, соответствующие 1-му примеру входных данных, используют ленты фильтров 1, 4, 7, а затем 2, 5, 8. Однако вы также упоминаете, что все они являются нулями ... так что 2-й и 3-й выходы образцы просто нули в этом случае? 2) Это «FIR Interpolating Filter», выглядит ли он, например, как [1 0 0 3.2 0 0 -2.1 0 0 1.1 0 0] для m = 3? (Номера составлены).
Спейси
@ Мохаммед Я отредактировал ответ. Надеюсь, это поможет. И спасибо за информацию о полиномиальных регрессиях.
Джим Клей
1
@endolith Я думаю, что есть две причины: сложность, и она имеет смысл только в вычислительном отношении, когда длина фильтра превышает определенное число (и я не уверен, что это за число). Подход FFT хорошо работает при работе с блоками сэмплов, но если вы имеете дело с потоком сэмплов, то вам также нужно сделать наложение-добавление или наложение-сохранение, чтобы сохранить непрерывность.
Джим Клэй
1
@endolith Одна очень хорошая вещь в подходе FFT заключается в том, что использование большого фильтра практически не требует затрат.
Джим Клэй
3

Ответ Джима это достаточно хорошо. Все методы повышения дискретизации следуют той же базовой схеме:

  1. Вставьте нули между образцами: это приводит к периодическому повторению исходного спектра, но оставляет спектр в исходной полосе полностью нетронутым
  2. Фильтр низких частот, чтобы избавиться от всех зеркальных спектров

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

  1. Сколько амплитудных искажений я могу допустить в исходной полосе? Это частота зависит?
  2. Я забочусь о фазе в оригинальной группе? Если вам нужно поддерживать фазу, вам нужен линейный FIR. Если не минимальная фаза делает лучшую работу по поддержанию "причинности" и резких проявлений.
  3. Сколько мне нужно подавить зеркальные изображения? В основном зеркальные изображения будут отображаться как дополнительный шум в основной полосе.

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

Hilmar
источник
Что вы подразумеваете под "лучше работает в поддержании" причинности "?
nibot
0

Рассматривая разницу между сэмплом и удержанием (т.е. повторением значений сэмпла) и заполнением нулями, полезно понимать (как указывают Джим и Хилмар), что сэмплирование и удержание можно интерпретировать как повышающую дискретизацию путем заполнения нулями с последующим КИХ-фильтр, импульсный отклик которого состоит из прямоугольного импульса.

Например, при повышении частоты дискретизации от 2 кГц до 64 кГц (коэффициент 32) мы можем реализовать это, вставив 31 ноль между каждой парой дискретизации 2 кГц, а затем отфильтровывая с помощью КИХ-фильтра, который состоит из 32 единиц, со всеми остальными коэффициенты ноль.

sincτ=0

Оказывается, что эта sincфункция имеет свои нули именно на гармониках более низкой частоты дискретизации. В нашем примере применения повышающей дискретизации с 2048 Гц до 65536 Гц частотная характеристика операции выборки и удержания имеет нулевые значения при 2048 Гц, 4096 Гц и т. Д.

введите описание изображения здесь

Исходя из этого, я заключаю, что любой интерполяционный фильтр, который полностью подавляет гармоники исходной частоты дискретизации, будет выглядеть как «выборка и удержание». Это правильно?

1/f

nibot
источник
Проблема в том, что нули очень узкие, поэтому большинство сигналов будет иметь энергию вне нуля.
Джим Клэй
@JimClay, разве узкие нули не идеальны для уничтожения гармоник более низкой частоты дискретизации? Я согласен, вы также хотели бы иметь еще несколько полюсов около 1 кГц, чтобы избавиться от частот изображения. Думаю, я бы расширил свой вопрос: как создать хороший интерполяционный фильтр?
нибот
Вы разрабатываете фильтр нижних частот, полоса пропускания которого включает полосу пропускания вашего сигнала, а полоса пропускания включает псевдонимы, которые вводятся при повышении частоты дискретизации. Частоты между точкой 3 дБ сигнала и псевдонимом - это ваша полоса перехода. Если ваш вопрос «как мне спроектировать фильтр нижних частот?», Задайте его в другом вопросе, и мы сможем обсудить его.
Джим Клэй
Я обычно понимаю, как проектировать фильтры, обычно путем явного помещения полюсов и нулей в s-домен, а затем преобразования их в фильтры z-домена. Мне было интересно, были ли какие-то специальные приемы для фильтров интерполяции. Сообщение, которое я убираю, заключается в том, что на самом деле никаких хитростей нет - фильтры интерполяции похожи на любые другие фильтры, а их дизайн - это выбор компромисса между различными соображениями (пульсация, фаза, групповая задержка, минимальное затухание в полосе задержек, сложность вычислений и т. д.).
нибот
С другой стороны, я ничего не знаю о разработке FIR-фильтров.
nibot