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 AM_DSB_SSB,
který obsahuje funke :
-
public PointPairList
ModulacniSignal(Data data)
-
public PointPairList
PasmovySignal(TypModulaceAM typModulace, Data data)
-
public PointPairList AmplitudoveSpektrum(TypModulaceAM typModulace, Data data, SignalProSpektrum
signalSelect))
-
public PointPairList FazoveSpektrum(TypModulaceAM typModulace, Data data, SignalProSpektrum
signalSelect)
-
public PointPairList VykonoveSpektrum(TypModulaceAM typModulace, Data dat, SignalProSpektrum signalSelect)
kde :
public enum TypModulaceAM
{
AM = 0,
DSB_SC,
USSB_SC,
LSSB_SC
}
// Freq_mod – frekvence
modulacniho signalu
// DC_mod – stejnosmerna
hodnota modulacniho signalu
// Ampl_mod – amplituda
modulacniho signalu
// TypSig_mod – typ
modulacniho signalu (sin, cos)
// Freq_pasm – frekvence
pasmoveho signalu
// fvz – vzorkovaci
frekvence
// period – perioda
zobrazeneho signalu
// time – cas zobrazeneho
signalu
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
for (float
i = 0; i < Math.Round((lenght - deltat), zaokrouhleni); i = (float)Math.Round(i + deltat, zaokrouhleni))
{
if (Data.TypSignalu.sin == data.TypSig_mod)
y =
data.DC_mod + data.Ampl_mod * Math.Sin((float)i * 2 * Math.PI * data.Freq_mod);
else //jinak je
cos
y =
data.DC_mod + data.Ampl_mod * Math.Cos((float)i * 2 * Math.PI * data.Freq_mod);
}
//Generovani
pasmoveho signalu
for (float k = 0; k < meze; k++, i += deltat)
{
if (Data.TypSignalu.sin == data.TypSig_mod)
{
if (typModulace
== TypModulaceAM.AM)
y = 1 +
(data.DC_mod + data.Ampl_mod * Math.Sin((float)i * 2 * Math.PI * data.Freq_mod));
else if (typModulace == TypModulaceAM.DSB_SC)
y =
(data.DC_mod + data.Ampl_mod * Math.Sin((float)i * 2 * Math.PI * data.Freq_mod));
else //ssb
{
Complex pomoc = new Complex();
cm.Re =
(data.DC_mod + data.Ampl_mod * Math.Sin((float)i * 2 * Math.PI * data.Freq_mod));
cm.Im = (data.DC_mod + data.Ampl_mod * Math.Cos((float)i * 2 * Math.PI * data.Freq_mod));
pomoc.Im = Math.Sin((float)i * 2 * Math.PI * data.Freq_pasm);
if (typModulace
== TypModulaceAM.LSSB_SC)
y
= (cm.Re * pomoc.Re) - (cm.Im * pomoc.Im);
else y = (cm.Re * pomoc.Re) + (cm.Im *
pomoc.Im);
}
}
else //jinak je cos
{
if (typModulace
== TypModulaceAM.AM)
y = 1 + (data.DC_mod
+ data.Ampl_mod * Math.Cos((float)i * 2 * Math.PI * data.Freq_mod));
else if (typModulace == TypModulaceAM.DSB_SC)
y = (data.DC_mod +
data.Ampl_mod * Math.Cos((float)i * 2 * Math.PI * data.Freq_mod));
else //ssb
{
Complex pomoc = new Complex();
cm.Re = (data.DC_mod
+ data.Ampl_mod * Math.Cos((float)i * 2 * Math.PI * data.Freq_mod));
cm.Im = (data.DC_mod + data.Ampl_mod * Math.Sin((float)i * 2 * Math.PI * data.Freq_mod));
pomoc.Re = Math.Cos((float)i * 2 * Math.PI * data.Freq_pasm);
pomoc.Im = Math.Sin((float)i * 2 * Math.PI * data.Freq_pasm);
if(typModulace
== TypModulaceAM.LSSB_SC)
y = (cm.Re * pomoc.Re) - (cm.Im * pomoc.Im);
else y = (cm.Re * pomoc.Re) + (cm.Im * pomoc.Im);
}
}
if( (typModulace
!= TypModulaceAM.LSSB_SC)
&& (typModulace != TypModulaceAM.USSB_SC))
y = y * Math.Cos((float)i * 2 * Math.PI * data.Freq_pasm);
}
//Ve spektrech je nejprve
osetreno rozliseni vypoctu, nasledne je provedena Fourierova transformace a
fftshift
//Amplitudove
spektrum
vrat.Add(((double)(k[i] * data.Fvz) / sig.Count), fourierData.MagnitudeDot(fftdata[i]) / fourierData.dataDFT.Length);
//Fazove
spektrum
if ((fourierData.MagnitudeDot(fftdata[i])/fourierData.dataDFT.Length < 0.01))
{
fftdata[i].Real = 0;
fftdata[i].Imag = 0;
}
vrat.Add(((double)(k[i] * data.Fvz) / sig.Count), fourierData.PhaseDot(fftdata[i]));
//Vykonove
spektrum
vrat.Add(((double)(k[i] * data.Fvz) / sig.Count), fourierData.PowerDot(fftdata[i]));
Pro
zobrazení písmen řeské abecedy byla vytořeny funkce :
-
ReckceZnaky.Velke
-
ReckceZnaky.Male