Преобразование цифровых форм сигналов в код с помощью Scilab. Советы и рекомендации по разработке прошивок

Добавлено 23 сентября 2019 в 13:25

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

Микроконтроллер с тактовой частотой 25 или 50 МГц, оборудованный аналого-цифровым и цифро-аналоговым преобразователями, ни в коем случае не способен выполнять серьезные задачи по обработке и формированию сигналов. Но, на самом деле, микроконтроллеры стоит выбирать для приложений цифровой обработки сигналов (ЦОС, DSP), когда это возможно, потому что они дешевле и проще в использовании.

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

Цифровая обработка сигналов с помощью микроконтроллеров

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

Микроконтроллеры, напротив, часто сопровождаются инструментами разработки, которые являются более базовыми, и профессиональной средой разработки, которая ... ну, менее профессиональная. Когда мы проектируем для микроконтроллеров, нам часто приходится работать более независимо и обходиться ограниченными ресурсами.

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

Хранение сигналов и форм волн

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

unsigned char Signal[100] = {Value1, Value2, Value3, …, Value99, Value100};

Например, 20-элементный период синусоиды будет выглядеть так:

float Signal[20] = {0.000, 0.309, 0.588, 0.809, 0.951, 1.000, 0.951, 0.809, 0.588, 0.309, 0.000, -0.309, -0.588, -0.809, -0.951, -1.000, -0.951, -0.809, -0.588, -0.309};

Вот как числовые значения этого сигнала выглядят в визуальной форме:

Синусоида, сформированная из двадцати заданных значений
Синусоида, сформированная из двадцати заданных значений

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

Прежде чем мы продолжим, я хотел бы обратить внимание на связанный момент: часто рекомендуется хранить подобные типы массивов в памяти программ. Это позволяет хранить относительно большие объемы данных цифровой обработки сигналов без использования всех ресурсов ОЗУ. Для получения дополнительной информации смотрите статью «Используйте память, доступную только для чтения, чтобы освободить оперативную память RAM» из данной серии.

Формирование текста из чисел с помощью Scilab

В данной статье в качестве посредника между компьютером и кодом для микроконтроллера я буду использовать Scilab. Можно использовать и другое программное обеспечение (MATLAB, Excel и т. д.), но Scilab является хорошим выбором, поскольку он бесплатный, мощный и довольно интуитивно понятный. Первым шагом является передача ваших данных в массив Scilab. Вы можете импортировать данные из файла или генерировать их, используя математические функции Scilab. (Этот сайт оцифровки графиков может быть полезен; но я никогда его не использовал, поэтому не уверен.)

Также можно вручную вводить данные, либо печатая, либо копируя и вставляя, в представление массива в виде электронной таблицы; например:

Таблица для ввода значений массива
Таблица для ввода значений массива

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

Для этого мы будем использовать функцию Scilab csvWrite().

Вот пример:

filename = fullfile(TMPDIR, "data.txt");

csvWrite(SineWaveCycle, filename, ", ", ".", "%.3f");

Команда fullfile() создает файл "data.txt" в каталоге, который можно найти, дважды щелкнув по переменной "filename" в браузере переменных (Variable Browser):

Определение пути к сформированному файлу данных
Определение пути к сформированному файлу данных

Первый аргумент в функции csvWrite – это имя массива, в котором хранятся данные. Далее идет имя файла. Третий аргумент указывает символы, которые будут разделять значения данных; по умолчанию используется запятая, но по эстетическим причинам я изменил ее на запятую, за которой следует пробел. Четвертый аргумент в моей команде csvWrite указывает Scilab использовать точку (вместо запятой) в качестве разделителя целой и дробной частей, а пятый аргумент задает точность трех знаков после запятой.

Вот результат:

0.000, 0.309, 0.588, 0.809, 0.951, 1.000, 0.951, 0.809, 0.588, 0.309, 0.000, -0.309, -0.588, -0.809, -0.951, -1.000, -0.951, -0.809, -0.588, -0.309

Теперь всё, что вам нужно сделать, это скопировать всё это и вставить его в фигурные скобки инициализации массива в исходном файле программы. Когда вам нужно будет изменить данные, просто закройте текстовый файл, используйте ту же команду cvsWrite, откройте файл, скопируйте результаты и вставьте в исходник.

Заключение

Надеюсь, вам понравилась эта простая техника формирования данных при разработке прошивки, и она вам пригодится. Не стесняйтесь оставлять комментарии, если у вас есть какие-либо связанные советы, которыми вы хотели бы поделиться.

Теги

DSP / ЦОС (цифровая обработка сигналов)MATLABMCUScilabМассивМикроконтроллерРазработка ПО для встраиваемых системФильтрЯзык C

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.