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 OOK_ASK,
který obsahuje funke :
public BoxObj[] BarevneBoxy(Data data, TypModulace typModulace, float
pozice, float
Velikost)
public PointPairList ModulacniSignal(Data data)
public PointPairList OOK(Data
data)
public PointPairList ASK2(Data
data)
public PointPairList ASK4(Data
data)
public PointPairList ASK8(Data
data)
kde :
public enum TypModulaceAM
{
ASK8 = 0,
ASK2,
OOK,
ASK4
}
// Ampl1
až AMpl4 – amplituda signalu
// Freq
– frekvence signalu
// time
– cas zobrazeneho signalu
//bity[] – pole bitu
public Data(int Ampl1, int Ampl2, int Ampl3, int Ampl4, int Freq, int Time,
bool[] bity)
//Generovani
modulacniho signalu
int index = 0; float
i = 0;
vrat.Add(0,
0);
bool last = false;
for
(i = 0; i < lenght; i += deltat)
{
if (index >= 10) break;
if (data.bity[index++])
{
if (!last) vrat.Add(i, 0);
vrat.Add(i,
1);
last
= true;
}
else
{
if (last) vrat.Add(i, 1);
vrat.Add(i,
0);
last
= false;
}
}
if (last) vrat.Add(i, 1);
else
vrat.Add(i, 0);
//OOK
float lenght = data.Time
/ 1000f;
float deltat = 1.0f
/ (data.Time * data.Freq);
if (deltat <
0.00001f) deltat = 0.00001f;
float krok = lenght
/ 10;
int index = 0; float i = 0;
float krok2 = krok;
for
(i = 0; i < lenght; i += deltat)
{
if (index >= 10) break;
if (i > krok2)
{
krok2 += krok;
index++;
}
if (data.bity[index])
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i));
else
vrat.Add(i,
0);
}
//ASK2
float lenght = data.Time
/ 1000f;
float deltat = 1.0f
/ (data.Time * data.Freq);
if (deltat <
0.00001f) deltat = 0.00001f;
float krok = lenght
/ 10;
int index = 0; float i = 0;
float krok2 = krok;
for
(i = 0; i < lenght ; i += deltat)
{
if (index >= 10) break;
if (i > krok2)
{
krok2 += krok;
index++;
}
if (data.bity[index]) //1
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i));
else
//0
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
}
//ASK4
float lenght =
data.Time / 1000f;
float deltat = 1.0f
/ (data.Time * data.Freq);
if (deltat <
0.00001f) deltat = 0.00001f;
float krok = lenght
/ 5;
int index = 0; float i = 0;
float krok2 = krok;
for
(i = 0; i < lenght; i += deltat)
{
if (index >= 8) break;
if (i > krok2)
{
krok2 += krok;
index+=2;
}
if ((data.bity[index] == false)&&(data.bity[index+1] == false)) //00
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i));
else
if ((data.bity[index]
== false) &&
(data.bity[index+1] == true))
//01
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false))
//10
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
else
//11
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
}
//ASK8
float lenght =
data.Time / 1000f;
float deltat = 1.0f
/ (data.Time * data.Freq);
if (deltat <
0.00001f) deltat = 0.00001f;
float krok = lenght
/ (10.0f/3.0f);
int index = 0; float i = 0;
float krok2 = krok;
for
(i = 0; i < lenght; i += deltat)
{
if (index >= 7) break;
if (i > krok2)
{
krok2 += krok;
index += 3;
if (index > 6) break;
}
if ((data.bity[index] == false) && (data.bity[index + 1] == false) &&
(data.bity[index + 2] == false))
//000
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == true))
//001
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == false))
//010
vrat.Add(i,
data.Ampl3 * Math.Cos(2
* Math.PI * data.Freq * i));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == false))
//100
vrat.Add(i,
data.Ampl4 * Math.Cos(2
* Math.PI * data.Freq * i));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == true))
//011
vrat.Add(i,
data.Ampl1 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == true))
//101
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == false))
//110
vrat.Add(i,
data.Ampl3 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
else //111
vrat.Add(i,
data.Ampl4 * Math.Cos(2
* Math.PI * data.Freq * i + Math.PI));
}
Pro zobrazení písmen řeské abecedy byla vytořeny funkce :
-
ReckceZnaky.Velke
-
ReckceZnaky.Male