BPSK модулятор

Будем пополнять список блоков, написанных на VerilogA, в этот раз мне понадобился bpsk модулятор.

Ну и сразу к делу:


<code>include &quot;constants.vams&quot;&lt;/span&gt;
</code>include &quot;disciplines.vams&quot;

module SimpleModulator(in, out);
input in;
output out;

electrical in;
electrical out;

parameter real Amplitude = 0.2;   //Амплитуда нашего сигнала
parameter real Freq = 1G;         //Несущая частота
parameter real vth = 0.6;         //Порог срабатывания 0-&gt;1
parameter real offset = 0;        //Постоянная составляющая
real phase;                       //фаза выходного сигнала

analog begin

@(initial_step) phase = 0;

@(cross(V(in) - vth, +1))
begin                       //По каждому возрастающему фронту
 phase = 3.14159265359;     //фаза 180 градусов = 1
end

@(cross(V(in) - vth, -1))
begin                       //По каждому спадающему фронту
phase = 0;                  //фаза 0 градусов = 0&lt;/span&gt;
end
V(out) &lt;+ Amplitude*sin(2*3.14159265359*Freq*$abstime + phase)+offset;

end

endmodule

Теперь нужно наш модулятор проверить, для этого из библиотеки ahdlLib я подтянул генератор рандомных чисел и задал скорость данных.

Результат работы на изображении из заголовка, похоже на правду :)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.