нарисовать спектр сигнала с помощью matplotlib - PullRequest
0 голосов
/ 19 июня 2019

У меня есть следующий сигнал, и я хочу сделать следующее:

s= 4*np.cos(4*np.pi*pow(10,6)*t+30)+2*np.sin(8*np.pi*pow(10,6)*t+15)+np.cos(12*np.pi*pow(10,6)*t)+0.5*np.cos(16*np.pi*pow(10,6)*t) # the signal

Я хочу нарисовать спектр сигнала, используя matplotlib и numpy, найти его пропускную способность и определить, является ли он периодическим или нет

Я использую этот код, доступный здесь (https://matplotlib.org/3.1.0/gallery/lines_bars_and_markers/spectrum_demo.html)

спасибо за помощь

1 Ответ

0 голосов
/ 19 июня 2019

Я не уверен на 100%, если я сейчас, что вы хотите сделать, но кажется, что построение и возврат всех поворотных точек вашей функции должны помочь вам с вашей проблемой.

Поэтому вы можете попробовать это:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import argrelextrema

def func(t):

    # messures the time in units of
    # pow(10,6)*t

    exp = 4*np.cos(4*np.pi*t+30)+\
    2*np.sin(8*np.pi*t+15)+\
    np.cos(12*np.pi*t)+\
    0.5*np.cos(16*np.pi*t) 

    return exp



max_time = 2
time_steps = 400

# defining the signal
X = np.linspace(0,max_time,time_steps)
Y = func(X)

# getting all the max and min values
minimas = argrelextrema(Y, np.less)
maximas = argrelextrema(Y, np.greater)

# plot the singal
plt.plot(X,Y)

# plot minimas and maximas
plt.scatter(X[minimas],Y[minimas],color='r')
plt.scatter(X[maximas],Y[maximas],color='g')

plt.xlabel('t*10**6')
plt.ylabel('signal')
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...