やりたいこと
ダミーデータの作成処理を用意すること。
やってみる
今後も踏まえて、ダミーデータ作成用の処理を用意しておく。
Dummy.py
import numpy as np
import math
def makeWave(freq, smpl_freq, smpl_sec, r, a, b):
"""
サンプルデータ生成
Parameters
----------
freq : int
周波数(Hz)
smpl_freq : int
サンプリング周波数(Hz)
smpl_sec : int
サンプリング秒数(sec)
r : float
振幅
a : float
位相用定数(cos)
b : float
位相用定数(sin)
Returns
-------
res : numpy.ndarray
サンプルデータ
"""
res = []
for t in range(smpl_freq * smpl_sec + 1):
theta = 2.0 * math.pi * freq / smpl_freq * t
y = r / math.sqrt(math.pow(a, 2) + math.pow(b, 2)) * (a * math.cos(theta) + b * math.sin(theta))
res.append(y)
res = np.array(res)
return res
検証として、周波数1Hz(=1秒あたり、sin波が1個)を2秒分(なので、sin波が2個)、周波数2Hz、その合成波の3つを表示させてみる。
ついでに、いまのままだと、複数のグラフを一度に表示できないので、表示部分のプロセスを分けて起動するように変えておく。
p4.py
# -*- coding: utf-8 -*-
import sys
sys.dont_write_bytecode = True
from Grp import Line
import Dummy as dmy
from multiprocessing import Process
import time
def main():
rate = 1024
sec = 2
# 周波数 = 1Hz
wav1 = dmy.makeWave(1, rate, sec, 1, 0, 1)
# 周波数 = 2Hz
wav2 = dmy.makeWave(2, rate, sec, 1, 0, 1)
# 合成
wav3 = wav1 + wav2
p_s = []
p = Process(target=drawGraph, args=(wav1, rate))
p.start()
p_s.append(p)
p = Process(target=drawGraph, args=(wav2, 1024))
p.start()
p_s.append(p)
p = Process(target=drawGraph, args=(wav3, 1024))
p.start()
p_s.append(p)
while len(p_s) > 0:
for p in p_s:
if not p.is_alive():
p.join()
p_s.remove(p)
time.sleep(0.1)
def drawGraph(data, rate):
grp = Line()
grp.setData(data, rate)
grp.display()
if __name__ == '__main__':
main()
実行結果
補足
Grp.pyはここにあります。
https://qiita.com/u1tym/items/b52c466620f65225edf3