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 PCM,
který obsahuje funke :
public PointPairList ModulacniSignal(Data data)
public PointPairList[] Vzorky(Data data, float sizeUp,
float sizeDown)
public PointPairList[] Urovne2bit(Data data)
public PointPairList[] Urovne3bit(Data data)
public PointPairList[] Urovne4bit(Data data)
public TextObj[] text2Bit (Data data)
public TextObj[] text3Bit (Data data)
public TextObj[] text4Bit (Data data)
public PointPairList PCModulation2Bit(Data data)
public PointPairList PCModulation3Bit(Data data)
public PointPairList PCModulation4Bit(Data data)
public PointPairList UnipolarNRZ2Bit(Data data)
public PointPairList UnipolarNRZ3Bit(Data data)
public PointPairList UnipolarNRZ4Bit(Data data)
public PointPairList PolarNRZ2Bit(Data data)
public PointPairList PolarNRZ2Bit(Data data)
public PointPairList PolarNRZ4Bit(Data data)
public PointPairList UnipolarRZ2Bit(Data data)
public PointPairList UnipolarRZ3Bit(Data data)
public PointPairList UnipolarRZ4Bit(Data data)
public PointPairList BipolarRZ2Bit(Data data)
public PointPairList BipolarRZ3Bit(Data data)
public PointPairList BipolarRZ4Bit(Data data)
public PointPairList ManchesterNRZ2Bit(Data data)
public PointPairList ManchesterNRZ3Bit(Data data)
public PointPairList ManchesterNRZ4Bit(Data data)
kde :
// 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)
Pro ukázku jsou
zobrazeny pouze 2bitové funkce
//Generovani
modulacniho signalu
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 * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
vrat.Add(i,
y1);
}
//Generovani
Vzorkü – znazorneni vzorkovani v grafu
PointPairList[] vrat = new PointPairList[data.Ts];
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);
}
}
//Urovne
– znazorneni kvantovacich urovni v grafu
PointPairList[] vrat = new PointPairList[4];
float t = (1.0f / (float)data.Freq1);
float t2 = t / data.Ts;
double
dValue = (2*data.Ampl_mod) / 3.0f;
for
(int i = 0; i <
vrat.Length; i++) vrat[i] = new PointPairList();
vrat[0].Add(0,
-data.Ampl_mod); vrat[0].Add(t, -data.Ampl_mod); //00
vrat[1].Add(0,
-data.Ampl_mod + (dValue)); vrat[1].Add(t, -data.Ampl_mod + (dValue));
//01
vrat[2].Add(0,
-data.Ampl_mod + (dValue * 2)); vrat[2].Add(t,
-data.Ampl_mod + (dValue * 2)); //10
vrat[3].Add(0,
-data.Ampl_mod + (dValue * 3)); vrat[3].Add(t,
-data.Ampl_mod + (dValue * 3)); //11
//Text do grafu
TextObj[] text = new TextObj[4];
text[0] = new TextObj("00",
t + (t*0.05) , -data.Ampl_mod);
text[1] = new TextObj("01",
t + (t * 0.05), -data.Ampl_mod
+ (dValue));
text[2] = new TextObj("10",
t + (t * 0.05), -data.Ampl_mod
+ (dValue * 2));
text[3] = new TextObj("11",
t + (t * 0.05), -data.Ampl_mod
+ (dValue * 3));
for
(int i = 0; i <
text.Length; i++)
{
text[i].Location.CoordinateFrame = CoordType.AxisXYScale;
text[i].Location.AlignH = AlignH.Right;
text[i].Location.AlignV = AlignV.Center;
text[i].FontSpec.FontColor = Color.Black;
text[i].FontSpec.Border.IsVisible = false;
text[i].FontSpec.Fill.IsVisible = false;
text[i].FontSpec.Size = 14;
}
return text;
//PCM
modulation
for (float
i = 0; i < t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
if (y1 < 0) hodnota = hodnota * (-1);
if (y1 == 0) hodnota = 0;
else
{
if (y1 < -data.Ampl_mod + dvalueHalf) hodnota =
-data.Ampl_mod; //00
else if
(y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota =
-data.Ampl_mod + dValue; //01
else if
(y1 < (-data.Ampl_mod +
(dValue * 2)) + dvalueHalf)
hodnota = -data.Ampl_mod +
(dValue*2); //10
else hodnota = -data.Ampl_mod + (dValue * 3); //11
}
vrat.Add(i,
hodnota);
}
else
{
vrat.Add(i,
hodnota);
}
}
//Unipolar
NRZ
for (float i = 0; i < t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
if (y1 < 0) hodnota = hodnota * (-1);
if (y1 == 0) hodnota = 0;
else
{
if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00
else if
(y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota =
2; //01
else if
(y1 < (-data.Ampl_mod +
(dValue * 2)) + dvalueHalf)
hodnota = 3; //10
else hodnota = 4; //11
}
dx2 += (t2 / 2); bit2 = false;
}
if (i > dx2)
{
dx2 += (t2 / 2);
bit2 = true;
}
if (hodnota == 1) //00
vrat.Add(i,
0);
else
if (hodnota == 2) //01
{
if (bit2) vrat.Add(i,
data.Ampl_mod);
else
vrat.Add(i, 0);
}
else
if (hodnota == 3) //10
{
if (bit2) vrat.Add(i,
0);
else
vrat.Add(i, data.Ampl_mod);
}
else
vrat.Add(i, data.Ampl_mod); //11
}
//Polar
NRZ
for (float
i = 0; i < t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
if (y1 < 0) hodnota = hodnota * (-1);
if (y1 == 0) hodnota = 0;
else
{
if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00
else if
(y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota =
2; //01
else if
(y1 < (-data.Ampl_mod +
(dValue * 2)) + dvalueHalf)
hodnota = 3; //10
else hodnota = 4; //11
}
dx2 += (t2 / 2); bit2 = false;
}
if (i > dx2)
{
dx2 += (t2 / 2);
bit2 = true;
}
if (hodnota == 1) //00
vrat.Add(i,
-data.Ampl_mod);
else
if (hodnota == 2) //01
{
if
(bit2) vrat.Add(i, data.Ampl_mod);
else
vrat.Add(i, -data.Ampl_mod);
}
else
if (hodnota == 3) //10
{
if (bit2) vrat.Add(i,
-data.Ampl_mod);
else
vrat.Add(i, data.Ampl_mod);
}
else
vrat.Add(i, data.Ampl_mod); //11
}
//Unipolar
RZ
for (float
i = 0; i < t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
if (y1 < 0) hodnota = hodnota * (-1);
if (y1 == 0) hodnota = 0;
else
{
if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00
else if
(y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota =
2; //01
else if
(y1 < (-data.Ampl_mod +
(dValue * 2)) + dvalueHalf)
hodnota = 3; //10
else hodnota = 4; //11
}
dx2 += (t2 / 4); bit2 = false; returnzero
= false;
}
if (i > dx2)
{
dx2 += (t2 / 4);
if (bit2)
{
if (returnzero == false)
returnzero
= true;
}
else
{
if (returnzero == false)
returnzero
= true;
else
{
bit2 = true;
returnzero
= false;
}
}
}
if (returnzero)
vrat.Add(i, 0);
else
{
if (hodnota == 1) //00
vrat.Add(i, 0);
else if (hodnota == 2) //01
{
if (bit2) vrat.Add(i,
data.Ampl_mod);
else vrat.Add(i, 0);
}
else
if (hodnota == 3) //10
{
if (bit2) vrat.Add(i,
0);
else vrat.Add(i, data.Ampl_mod);
}
else
vrat.Add(i, data.Ampl_mod); //11
}
}
//Bipolar
RZ
for (float
i = 0; i < t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
if (y1 < 0) hodnota = hodnota * (-1);
if (y1 == 0) hodnota = 0;
else
{
if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00
else if
(y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota =
2; //01
else if
(y1 < (-data.Ampl_mod +
(dValue * 2)) + dvalueHalf)
hodnota = 3; //10
else hodnota = 4; //11
}
dx2 += (t2 / 4); bit2 = false; returnzero
= false;
}
if (i > dx2)
{
dx2 += (t2 / 4);
if (bit2)
{
if (returnzero == false)
returnzero
= true;
}
else
{
if (returnzero == false)
returnzero
= true;
else
{
bit2 = true;
returnzero
= false;
}
}
}
if (returnzero)
vrat.Add(i, 0);
else
{
if (hodnota == 1) //00
vrat.Add(i, -data.Ampl_mod);
else
if (hodnota == 2) //01
{
if (bit2) vrat.Add(i,
data.Ampl_mod);
else vrat.Add(i, -data.Ampl_mod);
}
else
if (hodnota == 3) //10
{
if (bit2) vrat.Add(i,
-data.Ampl_mod);
else vrat.Add(i, data.Ampl_mod);
}
else
vrat.Add(i, data.Ampl_mod); //11
}
}
//Manchaster
NRZ
PointPairList vrat = new PointPairList();
float t = (1.0f / (float)data.Freq1);
float t2 = t / data.Ts;
float dx = 0;
float dx2 = 0;
double
y1 = 0;
double
dValue = (2 * data.Ampl_mod) / 3.0f;
double
dvalueHalf = dValue / 2.0f;
double
hodnota = 0;
bool bit2 = true;
bool returnzero = false;
for
(float i = 0; i <
t; i += (t / 1000))
{
if (i > dx)
{
dx
+= t2;
if (data.typSignalu
== TypSignalu.sin)
y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);
else
y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 *
data.Freq1);
if (y1 < 0) hodnota = hodnota * (-1);
if (y1 == 0) hodnota = 0;
else
{
if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00
else if
(y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota =
2; //01
else if
(y1 < (-data.Ampl_mod +
(dValue * 2)) + dvalueHalf)
hodnota = 3; //10
else hodnota = 4; //11
}
dx2 += (t2 / 4); bit2 = false; returnzero
= false;
}
if (i > dx2)
{
dx2 += (t2 / 4);
if
(bit2)
{
if (returnzero == false)
returnzero
= true;
}
else
{
if (returnzero == false)
returnzero
= true;
else
{
bit2 = true;
returnzero
= false;
}
}
}
if (hodnota == 1)//00
{
if (returnzero)
vrat.Add(i, data.Ampl_mod);
else
vrat.Add(i, -data.Ampl_mod);
}
else
if (hodnota == 2) //01
{
if (bit2)//1
{
if (returnzero)
vrat.Add(i, -data.Ampl_mod);
else vrat.Add(i, data.Ampl_mod);
}
else//0
{
if (returnzero)
vrat.Add(i, data.Ampl_mod);
else vrat.Add(i, -data.Ampl_mod);
}
}
else
if (hodnota == 3) //10
{
if (bit2)//0
{
if (returnzero)
vrat.Add(i, data.Ampl_mod);
else vrat.Add(i, -data.Ampl_mod);
}
else//1
{
if (returnzero)
vrat.Add(i, -data.Ampl_mod);
else vrat.Add(i, data.Ampl_mod);
}
}
else
//11
{
if (returnzero)
vrat.Add(i, -data.Ampl_mod);
else vrat.Add(i, data.Ampl_mod);
}
}
Pro zobrazení písmen řeské abecedy byla vytořeny funkce :
-
ReckceZnaky.Velke
-
ReckceZnaky.Male