реклама на сайте
подробности

 
 
> Генератор синусоиды на базе фильтра 2-го порядка, Структурная реализация на VHDL
hattons
сообщение Dec 14 2008, 21:58
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 6-09-08
Пользователь №: 40 035



Пытаюсь реализовать для учебного проекта способ генерации синусоиды на базе нестабильного звена второго порядка по следующей схеме:

Задержку и умножитель объединил в блок
, выход register первого блока заведен на in_data второго, out_data обоих блоков заведены на сумматор, результат сдвигается на один разряд влево (*2) и идет на вход in_data первого блока и на выход генератора.
Генерируется 40 отсчетов на период. Коэффициенты фильтра A=1.975 и B=-1 поделены на 2: 0x7e66 и 0xC000 (из-за этого выход суматора и сдвигается).
У меня по сигналу сброса на регистре первого блока устанавливается начальное значение 0.1409 (0x1209), а на регистре второго блока 0 (0x0000).
Делаю по аналогии с документом Texas Instruments: скачать.
В итоге у меня ничего не работает, вернее генерируется 3 положительных значения, 3 отрицательных и т.д., но ничего общего с тем, что должно быть.
Подскажите, я неправильно строю устройство, ошибка в коэффициентах или что-то еще. Код пока не выкладываю, т.к. он написан довольно сумбурно, но в компонентах я абсолютно уверен, соединения простейшие и ошибки скорее всего нет.

Сообщение отредактировал hattons - Dec 14 2008, 22:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
hattons
сообщение Dec 16 2008, 19:36
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 6-09-08
Пользователь №: 40 035



Я спорить не буду конечно, т.к. сам дилетант в этих вопросах. Но в университете нам преподают этот способ в качестве одного из основных наряду с табличным, суммы двух углов и произведения двойного угла. В изданном кафедрой пособии по DSP процессорам он приведен в примере DTMF кодера. Обычно они приводят примеры из того, что делали когда-либо "на сторону".
Вот, что получилось у меня:

Оно может и не будет работать в реальности, но моя задача заключалась лишь в получении временной диаграммы в ISE или ModelSim. Я действительно использовал тот код, что разместил, заменил лишь умножитель и, вероятно, сумматор (не уверен, т.к. у меня беспорядок в папке проектов, и я мог скопировать в новый проект другой вариант).

Сообщение отредактировал hattons - Dec 16 2008, 19:54
Go to the top of the page
 
+Quote Post
alex_os
сообщение Dec 17 2008, 20:01
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Вообще, способ довольно сомнительный. Когда-то пробовал во float арифметике амплитуда синусоиды имеет тенденцию увеличиваться или уменьшаться ( в зависимости от частоты синуса и частоты дискретизации). В double работает нормально. На счет целочисленной реализации сказать ничего не могу, возможно будет достаточно стабильная амплитуда, но частоты получаются дискретные smile.gif. ИМХО любые таблицы, таблицы с интерполяцией, cordic, полиноминальная аппроксимация синуса и т.д. лучше этой хрени.


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 14:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016