Перейти к содержанию
    

Вопрос по алгоритму генерации синуса.

Есть такой проектик скачанный с 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 Гц?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Может кто еще что скажет?;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 алгоритм имеет лишь художественную ценность, ибо негибок и очень неточен. Достаточно лишь оценить первый такт работы после сброса: синус изменится, а косинус - нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никто не знает что за алгоритм?

 

При частоте квантования 100 МГц частота синуса получается около 124 килогерц!

Как бы это дело пересчитать под нужную частоту например 400 Гц?

 

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

 

Неустойчивость также следует из эквивалентного разностного уравнения для (например) синуса (получено из кода путем несложных махинаций): S(i+1) = 2*S(i) - S(i-1)*(1+/(128^2)). Этому разностному уравнению соответствует два полюса ВНЕ единичной окружности на z плоскости:).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

sinus.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Прошу прощения, моя ошибка, был невнимателен, все должно работать правильно.

Теорию смотрите тут: Генератор SIN/COS на VHDL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...