%% $Id: pst-am.sty 380 2010-09-04 08:09:34Z herbert $
%%
%% This is file `pst-am.sty',
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
%% Manuel Luque <Mluque5130 _at_ aol.com> (France)
%% Herbert Voss <hvoss _at_ tug.org (Germany)
%%
%%
%% DESCRIPTION:
%% `pst-am' is a package intended for the representation
%% of the amplitude modulation of the radio waves
%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{pstricks}
\RequirePackage{pst-plot}
\RequirePackage{pst-node}
\RequirePackage{pst-xkey}
\RequirePackage{numprint}
\RequirePackage{multido}
%
\def\filedate{2010/09/04}
\def\fileversion{1.02}
\ProvidesPackage{pst-am}[\filedate\ v\fileversion\ Modulation of radio waves (ml,hv)]
%
\pst@addfams{pst-am}
\SpecialCoor
\definecolor{Bleu}{cmyk}{1,1,0,0.3}
\newpsstyle{cadre}{framearc=0.05,linecolor=black}
\newpsstyle{screen}{fillstyle=solid,fillcolor=yellow!70!white!30}
\newpsstyle{signalModulant}{plotpoints=1000,linecolor=green,linewidth=2\pslinewidth}
\newpsstyle{signalPorteuse}{plotpoints=2000,linecolor=blue}
\newpsstyle{signalRedresse}{plotpoints=2000,linecolor=Bleu}
\newpsstyle{signalDemodule}{plotpoints=4000,linecolor=red}
\newpsstyle{signalModule}{plotpoints=4000,linecolor=blue}
\newpsstyle{XY}{plotpoints=4000,linecolor=blue}
%
\define@key[psset]{pst-am}{title}{\def\psk@title{#1}}
\define@key[psset]{pst-am}{frequencePorteuse}[2e4]{\def\psk@frequencePorteuse{#1}}
\define@key[psset]{pst-am}{frequenceAudio}[1e3]{\def\psk@frequenceAudio{#1}}
\psset[pst-am]{title={},%{Luc\'e Auguste Fresnel},
frequencePorteuse=2e4,frequenceAudio=1e3} % les fr�quences
%
\define@key[psset]{pst-am}{R}[3300]{\def\psk@resistor{#1}}
\define@key[psset]{pst-am}{C}[3.9e-8]{\def\psk@capacitor{#1}}
\psset[pst-am]{R=3300,C=3.9e-8}
%
\define@key[psset]{pst-am}{U0}[2]{\def\psk@offset{#1}}
\psset[pst-am]{U0=2}
%
\define@key[psset]{pst-am}{Up}[3.5]{\def\psk@Up{#1}}
\define@key[psset]{pst-am}{Um}[1]{\def\psk@Um{#1}}
\psset[pst-am]{Up=3.5,Um=1}
%
\define@key[psset]{pst-am}{k}[0.1]{\def\psk@k{#1}}
\psset[pst-am]{k=0.1} % coefficient multiplicateur
%
\define@key[psset]{pst-am}{timeDiv}[2e-4]{\def\psk@timeDiv{#1}}
\define@key[psset]{pst-am}{voltDivY1}[1]{\def\psk@voltDivA{#1}} % coeff d'amplitude vertical curve Y1
\define@key[psset]{pst-am}{voltDivY2}[1]{\def\psk@voltDivB{#1}} % coeff d'amplitude vertical curve Y2
\psset[pst-am]{timeDiv=2e-4,voltDivY1=1,voltDivY2=1}
%
\define@boolkey[psset]{pst-am}[Pst@]{Centering}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalModule}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalPorteuse}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalRedresse}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalDemodule}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalModulant}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalModule}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{SignalFinal}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{enveloppe}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{XY}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{traceU}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{UMandUm}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{values}[true]{}
\define@boolkey[psset]{pst-am}[Pst@]{BW}[true]{}
\psset[pst-am]{Centering=false}
%
\def\psAM{\pst@object{psAM}}
\def\psAM@i{{%
\pst@killglue
\use@par
\pnode(!%
1 setlinejoin
/PI 3.14159 def
/Tp {1 \psk@frequencePorteuse\space div} bind def % p�riode du signal modul�s
/Ap \psk@Up\space def % amplitude porteuse
/Fm \psk@frequenceAudio\space def % frequence signa modulant
/Tm {1 Fm div} bind def % periode du signal modulant
/Am \psk@Um\space def % amplitude signal modulant
/U0 \psk@offset\space def % decalage
/k \psk@k\space def
/R \psk@resistor\space def
/C \psk@capacitor\space def
/m {Am U0 div} bind def
/Umin {k Ap mul U0 mul 1 m sub mul} bind def
/Umax {k Ap mul U0 mul 1 m add mul} bind def
/composanteContinue {Umax Umin add 2 div} bind def
/Tau {R C mul} bind def
/TimeDiv \psk@timeDiv\space def % base de temps
/VoltDivY1 \psk@voltDivA\space def % amplitude verticale curve Y1
/VoltDivY2 \psk@voltDivB\space def % amplitude verticale curve Y2
/DecalageTemps 0 def
0 0){MEM}%
\ifPst@BW
\newpsstyle{signalModulant}{plotpoints=1000,linewidth=2\pslinewidth}
\newpsstyle{signalPorteuse}{plotpoints=2000}
\newpsstyle{signalRedresse}{plotpoints=2000}
\newpsstyle{signalDemodule}{plotpoints=4000}
\newpsstyle{signalModule}{plotpoints=4000}
\newpsstyle{XY}{plotpoints=4000}
\fi
\ifPst@Centering\centering\fi
\pspicture(-0.1,-5)(10.1,5)
\psframe[style=cadre](-0.1,-4.5)(10.1,4.5)
\psframe[style=screen](0,-4)(10,4)
\rput(5,4.25){\textsf{\large Modulation-Demodulation}}
\rput(5,-4.25){\psk@title}
\rput*(2.5,-3.5){\textsf{\large timeDiv:\numprint{\psk@timeDiv} s/div}}
\uput*[0](6,-3.7){\textsf{\large curve 2:\psk@voltDivB V/div}}
\uput*[0](6,-3.3){\textsf{\large curve 1:\psk@voltDivA V/div}}
\psclip{\psframe[linestyle=none](0,-4)(10,4)}
\ifPst@XY
\parametricplot[style=XY]{0}{10}{% duree
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/FonctionPorteuse Ap 360 Tp div temps mul cos mul def
/SignalModule FonctionPorteuse SignalModulant mul k mul def
SignalModulant VoltDivY1 div 5 add SignalModule VoltDivY2 div}
\else
\ifPst@SignalModule
\parametricplot[style=signalModule]{0}{10}{% duree
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/FonctionPorteuse Ap 360 Tp div temps mul cos mul def
/SignalModule FonctionPorteuse SignalModulant mul k mul def
t SignalModule VoltDivY2 div }
\ifPst@enveloppe
\parametricplot[style=signalModulant]{0}{10}{%
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/enveloppeSup Ap SignalModulant mul k mul def
t enveloppeSup VoltDivY2 div }
\parametricplot[style=signalModulant]{0}{10}{%
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/enveloppeInf Ap SignalModulant mul k mul neg def
t enveloppeInf VoltDivY2 div }
\fi
\fi
\ifPst@SignalRedresse
\parametricplot[style=signalRedresse]{0}{10}{% duree
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/FonctionPorteuse Ap 360 Tp div temps mul cos mul def
/SignalModule FonctionPorteuse SignalModulant mul k mul def
SignalModule 0 le {/SignalRedresse 0 def} {/SignalRedresse SignalModule def} ifelse
t SignalRedresse VoltDivY2 div }
\fi
\ifPst@SignalDemodule
\parametricplot[style=signalDemodule]{0}{10}{%
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/FonctionPorteuse Ap 360 Tp div temps mul cos mul def
/SignalModule FonctionPorteuse SignalModulant mul k mul def
SignalModule 0 le {/SignalRedresse 0 def} {/SignalRedresse SignalModule def} ifelse
/Uc U0 Ap mul
1
m DecalageTemps 360 mul Tm div cos mul
add
mul 2.718 temps DecalageTemps sub Tau div neg exp mul k mul def
Uc SignalRedresse ge {/SignalDemodule Uc def} % si condition realisee
{/SignalDemodule SignalRedresse def
/DecalageTemps temps Tp div floor Tp mul def}
ifelse
t SignalDemodule VoltDivY2 div }
\fi
\ifPst@SignalModulant%
\parametricplot[style=signalModulant]{0}{10}{%
% 1 div=0.2 ms
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
t SignalModulant VoltDivY1 div }
\fi
\ifPst@SignalPorteuse
\parametricplot[style=signalPorteuse]{0}{10}{% dur�e
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/FonctionPorteuse Ap 360 Tp div temps mul cos mul def
t FonctionPorteuse VoltDivY1 div }
\fi
\fi
\ifPst@SignalFinal
\parametricplot[style=signalDemodule]{0}{10}{%
/temps t TimeDiv mul def % t est en s
/SignalModulant temps Fm mul 360 mul cos Am mul U0 add def
/FonctionPorteuse Ap 360 Tp div temps mul cos mul def
/SignalModule FonctionPorteuse SignalModulant mul k mul def
SignalModule 0 le {/SignalRedresse 0 def} {/SignalRedresse SignalModule def} ifelse
/Uc U0 Ap mul
1
m DecalageTemps 360 mul Tm div cos mul
add
mul 2.718 temps DecalageTemps sub Tau div neg exp mul k mul def
Uc SignalRedresse ge {/SignalDemodule Uc def} % si condition r�alis�e
{/SignalDemodule SignalRedresse def
/DecalageTemps temps Tp div floor Tp mul def}
ifelse
t SignalDemodule composanteContinue sub VoltDivY2 div }
\fi