728x90
반응형
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import argrelextrema
def min_max_indices(data): # 최저, 최고잠 찾기
max_indices = argrelextrema(np.array(data), np.greater)[0]
max_values = data[max_indices]
min_indices = argrelextrema(np.array(data), np.less)[0]
min_values = data[min_indices]
return max_indices, max_values, min_indices, min_values
def complex_sine_wave(amplitudes, frequencies, phases, num_samples=1000):
# 시간축 생성 (2번 반복하도록 num_samples를 두 배로 증가)
time = np.linspace(0, 4*np.pi, 2*num_samples) # 0부터 4파이까지 num_samples의 2배만큼 등간격으로 생성
# 복합 사인파 생성
complex_sine_wave = np.zeros(2*num_samples)
for amplitude, frequency, phase in zip(amplitudes, frequencies, phases):
complex_sine_wave += amplitude * np.sin(frequency * time + phase)
max_indices, max_values, min_indices, min_values = min_max_indices(complex_sine_wave)
# 그래프 그리기
plt.figure(figsize=(8, 4))
plt.plot(complex_sine_wave, label="Complex Sine Wave")
plt.plot(max_indices, max_values, 'b^', label='max') # 최고점 표시
plt.plot(min_indices, min_values, 'rv', label='min') # 최저점 표시
plt.xlabel('Time (radians)')
plt.ylabel('Amplitude')
plt.title('Complex Sine Wave')
plt.legend()
plt.grid(True)
plt.show()
if __name__ == "__main__":
amplitudes = [1.0, 0.5, 0.2, 0.3] # 사인파들의 진폭 리스트
frequencies = [1.0, 2.0, 3.0, 4.0] # 사인파들의 주파수 리스트 (1주기당 완료하는 사이클 수)
phases = [0.0, np.pi/4, np.pi/2, np.pi] # 사인파들의 위상 리스트 (시작위치)
complex_sine_wave(amplitudes, frequencies, phases)

728x90
반응형
'프로그램' 카테고리의 다른 글
| [파이썬] 작업스케줄러 사용 (0) | 2023.07.28 |
|---|---|
| [파이썬] 문제 : 그래프에서 최고점, 최저정 찾아 계산하고 엑셀 저장 (0) | 2023.07.27 |
| [파이썬] tensorflow로 GPU 상태(메모리 등) 확인하기 (0) | 2023.07.21 |
| [파이썬] Flask를 사용해 웹서버 만들기 (외부에서 접속하기) (0) | 2023.07.19 |
| [파이썬] 주식 차분 Plot (0) | 2023.07.18 |
댓글