728x90
반응형
기본적인 사인파(Sine wave) 그리는 코드 입니다.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
# 신호정보 상수로 정의
SIG_AMPLITUDE = 10
SIG_OFFSET = 0
SIG_PERIOD = 100
NOISE_AMPLITUDE = 3
N_SAMPLES = 5 * SIG_PERIOD
INSTRUMENT_RANGE = 9
# 사인 곡선
times = np.arange(N_SAMPLES).astype(float)
signal = SIG_AMPLITUDE * np.sin(2 * np.pi * times / SIG_PERIOD) + SIG_OFFSET
# plot
matplotlib.style.use("ggplot")
plt.plot(times, signal)
plt.title("Sine wave signal")
plt.xlabel("Time")
plt.ylabel("Signal")
변화를 줄 수 있도록 수정한 코드 입니다.
data_type = 0 : 0 위로 보이는 일반적인 사인파
data_type = 1 : 점점 높아지는 사인파
data_type = 2 : 기본적인 사인파에 노이즈가 섞여있는 사인파
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
def genData(dataClass, lowSize):
# 신호, 잡음, '악기' 정보를 상수로 정의한다.
SIG_AMPLITUDE = 5 # 높이
SIG_OFFSET = 2
SIG_PERIOD = 20
NOISE_AMPLITUDE = 3
WAVE_CNT = 10 # 파의 수
N_SAMPLES = WAVE_CNT * SIG_PERIOD # 전체 데이터 수
INSTRUMENT_RANGE = 9
BIAS = 2 # 값을 일정 이상으로 올리는 상수
# 사인 곡선을 구성하고 잡음을 섞어 넣는다.
times = np.arange(N_SAMPLES).astype(float)
signal = SIG_AMPLITUDE * np.sin(2 * np.pi * times / SIG_PERIOD) + SIG_OFFSET
signal_normal = signal + abs(min(signal)) + BIAS # 0+2 위로 데이터 만들기
signal_short = SIG_AMPLITUDE * np.sin(2 * np.pi * times / int(SIG_PERIOD / 2)) + SIG_OFFSET
signal_big = SIG_AMPLITUDE * np.sin(2 * np.pi * times / int(SIG_PERIOD * 4)) + SIG_OFFSET
noise = NOISE_AMPLITUDE * np.random.normal(size=N_SAMPLES)
signal_comp1 = [] # signal2에서 점점 상승
signal_comp2 = [] # 더 파형인 signal_big에 signal_com1을 합쳐 signal_big에 따른 파형
cnt = len(signal) / WAVE_CNT
loop = 0
change_flag = False
for i in range(len(signal_normal)):
a = signal_normal[i] + (i * 0.01)
signal_comp1.append(a)
b = signal_big[i] + (signal_short[i] * 0.4)
signal_comp2.append(b)
signal_comp2 = signal_comp2 + np.abs(np.min(signal_comp2)) + BIAS
rtn = []
if dataClass == 0: # 0 위로 곡선이 나타남
rtn = signal_normal
elif dataClass == 1: # 곡석이 점점 상승하여 나타남
rtn = signal_comp1
elif dataClass == 2: # 곡선에 잡음이 썩이 형태로 나타냄
rtn = signal_comp2
d_X = []
d_Y = []
for i in range(len(rtn) - lowSize):
tmp = []
for i2 in range(lowSize):
tmp.append(rtn[i+i2])
d_X.append(tmp)
if rtn[lowSize + i - 1] < rtn[lowSize + i]:
d_Y.append([0,1]) # Up
else:
d_Y.append([1,0]) # Down
return d_X, d_Y, rtn
data_type = 2
X_size = 10
X, Y, rtn = genData(data_type, X_size)
# matplotlib.style.use("ggplot")
fig = plt.figure(figsize=(30, 16))
plt.plot(rtn)
plt.title("Sine Wave signal")
plt.xlabel("Time")
plt.ylabel("Signal + noise")
# plt.ylim(ymin = -SIG_AMPLITUDE, ymax = SIG_AMPLITUDE)
data_type = 0 (0 위로 보이는 일반적인 사인파)
data_type = 1 (점점 높아지는 사인파)
data_type = 2 (기본적인 사인파에 노이즈가 섞여있는 사인파)
728x90
반응형
'프로그램' 카테고리의 다른 글
[윈도우] 화면캡쳐(원도우+Alt+PrtSc) 바로 저장 (0) | 2022.08.18 |
---|---|
[파이썬] 위키백과 검색 데이터 받기 (크롤링) (0) | 2022.08.18 |
[파이썬] 주식 Chart Image 날짜 지정 저장 (2) | 2022.08.17 |
[파이썬] 주식 캔들차트(candlestick) (0) | 2022.08.17 |
[파이썬] 주식 골든크로스/데드크로스 (0) | 2022.08.17 |
댓글