0
1

More than 1 year has passed since last update.

Pythonでの音声信号処理 (4) ダミーデータの作成

Last updated at Posted at 2023-01-09

やりたいこと

ダミーデータの作成処理を用意すること。

やってみる

今後も踏まえて、ダミーデータ作成用の処理を用意しておく。

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()

実行結果

P04_1.png

P04_2.png

P04_3.png

補足

Grp.pyはここにあります。
https://qiita.com/u1tym/items/b52c466620f65225edf3

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1