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

 
 
 
Reply to this topicStart new topic
> Вопрос по алгоритму генерации синуса.
inco
сообщение Jan 28 2009, 12:07
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984



Есть такой проектик скачанный с opencores генратор синуса

`timescale 1ns / 1ps

module sin(
input reset, // async reset
input clock, // input clock
output [15:0] sin, // sin output: signed, 16-bit
output [15:0] cos, // cos output: signed, 16-bit
output sin_sqr, // sign(sin)
output cos_sqr // sign(cos)
);

parameter width = 16;
parameter InitCos = 32640;

reg [width-1:0] sin1, cos1;

always @(posedge clock, posedge reset) begin
if(reset) begin
sin1 <= 0;
cos1 <= InitCos;
end
else begin
sin1 <= sin;
cos1 <= cos;
end
end

//the computator
assign sin = sin1 + {{7{cos1[15]}}, cos1[15:7]};
assign cos = cos1 - {{7{sin[15]}}, sin[15:7]};

//sign
assign sin_sqr = !sin[15];
assign cos_sqr = !cos[15];

endmodule

Очень уж заманчивая реализация всего 40 ячеек на cyclone 3
Никто не знает что за алгоритм?

При частоте квантования 100 МГц частота синуса получается около 124 килогерц!
Как бы это дело пересчитать под нужную частоту например 400 Гц?
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Jan 28 2009, 12:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



Не уверен, но по-моему это реккурентный алгоритм... Характеризуется наращиванием ошибок формирования сигнала с течением времени (при достаточно длительном сигнале уплывает амплитуда, про фазу ничего не могу сказать)...
Может кто еще что скажет?wink.gif


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 28 2009, 12:43
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



sin(t)-sin(t+d)=2*sin(-d/2)*cos((2t+d)/2). Так как d мало, в косинусе им пренебрегаем, получаем sin(t)-sin(t+d)~A*cos(t), где A=const (2sin(-d/2); d=const так как это дельта времени). В приведенном примере A=1/128, получаем d~0.45 градусов.
IMHO алгоритм имеет лишь художественную ценность, ибо негибок и очень неточен. Достаточно лишь оценить первый такт работы после сброса: синус изменится, а косинус - нет.
Go to the top of the page
 
+Quote Post
Самурай
сообщение Jan 28 2009, 14:16
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Цитата(inco @ Jan 28 2009, 15:07) *
Никто не знает что за алгоритм?

При частоте квантования 100 МГц частота синуса получается около 124 килогерц!
Как бы это дело пересчитать под нужную частоту например 400 Гц?


Хотелось бы уточнить, Вы проверяли этот генератор хотя бы на 10 периодах синуса/косинуса?smile.gif. Могу ошибаться, но по-моему данный генератор обладает ярко выраженной неустойчивостью, быстрая проверка показывает, что амплитуда генерируемых сигналов будет непрерывно возрастатьsmile.gif.

Неустойчивость также следует из эквивалентного разностного уравнения для (например) синуса (получено из кода путем несложных махинаций): S(i+1) = 2*S(i) - S(i-1)*(1+/(128^2)). Этому разностному уравнению соответствует два полюса ВНЕ единичной окружности на z плоскостиsmile.gif.
Go to the top of the page
 
+Quote Post
inco
сообщение Jan 28 2009, 15:08
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 161
Регистрация: 26-08-05
Из: Российская Империя
Пользователь №: 7 984



Да проверял! Вот выкладываю проект с opencores. Проверял на modelsim 6.4c. Никаких подвохов не наблюдал! Чистый ровный синус и косинус! Интересно где-бы найти кнопку прикрепить файл?

Цитата(inco @ Jan 28 2009, 17:01) *
Да проверял! Вот выкладываю проект с opencores. Проверял на modelsim 6.4c. Никаких подвохов не наблюдал! Чистый ровный синус и косинус! Интересно где-бы найти кнопку прикрепить файл?

Прикрепленные файлы
Прикрепленный файл  sinus.rar ( 80.23 килобайт ) Кол-во скачиваний: 71
 
Go to the top of the page
 
+Quote Post
Самурай
сообщение Jan 28 2009, 15:55
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 468
Регистрация: 4-03-05
Пользователь №: 3 066



Цитата(inco @ Jan 28 2009, 18:08) *
Да проверял! Вот выкладываю проект с opencores. Проверял на modelsim 6.4c. Никаких подвохов не наблюдал! Чистый ровный синус и косинус! Интересно где-бы найти кнопку прикрепить файл?


Прошу прощения, моя ошибка, был невнимателен, все должно работать правильно.
Теорию смотрите тут: Генератор SIN/COS на VHDL
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:38
Рейтинг@Mail.ru


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