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 QAM,
který obsahuje funke :
public PointPairList ModulacniSignal(Data data)
public PointPairList QAM4(Data
data)
public PointPairList QAM16(Data data)
kde :
public enum TypModulaceAM
{
QAM16 = 0,
QAM4
}
// Ampl1
až Ampl3– amplituda signalu
//
Freq_mod – frekvence signalu
// time
– cas zobrazeneho signalu
//bity[] – pole bitu
public Data(int Freq_mod, int
DC_mod, int Ampl_mod, TypSignalu
TypSig_mod, int Freq_pasm, int fvz, int period, int time)
//Generovani
modulacniho signalu
float lenght =
data.Time / 1000f;
float deltat = lenght / 10;
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);
//QAM4
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 >= 9) break;
if (i > krok2)
{
krok2 += krok;
index += 2;
}
if ((data.bity[index] == false) && (data.bity[index + 1] == false)) //00
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((1 / 4) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true))
//01
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((3 / 4) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false))
//10
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((5 / 4) * Math.PI)));
else
//11
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((7 / 5) * Math.PI)));
}
//QAM16
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/4.0f);
int index = 0; float i = 0;
float krok2 = krok;
for
(i = 0; i < lenght; i += deltat)
{
if (index >= 6) break;
if (i > krok2)
{
krok2 += krok;
index+=4;
if (index > 4) break;
}
if ((data.bity[index] == false) && (data.bity[index+1] == false) &&
(data.bity[index+2] == false)
&& (data.bity[index+3] == false))
//0000
vrat.Add(i,
data.Ampl3 * Math.Cos(2
* Math.PI * data.Freq * i + ((5 / 4) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == true))
//0001
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((13 / 12) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == false))
//0010
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((11 / 12) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == true))
//0011
vrat.Add(i,
data.Ampl3 * Math.Cos(2
* Math.PI * data.Freq * i + ((3 / 4) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == false))
//0100
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((17 / 12) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == true))
//0101
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((5 / 4) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == true))
//0111
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((3 / 4) * Math.PI)));
else
if ((data.bity[index]
== false) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == false))
//0110
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((7 / 12) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == false))
//1100
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((19 / 12) * Math.PI)));
else if
((data.bity[index] == true)
&& (data.bity[index + 1] == true)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == true))
//1101
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((7 / 4) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == true))
//1111
vrat.Add(i,
data.Ampl * Math.Cos(2 * Math.PI * data.Freq
* i + ((1 / 4) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == true)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == false))
//1110
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((5 / 12) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == false))
//1000
vrat.Add(i,
data.Ampl3 * Math.Cos(2
* Math.PI * data.Freq * i + ((7 / 4) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == false)
&& (data.bity[index + 3] == true))
//1001
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((23 / 12) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == true))
//1011
vrat.Add(i,
data.Ampl2 * Math.Cos(2
* Math.PI * data.Freq * i + ((1 / 12) * Math.PI)));
else
if ((data.bity[index]
== true) &&
(data.bity[index + 1] == false)
&& (data.bity[index + 2] == true)
&& (data.bity[index + 3] == false))
//1010
vrat.Add(i,
data.Ampl3 * Math.Cos(2
* Math.PI * data.Freq * i + ((1 / 4) * Math.PI)));
}
Pro zobrazení písmen řeské abecedy byla vytořeny funkce :
-
ReckceZnaky.Velke
-
ReckceZnaky.Male