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 PSK_FSK,
který obsahuje funke :
kde :
public enum TypModulaceAM
{
PSK2 = 0,
FSK2,
PSK4,
FSK4,
QPSK
}
//
Ampl_mod – amplituda signalu
// Freq1
až Freq4– frekvence signalu
// time
– cas zobrazeneho signalu
// bity
– pole bitu
public Data(int
Ampl, int Freq1, int
Freq2, int Freq3, int
Freq4, int Time, bool[]
bity)
//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);
//PSK2
float lenght = data.Time / 1000f;
float
deltat = 1.0f / (data.Time * data.Freq1);
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.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i));
else
//0
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i + Math.PI));
}
//PSK4
float lenght = data.Time / 1000f;
float
deltat = 1.0f / (data.Time * data.Freq1);
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.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i));
else
if ((data.bity[index] == false) && (data.bity[index + 1] == true)) //01
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i + (Math.PI/2)));
else
if ((data.bity[index] == true) && (data.bity[index + 1] == false)) //10
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i + Math.PI));
else
//11
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i + ((3/2) * Math.PI)));
}
//FSK2
float lenght = data.Time / 1000f;
float
deltat = 1.0f / (data.Time * (data.Freq1 < data.Freq2 ? data.Freq2 :
data.Freq1));
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.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i));
else
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq2 * i));
}
//FSK4
float lenght = data.Time / 1000f;
float
nejvetsi = 0.0f;
if
(data.Freq1 > data.Freq2) nejvetsi = data.Freq1;
if
(nejvetsi < data.Freq3) nejvetsi = data.Freq3;
if
(nejvetsi < data.Freq4) nejvetsi = data.Freq4;
float
deltat = 1.0f / (data.Time * nejvetsi);
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.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i));
else
if ((data.bity[index] == false) && (data.bity[index + 1] == true)) //01
vrat.Add(i, data.Ampl
* Math.Cos(2 * Math.PI
* data.Freq2 * i));
else
if ((data.bity[index] == true) && (data.bity[index + 1] == false)) //10
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq3 * i));
else
//11
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq4 * i));
}
//QPSK
float lenght = data.Time / 1000f;
float
deltat = 1.0f / (data.Time * data.Freq1);
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.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * 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.Freq1 * 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.Freq1 * i + ((5 / 4) * Math.PI)));
else
//11
vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI
* data.Freq1 * i + ((7 / 5) * Math.PI)));
}
Pro zobrazení písmen řeské abecedy byla vytořeny funkce :
-
ReckceZnaky.Velke
-
ReckceZnaky.Male