Я работаю над проектом DDS с микроконтроллером в C, и у меня есть некоторые проблемы с вычислением того, как вычислить линейную интерполяцию, чтобы сгладить выходные значения. Программа в ее нынешнем виде
использует верхние 8 бит 24-разрядного аккумулятора в качестве индекса для массива из 8-разрядных выходных значений. Мне нужно придумать функцию, которая будет принимать средний и нижний байт аккумулятора и создать значение между «предыдущим» и «следующим» значением в массиве. Это было бы достаточно просто на быстром оборудовании, но поскольку я использую микроконтроллер, мне действительно нужно избегать операций с плавающей запятой или подразделений!Линейная интерполяция в прямом цифровом синтезе
С этими ограничениями я не уверен в возможности получить 8-битное интерполированное значение из двух моих 8-разрядных номеров ввода и нижних 2 байтов аккумулятора, что представляет собой «расстояние» между двумя входные значения. Заранее благодарю за любой совет!
РАЗЪЯСНЕНИЕ
DDS = прямой цифровой синтез
в DDS форма сигнал генерируется из справочной таблицы с использованием фазы аккумулятора. Аккумулятор фазы обычно содержит целочисленный компонент и дробную составляющую. Целочисленный компонент используется как индекс в таблице поиска. В простых реализациях DDS дробная часть игнорируется, но для получения более высокого качества дробная составляющая используется для интерполяции (обычно только линейной интерполяции) между соседними значениями таблицы поиска. По вышеуказанному вопросу мы рассмотрим, как эффективно выполнить эту линейную интерполяцию между двумя значениями таблицы поиска для данной фракции f, где 0 <= f < 1
.
Что такое _DDS_? –
DDS = Direct Digital Synthesis - используется для генерации сигналов в аудио/радио/коммуникациях/etc –