V Programu jsou
vytvořeny funkce, které se zavolají s příslušnými parametry a následně nám
vrátí požadované data, které lze přímo vykreslit do grafu. Je zde soubor
PPM_PNM_PWM, který obsahuje funke :
public PointPairList ModulacniSignal(Data data)
public PointPairList[] Vzorky(Data data, float sizeUp,
float sizeDown)
public PointPairList PPM(Data
data)
public PointPairList PNM(Data
data)
public PointPairList PWM(Data
data)
public PointPairList PDM(Data
data)
kde :
public enum TypModulace
{
PDM = 0,
PNM,
PPM,
PWM
}
//
Ampl_mod – amplituda modulacniho signalu
// Freq
– frekvence modulacniho signalu
//
TypSig_mod – typ modulacniho signalu (sin, cos)
// Ts–
perioda vzorkovani
public Data(int Ampl_mod, int
freq, TypSignalu TypSig_mod, int Ts)
//Modulacni
signal
float t = (1.0f / (float)data.Freq1);
double
y1 = 0;
for
(float i = 0; i <
t; i += (t / 1000))
{
if(data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod + (data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1));
else
y1 = data.Ampl_mod + (data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1));
vrat.Add(i,
y1);
}
//Vzorky
float t = (1.0f / (float)data.Freq1);
float t2 = t / data.Ts;
float dx = 0;
int index = 0;
for
(float i = 0; i <
t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
vrat[index] = new PointPairList();
vrat[index].Add(i, sizeUp);
vrat[index++].Add(i, -sizeDown);
}
}
//PPM
double
t = (1.0f / (double)data.Freq1);
double
t2 = t / (data.Ts);
double
dx = 0;
double
dx2 = t / 1000;
double
dx3 = t2 / 8;
double
pocitej = 0;
double
value = 0;
double krok
= (2*data.Ampl_mod) / 8f;
bool one = false;
for
(double i = 0; i < t; i += dx2)
{
if (i > dx)
{
if (data.typSignalu
== TypSignalu.sin)
value
= data.Ampl_mod + (data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1));
else
value
= data.Ampl_mod + (data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1));
pocitej = 0;
one
= false;
//if (value < 0) i += t2;
value
= Math.Abs(value);
dx
+= t2;
}
if ((pocitej < dx3))
{
if ((value > krok
* 8) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ vrat.Add(i, 0); }
}
else
if ( (pocitej < (dx3 * 2)))
{
if ((value > krok
* 7) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ vrat.Add(i, 0); }
}
else
if ((pocitej < (dx3 * 3)))
{
if ((value > krok
* 6) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ vrat.Add(i, 0); }
}
else
if ( (pocitej < (dx3 *
4)))
{
if ((value > krok
* 5) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ vrat.Add(i, 0); }
}
else
if ((pocitej < (dx3 * 5)))
{
if ((value > krok
* 4) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ vrat.Add(i, 0); }
}
else
if ((pocitej < (dx3 * 6)))
{
//PNM
double
t = (1.0f / (double)data.Freq1);
double
t2 = t / (data.Ts);
double
dx = 0;
double
dx2 = t / 500;
double
dx3 = t2 / 8;
double
pocitej = 0;
double value = 0;
double
krok = (2*data.Ampl_mod) /
8f;
bool one = false;
for
(double i = 0; i < t; i += dx2)
{
if (i > dx)
{
if (data.typSignalu
== TypSignalu.sin)
value
= data.Ampl_mod + (data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1));
else
value
= data.Ampl_mod + (data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1));
pocitej
= 0;
one
= false;
value
= Math.Abs(value);
dx
+= t2;
}
if ((pocitej <
dx3))
{
if ((value >
krok) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ one = false;
vrat.Add(i, 0); }
}
else
if ((pocitej < (dx3 * 2)))
{
if ((value > krok
* 2) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ one = false;
vrat.Add(i, 0); }
}
else
if ((pocitej < (dx3 * 3)))
{
if ((value > krok
* 3) && (!one)) { one
= true; vrat.Add(i, 1); }
else
{ one = false;
vrat.Add(i, 0); }
}
else
if ((pocitej < (dx3 *
4)))
{
//PWM
double t = (1.0f / (double)data.Freq1);
double
t2 = t / data.Ts;
double
dx = 0;
double
dx2 = t / 1000;
double
dx3 = t2 / 8;
double
pocitej = 0;
double
value = 0;
double
krok = (2*data.Ampl_mod) /
8f;
for
(double i = 0; i < t; i += dx2)
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
value
= data.Ampl_mod + (data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1));
else
value = data.Ampl_mod + (data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1));
value
= Math.Abs(value);
value
= Math.Round(value, 0);
pocitej
= 0;
}
if (pocitej <
dx3)
{
if (value > krok
) vrat.Add(i, 1);
else
vrat.Add(i, 0);
}
else
if (pocitej < dx3*2)
{
if (value >= krok
* 2)vrat.Add(i, 1);
else
vrat.Add(i, 0);
}
else
if(pocitej < dx3*3)
{
if (value >= krok
* 3)vrat.Add(i, 1);
else
vrat.Add(i, 0);
}
else
if (pocitej < dx3 * 4)
{
Pro zobrazení písmen řeské abecedy byla vytořeny funkce :
-
ReckceZnaky.Velke
-
ReckceZnaky.Male