Линейная интерполяция в прямом цифровом синтезе

Я работаю над проектом DDS микроконтроллера на языке C, и у меня возникли проблемы с тем, как вычислить линейную интерполяцию для сглаживания выходных значений. Программа в ее нынешнем виде
использует верхние 8 битов 24-битного аккумулятора в качестве индекса для массива 8-битных выходных значений. Мне нужно придумать функцию, которая будет брать средний и младший байт аккумулятора и генерировать значение между «предыдущим» и «следующим» значением в массиве. Это было бы достаточно просто на быстром оборудовании, но поскольку я использую микроконтроллер, мне действительно нужно избегать каких-либо операций с плавающей запятой или деления!

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

УТОЧНЕНИЕ

DDS = Прямой цифровой синтез

в DDS форма волны генерируется из справочной таблицы с использованием сумматора фазы . Аккумулятор фазы обычно содержит целочисленную составляющую и дробную составляющую. Целочисленный компонент используется в качестве индекса в таблице поиска. В простых реализациях DDS дробная часть игнорируется, но для более качественного вывода дробная составляющая используется для интерполяции (обычно просто линейной интерполяции) между значениями соседних таблиц поиска. В ответ на указанный выше вопрос мы смотрим, как эффективно выполнить эту линейную интерполяцию между двумя значениями таблицы поиска для данной дроби, f, где 0 <= f <1 .

5
задан Paul R 12 October 2010 в 11:31
поделиться