/// <summary> /// Funkcja inicjalizujaca sygnaly i ich wykresy dla lab4 dla modulacji ASK /// </summary> private void initialize_Lab4_ASK() { // inicjalizacja obiektow klasy wykresow przebiegu sygnalu courseGraph1 = new CourseGraph(10, 24, 150, 500, "Sygnał Cyfrowy"); courseGraph2 = new CourseGraph(10, 184, 150, 500, "Nosna"); courseGraph3 = new CourseGraph(10, 344, 150, 500, "ASK"); // inicjalizacja obiektow klasy wykresow widma spectrumGraph2 = new SpectrumGraph(520, 184, 150, 500, "Nośna"); spectrumGraph3 = new SpectrumGraph(520, 344, 150, 500, "ASK"); // inicjalizacja obiektow klasy sygnalow signal1 = new AnalogSignal(50, 100, 1000, 1); // nośna digital = new DigitalSignal("10101011", 1000, 0.125); // Generowanie sygnalow na podstawie // podanych w konstruktorze parametrow signal1.GenerateSinusSignal(); // rysowanie wykresow sygnalu 2. courseGraph1.Signal = digital; courseGraph1.Limit(5000); courseGraph1.DrawGraph(); // rysowanie wykresow sygnalu 1. courseGraph2.Signal = signal1; courseGraph2.DrawGraph(); spectrumGraph2.setSignal(signal1); spectrumGraph2.Autoscale(); spectrumGraph2.DrawGraph(); // deklaracja i inicjalizacja obiektu sygnału zmodulowanego ASK AnalogSignal ASK = new AnalogSignal(signal1); ASK.ASK(signal1, digital); //rysowanie wykresów ASK courseGraph3.Signal = ASK; courseGraph3.DrawGraph(); spectrumGraph3.setSignal(ASK); spectrumGraph3.Autoscale(); spectrumGraph3.DrawGraph(); }
/// <summary> /// Funkcja realuzująca demodulację sygnałów zmodulowanych częstotliwościowo /// </summary> /// <param name="carrier">Sygnał nośny - kod</param> /// <param name="timeOfBit">Czas trwania jednego bitu</param> /// <param name="n">Liczba okresów przypadających dla jednego bitu w sygnale nośnym o mniejszej częstotliwośi</param> /// <returns></returns> public DigitalSignal demodulationFSK(AnalogSignal carrier, double timeOfBit, int n) { int numberOfBit; int lengthOfWord = 8; long [] heuristic = new long[lengthOfWord]; //Obiczenie częstotliwości na podstawie liczby okresów na czas trawnia bitu double frequency1 = n / timeOfBit; double frequency2 = n * 2 / timeOfBit; AnalogSignal signal1 = new AnalogSignal(carrier.Amplitude, frequency1, carrier.SamplingFrequency, carrier.Length); AnalogSignal signal2 = new AnalogSignal(carrier.Amplitude, frequency2, carrier.SamplingFrequency, carrier.Length); //Wygenerowanie sygnałów nośnych signal1.GenerateSinusSignal(); signal2.GenerateSinusSignal(); //Pomnożenie sygnałów nośnych przez zakodowaną informację AnalogSignal multi1 = signal1 * carrier; AnalogSignal multi2 = signal2 * carrier; //Zsumowanie sygnałów AnalogSignal sumOfMulti = multi1 + multi1; string word = ""; for (int i = 0; i < carrier.LengthOfBuffer; i++) { numberOfBit = (int)(i / carrier.SamplingFrequency / timeOfBit); heuristic[numberOfBit] += (long)sumOfMulti.Course[i]; } for (int i = 0; i < lengthOfWord; i++) { if (heuristic[i] < 0) { word += "1"; } else { word += "0"; } } return(new DigitalSignal(word, carrier.SamplingFrequency, timeOfBit)); }
private void editSignal(int item, double amplitude, double frequency, double samplingFrequency, double length, int accuracyOfApproximation) { graphPanel.Controls.Remove(signalGraph); String label = ""; signal = new AnalogSignal(amplitude, frequency, samplingFrequency, length); switch (item) { case 0: label = "Sinusoida"; signal.GenerateSinusSignal(); break; case 1: label = "Piłokształtny"; signal.GenerateSawSignal(accuracyOfApproximation); break; case 2: label = "Trójkątny"; signal.GenerateTriangleSignal(accuracyOfApproximation); break; case 3: label = "Prostokątny"; signal.GenerateSquareSignal(accuracyOfApproximation); break; case 4: label = "Szum"; signal.GenerateNoise(accuracyOfApproximation); break; } signalGraph = new CourseGraph(3, 3, 150, 500, label); signalGraph.Signal = signal; signalGraph.Autoscale(); signalGraph.DrawGraph(); graphPanel.Controls.Add(signalGraph); }
/// <summary> /// Funkcja realuzująca demodulację sygnałów zmodulowanych amplitudowo i fazowo /// </summary> /// <param name="carrier">Sygnał nośny - kod</param> /// <param name="timeOfBit">Czas trwania jednego bitu</param> /// <param name="limit">Granica komparatora</param> /// <param name="unipolar">Określa, czy iloczyn sygnałów jest jednobiegunowy</param> /// <returns>Zwraca ciąg bitów zawartych w sygnale nośnym</returns> public DigitalSignal demodulationASKandPSK(AnalogSignal carrier, double timeOfBit, long limit, bool unipolar) { int numberOfBit; int lengthOfWord = 8; long [] heuristic = new long[lengthOfWord]; analogSignal = new AnalogSignal(carrier.Amplitude, carrier.Frequency, carrier.SamplingFrequency, carrier.Length); //Generowanie sygnału analogSignal.GenerateSinusSignal(); //Pomnożenie sygnału nośnego przez informację AnalogSignal multi = analogSignal * carrier; string word = ""; for (int i = 0; i < carrier.LengthOfBuffer; i++) { numberOfBit = (int)(i / carrier.SamplingFrequency / timeOfBit); heuristic[numberOfBit] += (long)multi.Course[i]; } for (int i = 0; i < lengthOfWord; i++) { if (heuristic[i] > limit && unipolar) //jeżeli sygnał jest jednobiegunowy { word += "1"; } else if (heuristic[i] < limit && !unipolar) // jeżeli sygnał jest dwubiegunowy { word += "1"; } else { word += "0"; } } return(new DigitalSignal(word, carrier.SamplingFrequency, timeOfBit)); }
/// <summary> /// Funkcja inicjalizujaca sygnaly i ich wykresy dla lab5 dla demodulacji ASK /// </summary> private void initialize_Lab5_ASK() { Demodulation demodul = new Demodulation(); string word = "10101011"; courseGraph1 = new CourseGraph(10, 24, 150, 500, "Nośna"); courseGraph2 = new CourseGraph(10, 184, 150, 500, word); courseGraph3 = new CourseGraph(10, 344, 150, 500, "Kod ASK"); signal1 = new AnalogSignal(7, 32.5, 1000, 0.5); // nośna digital = new DigitalSignal(word, 1000, 0.0625); //informacja // s. nośny signal1.GenerateSinusSignal(); // s. zmodulowany AnalogSignal ASK = new AnalogSignal(signal1); ASK.ASK(signal1, digital); // Rysowanie przebiegów: // Sygnał nośny courseGraph1.Signal = signal1; courseGraph1.Autoscale(); courseGraph1.DrawGraph(); //sygnal zmodulowany ASK courseGraph2.Signal = ASK; courseGraph2.Autoscale(); courseGraph2.DrawGraph(); //Kod cyfrowy courseGraph3.Signal = demodul.demodulationASKandPSK(ASK, 0.0625, 200, true); // demodulacja courseGraph3.Autoscale(); courseGraph3.DrawGraph(); }
/// <summary> /// Funkcja inicjalizujaca sygnaly i ich wykresy dla lab1 i lab2 /// </summary> private void initialize_Lab1_Lab2() { // inicjalizacja obiektow klasy wykresow przebiegu sygnalu courseGraph1 = new CourseGraph(10, 24, 150, 500, "Sygnał 1."); courseGraph2 = new CourseGraph(10, 184, 150, 500, "Sygnał 2."); courseGraph3 = new CourseGraph(10, 344, 150, 500, "Suma"); courseGraph4 = new CourseGraph(10, 504, 150, 500, "Iloczyn"); // inicjalizacja obiektow klasy wykresow widma spectrumGraph1 = new SpectrumGraph(520, 24, 150, 500, "Sygnał 1."); spectrumGraph2 = new SpectrumGraph(520, 184, 150, 500, "Sygnał 2."); spectrumGraph3 = new SpectrumGraph(520, 344, 150, 500, "Suma"); spectrumGraph4 = new SpectrumGraph(520, 504, 150, 500, "Iloczyn"); // inicjalizacja obiektow klasy sygnalow signal1 = new AnalogSignal(20, 100, 1000, 0.5); signal2 = new AnalogSignal(50, 10, 1000, 0.5); // Generowanie sygnalow na podstawie // podanych w konstruktorze parametrow signal1.GenerateSinusSignal(); signal2.GenerateSinusSignal(); // rysowanie wykresow sygnalu 1. courseGraph1.Signal = signal1; courseGraph1.Autoscale(); courseGraph1.DrawGraph(); spectrumGraph1.Signal = signal1; spectrumGraph1.Autoscale(); spectrumGraph1.DFT(); spectrumGraph1.DrawGraph(); // rysowanie wykresow sygnalu 2. courseGraph2.Signal = signal2; courseGraph2.Autoscale(); courseGraph2.DrawGraph(); spectrumGraph2.Signal = signal2; spectrumGraph2.Autoscale(); spectrumGraph2.DFT(); spectrumGraph2.DrawGraph(); // rysowanie wykresow sumy sygnalow Signal sumOfSignals = signal1 + signal2; courseGraph3.Signal = sumOfSignals; courseGraph3.Autoscale(); courseGraph3.DrawGraph(); spectrumGraph3.Signal = sumOfSignals; spectrumGraph3.Autoscale(); spectrumGraph3.DFT(); spectrumGraph3.DrawGraph(); // rysowanie wykresow iloczynu sygnalow Signal productOfSignals = signal1 * signal2; courseGraph4.Signal = productOfSignals; courseGraph4.Autoscale(); courseGraph4.DrawGraph(); spectrumGraph4.Signal = productOfSignals; spectrumGraph4.Autoscale(); spectrumGraph4.DFT(); spectrumGraph4.DrawGraph(); }
/// <summary> /// Funkcja inicjalizujaca sygnaly i ich wykresy dla lab3 /// </summary> private void initialize_Lab3() { // inicjalizacja obiektow klasy wykresow przebiegu sygnalu courseGraph1 = new CourseGraph(10, 24, 150, 500, "Nośna"); courseGraph2 = new CourseGraph(10, 184, 150, 500, "Sygnał informacyjny"); courseGraph3 = new CourseGraph(10, 344, 150, 500, "AM"); courseGraph4 = new CourseGraph(10, 504, 150, 500, "PM"); // inicjalizacja obiektow klasy wykresow widma spectrumGraph1 = new SpectrumGraph(520, 24, 150, 500, "Nośna"); spectrumGraph2 = new SpectrumGraph(520, 184, 150, 500, "Sygnał informacyjny"); spectrumGraph3 = new SpectrumGraph(520, 344, 150, 500, "AM"); spectrumGraph4 = new SpectrumGraph(520, 504, 150, 500, "PM"); // inicjalizacja obiektow klasy sygnalow signal1 = new AnalogSignal(50, 100, 1000, 0.5); // nośna signal2 = new AnalogSignal(50, 10, 1000, 0.5); // sygnał informacyjny // Generowanie sygnalow na podstawie // podanych w konstruktorze parametrow signal1.GenerateSinusSignal(); signal2.GenerateSinusSignal(); // rysowanie wykresow sygnalu 1. courseGraph1.Signal = signal1; courseGraph1.DrawGraph(); spectrumGraph1.Signal = signal1; spectrumGraph1.Limit(2); spectrumGraph1.DrawGraph(); // rysowanie wykresow sygnalu 2. courseGraph2.Signal = signal2; courseGraph2.DrawGraph(); spectrumGraph2.Signal = signal2; spectrumGraph2.Limit(2); spectrumGraph2.DrawGraph(); // rysowanie wykresow AM AnalogSignal AM = new AnalogSignal(); AM.AmplitudeModulation(signal1, signal2, 0.01); courseGraph3.Signal = AM; courseGraph3.Limit(1500); courseGraph3.DrawGraph(); spectrumGraph3.Signal = AM; spectrumGraph3.Limit(15); spectrumGraph3.DrawGraph(); //rysowanie wykresow PW AnalogSignal PM = new AnalogSignal(); PM.PhaseModulation(signal1, signal2, 0.5); courseGraph4.Signal = PM; courseGraph4.DrawGraph(); spectrumGraph4.Signal = PM; spectrumGraph4.Limit(2); spectrumGraph4.DrawGraph(); }