Главная страница
Навигация по странице:

  • ОТЧЕТ По лабораторной работе 3 Спектральный анализ случайных процессов по дисциплине: Цифровая обработка сигналов

  • Исполнитель

  • Руководитель

  • Путем ДПФ построить спектральные плотности по двум корреляционным функциям и объяснить, что они показывают. Оценить энергию сигнала(дисперсию) по спектральной плотности.

  • Путем ДПФ построить взаимную спектральную плотность от взаимной корреляционной функции, разложить ее на взаимный амплитудный и фазовый спектры и объяснить, что они показывают.

  • Отчет по лабораторной работе 3 Спектральный анализ случайных процессов по дисциплине


    Скачать 479.3 Kb.
    НазваниеОтчет по лабораторной работе 3 Спектральный анализ случайных процессов по дисциплине
    Дата31.05.2021
    Размер479.3 Kb.
    Формат файлаdocx
    Имя файлаDSP-Lab-3.docx
    ТипОтчет
    #212322



    Министерство образования и науки Российской Федерации

    Федеральное государственное автономное образовательное

    учреждение высшего образования
    «Национальный исследовательский

    Томский политехнический Университет»


    Инженерная школа ядерных технологий

    Направление 01.04.02 «Прикладная математика и информатика»


    ОТЧЕТ

    По лабораторной работе 3

    Спектральный анализ случайных процессов

    по дисциплине:

    Цифровая обработка сигналов

    Исполнитель:




    Е. В. Петрович

    _________________

    студент группы 0ВМ92




    Дата сдачи:

    _________________

























    Руководитель:




    А. И. Кочегуров

    _________________

    доцент,




    Дата проверки:

    _________________

    кандидат технических наук























    Томск – 2021
    Оглавление

    Задание




    1. Сгенерировать две последовательности x(n) и y(n) в виде выборки случайных данных с нормальным законом распределения с помощью датчика случайных чисел (ДСЧ). Значения математического ожидания и дисперсии выбрать из таблицы 1 в соответствии с вашим вариантом. Объем каждой выборки 200 значений.

    2. По выборкам получить оценки математического ожидания и дисперсии и сравнить с заданными.

    3. По каждой выборке построить автокорреляционные функции Rx(t) и Ry(t) соответственно. Объяснить, что они показывают и вычислить по ним оценки радиуса корреляции и дисперсии. Сравнить полученную оценку дисперсии с заданной.

    4. Путем ДПФ построить спектральные плотности по двум корреляционным функциям и объяснить, что они показывают.

    5. Оценить энергию сигнала(дисперсию) по спектральной плотности.

    6. Построить функцию взаимной корреляции Rxy(t), определить положение ее максимума и объяснить, что показывает это положение.

    7. Путем ДПФ построить взаимную спектральную плотность от взаимной корреляционной функции, разложить ее на взаимный амплитудный и фазовый спектры и объяснить, что они показывают.

    8. Провести анализ полученных результатов и написать отчет о проделанной работе.





    Цель работы


    Приобретение необходимых навыков по корреляционному анализу случайных процессов.



    Теоретическая часть


    Автокорреляционная функция – выражает зависимость взаимосвязи между сигналом и его копией от значения сдвига копии по аргументу. Для детерминированного непрерывного сигнала АКФ представляет собой интеграл:
    (1)
    При представлении сигнала в виде вектора в функциональном пространстве, АФК – скалярное произведение вектора и :
    (2)

    Для периодических сигналов, например sin или cos АФК рассчитывается за один период.
    При помощи АФК можно исследовать сигнал на присутствие в нем скрытых периодических составляющих.

    Функция взаимной корреляции - выражает зависимость взаимосвязи между двумя сигналами от значения сдвига одного сигнала относительно другого по аргументу:

    (3)

    Если сигналы представлены в виде дискретной выборки, то корреляционная функция выражается последовательностью

    (4)
    Радиус корреляции – значение на котором значения процесса можно считать некоррелированными:
    . (5)

    Любая функция может быть представлена в функциональном пространстве через ортогональный базис. Так как функции sin и cos, а также их гармоники ортогональны, через их систему можно представить любую функцию. Верно и обратное, зная коэффициенты и функции составляющие ортогональный базис можно восстановить любую функцию. Разложение периодической функции на сумму тригонометрических функций называется разложение Фурье:
    (6)

    По формуле Эйлера выражение можно выразить через комплексное выражение , где -мнимая единица. Тогда разложение Фурье принимает вид:

    (7)

    Дискретное преобразование Фурье – один из видов разложения функции в ряд Фурье. Сигнал представлен в виде цифровой последовательности размером N с интервалом дискретизации и длительностью :

    (8)
    Длительность сигнала принимаем его периодом. Тогда S – вектор в N-мерном функциональном пространстве. Его можно выразить через N – мерный ортонормированный базис функций , где -мнимая единица, k = (0,1,2, …, N - 1). Комплексные коэффициенты Фурье определяются как скалярное произведение сигнала S на соответствующую базисную функцию:

    (9)

    Энергия сигнала по теореме Парсеваля:

    (10)
    Фазой частотной составляющей является аргумент комплексного коэффициента Фурье.

    Основная часть



    На языке Python генерируем последовательности случайных величин с нормальным распределением и в количестве 200 значений в каждой с помощью генератора случайных чисел с равномерным распределением на интервале [0,1]. Результат представлен на Рис.1.








    Рис. 1. Гистограммы случайных последовательностей X и Y
    Оценка среднего и дисперсии для выборок:



    Среднее выборки X: -0.1625659738371587

    Стандартное отклонение выборки X: 1.0415953865688774

    Среднее выборки Y: 0.8707756490414005

    Стандартное отклонение выборки Y: 0.9885475325426426

    Рис. 2.Оценка среднего и дисперсии для выборок X и Y

    По формуле (4) вычисляем автокорреляционные функции для последовательностей X и Y и их функцию взаимной корреляции (Рис.3).






    Рис. 3. Функции автокорреляций и взаимной корреляции последовательностей X и Y

    Так как последовательности конечные, при сдвиге наблюдается краевой эффект, когда количество парных произведений уменьшается. В этом случае предполагается, что за пределами последовательностей сигнал нулевой. Либо можно увеличить одну последовательность в два раза, обеспечив при этом адекватное сопряжение двух частей (Рис 4).





    Рис. 4. Функции автокорреляций и взаимной корреляции последовательностей X и Y без краевых эффектов
    Так как сигнал Y не центрированный, то есть в нем присутствует постоянная составляющая, то для сравнения автокорреляционных функций сигналов и определения радиуса корреляции и дисперсии необходимо из функции автокорреляции вычесть квадрат постоянной составляющей (Рис.5).






    Рис. 5. Центрированные функции автокорреляции

    По Рис. 5 можно оценить дисперсии сигналов X и Y. Дисперсия равна значению центрированной функции автокорреляции в точке 0 (Рис. 6).
    D(X) = 0.8833304666848637

    D(Y) = 0.8617546258778195

    Рис. 6. Оценка дисперсии сигналов X и Y
    Радиус корреляции определяем по формуле (5). Так как процесс центрированный, интеграл равен нулю. Дисперсии сигналов равны значениям их функций автокорреляций в точке 0. Получаем:

    =1.1320791455920192
    =1.1604231297062757





    Рис. 7.Оценка радиусов корреляции сигналов X и Y

    На Рис.7 приведены оценки радиусов корреляции сигналов X (зеленая линия) и Y (желтая линия).
    На Рис. 8 приведен местоположение максимума функции взаимной корреляции сигналов X и Y. Так как максимум функции имеет отрицательное значение, то в этой точке сигналы X и Y имеют минимальное сходство.



    Рис. 8.Максимум функции взаимной корреляции

    При помощи дискретного преобразования Фурье строим спектральные плотности автокорреляционных функций сигналов X и Y (Рис. 9, Рис. 10)





    Рис. 9.Спектральная плотность автокорреляционной функции сигнала X


    Рис. 10. Спектральная плотность автокорреляционной функции сигнала Y
    Каждая линия на графиках Рис 9, Рис 10 представляет составляющую частоту, присутствующую в сигнале, высота линии – амплитуду соответствующей частотной составляющей.


    Энергия сигнала по (10):




    Энергия автокорреляции X: 158.64839015981255

    Энергия автокорреляции Y: 182.24450407102864

    При помощи дискретного преобразования Фурье строим частотный и фазовый спектр функции взаимной корреляции сигналов X и Y (Рис. 11, Рис. 12)



    Рис. 11. Спектральная плотность функции взаимной корреляции сигналов X и Y


    Рис. 12. Фазовый спектр функции взаимной корреляции сигналов X и Y
    Каждая линия на графике Рис 11 представляет составляющую частоту, присутствующую в сигнале, высота линии – амплитуду соответствующей частотной составляющей. Видно, что преобладает постоянная составляющая (f = 0).

    Каждая линия на графике Рис 12 представляет фазовый сдвиг соответствующей частотной составляющей, присутствующей в сигнале, высота линии – значение сдвига в радианах.

    Заключение


    В работе проведено исследование автокорреляционных функций сигналов и функции их взаимной корреляции. При помощи дискретного преобразования Фурье построены частотные и фазовые спектры сигналов. Приведены теоретические сведения, программный код, рисунки с результатами работы. Работа выполнена на языке Python в среде Jupyter Lab.


    Приложение



    Кодзадания
    import random

    import math

    import numpy as np

    import matplotlib.pyplot as plt

    import scipy

    import statistics
    from scipy.stats import normaltest
    def normRandom(N):

    sumR = 0.

    for i in range(1, N):

    sumR = sumR + random.random()

    x = math.sqrt(12/N)*(sumR - N/2)

    return x
    X = np.array([])

    for i in range(200):

    X = np.append(X, normRandom(100))

    print(X)
    Y = np.array([])

    for i in range(200):

    Y = np.append(Y, normRandom(100) + 1)

    print(X)
    n, bins, patches = plt.hist(X, bins = 25)

    plt.show()

    print(n)

    print(bins)
    Yn, Ybins, Ypatches = plt.hist(Y, bins = 25)

    plt.show()

    print(Yn)

    print(Ybins)
    print("Среднее выборки X:", statistics.mean(X))

    print("Стандартное отклонение выборки X:", statistics.stdev(X))
    print("Среднее выборки Y:", statistics.mean(Y))

    print("Стандартное отклонение выборки Y:", statistics.stdev(Y))
    k2, p = normaltest(X)

    alpha = 5e-2

    print("p = {:g}".format(p))

    if p < alpha:

    print("Нулевая гипотеза отвергается")

    else:

    print("Нулевая гипотеза не может быть отвергнута")
    def kf(S1, S2):

    print(len(S1), len(S2) )

    n = len(S1)

    KF = []

    for j in range(n-1):

    _sum = 0.
    for i in range(n-1):

    k = i+j

    if(k >= len(S2)):

    break
    _sum = _sum + S1[i]*S2[k]
    # load sum

    KF.append(_sum / n)
    return KF

    YL = np.append(Y, Y)

    XL = np.append(X, X)
    autoCorrX = kf(X, XL)

    autoCorrY = kf(Y, YL)

    CorrXY = kf(X, YL)

    CorrYX = kf(Y, X)
    plt.figure(figsize=(12, 8))

    plt.plot(autoCorrX)

    plt.plot(autoCorrY)

    plt.plot(CorrXY)
    plt.legend(['X', 'Y', 'XY'])
    autoCorrXnorm = (autoCorrX - (statistics.mean(X))**2) # / autoCorrX[0]

    autoCorrYnorm = (autoCorrY - (statistics.mean(Y))**2) #/ autoCorrY[0]
    plt.figure(figsize=(12, 8))

    plt.plot(autoCorrXnorm[:50])

    plt.plot(autoCorrYnorm[:50])

    #plt.plot(CorrXY)

    print("D(X) = ", autoCorrXnorm[0])

    print("D(Y) = ", autoCorrYnorm[0])
    tauKX = 1 / autoCorrXnorm[0]

    tauKY = 1 / autoCorrYnorm[0]
    plt.figure(figsize=(12, 8))

    plt.plot(autoCorrXnorm[:5])

    plt.plot(autoCorrYnorm[:5])

    plt.axhline(y=0.0, color='r')

    plt.axvline(x=tauKX, color='g')

    plt.axvline(x=tauKY, color='y')
    print('tau X', tauKX)

    print('tau Y', tauKY)
    plt.figure(figsize=(12, 8))

    plt.plot(CorrXY[:50])

    plt.axvline(x=CorrXY.index(max(CorrXY)), color='r')
    from scipy.fft import fft, fftfreq, rfft

    import matplotlib.pyplot as plt

    import numpy as np

    from matplotlib import collections as matcoll
    def speDencityPlt(X, T=1, color='b'):

    yf = fft(X)

    xf = fftfreq(len(X), T/len(X))
    plt.figure(figsize=(12, 8))

    for i in range(len(yf)):

    plt.vlines(xf[i], 0, abs(yf[i]), linestyles ="solid", colors ="b")

    plt.show()

    return yf, xf

    fAutoX, xfX = speDencityPlt(autoCorrXnorm)

    fAutoY, xfY = speDencityPlt(autoCorrYnorm)
    EnAutoX = 0

    EnAutoY = 0
    for c in fAutoX:

    EnAutoX = EnAutoX + abs(c)**2

    EnAutoX = EnAutoX / 2
    for c in fAutoY:

    EnAutoY = EnAutoY + abs(c)**2

    EnAutoY = EnAutoY / 2

    print("Энергия автокорреляции X:", EnAutoX)

    print("Энергия автокорреляции Y:", EnAutoY)
    import cmath

    fCorrXY, xfXY = speDencityPlt(CorrXY)
    phaseXY = []

    for c in fCorrXY:

    phaseXY.append(cmath.phase(c))

    plt.figure(figsize=(12, 8))

    for i in range(len(phaseXY)):

    plt.vlines(xfXY[i], 0, abs(phaseXY[i]), linestyles ="solid", colors ="b")
    plt.show()


    написать администратору сайта