Для целей этого ответа я буду использовать терминологию Matlab и определю «повышающую дискретизацию» как процесс вставки нулей между входными выборками, а «интерполяцию» как объединенный процесс повышающей дискретизации и фильтрации для удаления псевдонимов ( - коэффициент интерполяции), который вводит повышающая дискретизация. Для объяснения того, как / почему повышение частоты дискретизации вводит псевдонимы, смотрите эту ветку .м - 1 мм - 1м - 1м
Важно понимать, что любой фильтр нижних частот можно использовать, чтобы избавиться от псевдонимов и, таким образом, завершить интерполяцию. Некоторые фильтры имеют преимущества при использовании в интерполяции. Я рассмотрю различные варианты интерполяционной фильтрации ниже.
КИХ-фильтр
Интерполяционные FIR-фильтры эффективны, потому что они объединяют повышающую дискретизацию и фильтрацию псевдонимов в один шаг. Это легче всего увидеть в примере. Предположим, у нас есть последовательность данных и мы хотим интерполировать ее в два раза. Первый шаг - повысить в два раза. Это изменяет исходную последовательность данных с на .х 0 , х 1 , . , , х N х 0 , 0 , х 1 , 0 , . , , х Nх [ н ]Икс0, х1, . , , ИксNИкс0, 0 , х1, 0 , . , , ИксN
Теперь предположим, что у нас есть низкочастотный FIR-фильтр , который мы будем использовать для удаления псевдонима. Когда мы сворачиваем последовательность данных с повышенной дискретизацией с помощью фильтра, половина отводов фильтра стимулируется ненулевыми выборками, а половина отводов неактивна, поскольку они соответствуют нулевым выборкам. Половина, которая стимулируется, и половина, которая неактивна, переворачивается назад и вперед, когда фильтр проходит через данные. Эти два набора отводов иногда называют фазами фильтра.ч [ п ]
Этот тот же эффект может быть достигнут неявно, исключая повышающую дискретизацию и фильтруя исходную последовательность данных с помощью интерполяционного КИХ-фильтра. Интерполяционный FIR-фильтр производит выходов для каждой входной выборки. Для всех выходов фильтр будет работать с одними и теми же входными выборками (где K - количество отводов фильтра, а «ceil» - функция потолка).м с е я л ( К / м )ммc e i l ( K/ м)
Надеюсь, пример проиллюстрирует, как это работает. Предположим, что у нас есть фильтр с шестью ответвлениями, и мы интерполируем с коэффициентом два. Краны фильтра: [1 -2 4 4 -2 1]. Если бы мы буквально интерполировали, а затем отфильтровали сэмплы, и отфильтрованные отводы выстроились бы в очередь (после полного перекрытия) следующим образом:
0 : 1Икс2: - 20 : 4Икс1: 40 : - 2Икс0: 1
Следующий пример ...
Икс3: 10 : - 2Икс2: 40 : 4Икс1: - 20 : 1
Следующий образец ...
0:1x3:−20:4x2:40:−2x1:1
И так далее. Смысл интерполяционного фильтра в том, что он пропускает фактическую вставку нулей и просто чередует, какой набор отводов он использует в данный момент. Таким образом, предыдущая последовательность теперь будет выглядеть следующим образом:
x2:−2x1:4x0:1
x3:1x2:4x1:−2
x3:−2x2:4x1:1
Удержание нулевого порядка
Интерполятором удержания нулевого порядка является тот, который просто повторяет каждую выборку раз. Таким образом, в два раза интерполятор удержания нулевого порядка преобразует в . Этот метод привлекателен, потому что его чрезвычайно легко реализовать с точки зрения кодирования и вычислительной нагрузки.m−1x0,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. Если изменение частоты дискретизации достаточно велико, стоимость фильтра предварительного искажения того стоит.