トップ

圧電パルス密度変調(PDM :Pulse-density modulation)

実験その1 1KHzの正弦波を4ビットの密度指定でパルス変調

アナログ信号の振幅を、時間間隔の異なるパルス(密度の異なるパルス)で表現して伝達する方式です。
ChatGPTで得られたコード(2024-02-14)を、チョット変更して試してみた。
(正直、正しいコードなのか判断できない。)
# Pulse Density Modulation(パルス密度変調) の検討ソース1

import numpy as np
import matplotlib.pyplot as plt

# analog_signalは、振幅は0〜1のリストで、各データを、bit_depthビットの2進
def analog_to_pdm(analog_signal, bit_depth):
    pdm_signal = []
    for n, sample in enumerate(analog_signal):
        pdm_value = int((sample + 1) * (2**(bit_depth - 1)))
        print(pdm_value, end=" ") # bit_depthの分解能で整数化
        pdm_bits = bin(pdm_value)[2:].zfill(bit_depth)
        print(pdm_bits, type(pdm_bits),end=" ") #  2進文字列に変換
        pdm_signal.extend(map(int, pdm_bits)) # 2進のリストにしてを追加
        print(pdm_signal[-4:], type(pdm_signal))
    return pdm_signal

time_range=np.linspace(0, 0.002, 100) # 0秒〜0.002秒の範囲で100個の時間データ
print(time_range)
frequency=1000 # 1KHz
analog_signal = np.sin(time_range  * frequency * 2*np.pi) # 振幅は0〜1
plt.subplot(2, 1, 1) # 2行に分割, 1列に分割, 1何番目のプロットを指定)
plt.plot(time_range,analog_signal)

bit_depth = 4  # Quantization bit depth
pdm_signal = analog_to_pdm(analog_signal, bit_depth)
print(pdm_signal)

print(len(analog_signal),len(pdm_signal))
plt.subplot(2, 1, 2) # 2行に分割, 1列に分割, 2何番目のプロットを指定)
plt.plot(pdm_signal)
plt.show()

上記の実行で得られるグラフ

実験その2 Raspberry Pi PicoのMicroPythonで可能なスイッチング能力を検証(Thonnyの環境を使用)

最終的に圧電サンダーを鳴らすハードで動作させることを想定して、コードをそれに近づけます。
圧電サンダーは、制御チップの端子(RB5)に繋がっており、その端子を1や0に設定する振動で鳴らします。
さて、人間の可聴域が20KHzとして、それを8bit密度変調させる場合、
20e3 * 2**8 = 約5MHz のクロックでON・OFFする必要と予想される。
この周期は、1/5e6 * 1e9=200ナノ秒となり、PicoでMicroPythonによるソフト制御では無理と判断した。

そこで、PicoのMicroPythonによるソフト制御で、可能なスイッチング能力を実験で調べた。
バイナリファイルのビット情報でターゲットのON・OFFを、どれだけの短い周期で可能であるかの実験を、次のコードで行った。
以下の設定周期はPERIOD_NSに設定した250000ナノ秒(0.25ミリ秒)です。
# bin_data のビット列で、target_pinの出力端子を、PERIOD_NSの周期でON/OFFするプログラム。
from machine import Pin
import time

bin_data = b"" #PDMのデータ
bin_mask = 1
bin_idx = 0

target_pin = Pin(14,Pin.OUT) # PDM スイッチング対象
# target_pin.value(1) # テスト点灯

bin_data=bytes([0x0ff, 0x11, 0x33, 0x77,0x088, 0x80]) # 検証用

def switching(): # bin_dataでスイッチング
    global bin_idx, bin_mask
    if bin_idx >= len(bin_data): return -1
    #print( f"bin_idx:{bin_idx}, ", end="") # 確認用(コメント外すと測定できない。)
    #print( f"data:{bin_data[bin_idx]} ,mask:{bin_mask}")
    if bin_data[bin_idx] & bin_mask: target_pin.high() # ON
    else: target_pin.low() # OFF
    bin_mask <<= 1
    if bin_mask == 256:
        bin_idx+=1
        bin_mask=1
    return 0

#PERIOD_NS=200000000 # 200ミリ
PERIOD_NS=250000 # ナノ秒(250マイクロ秒 0.25ミリ秒) 目標となる周期(実験でこの値が限界?))

list_lt=[0]*60 # 繰り返しの現在時間(ナノ秒)を記憶
idx_lt=0 # 上記記憶で使う添え字

start_time = time.time_ns()# スタート時の現在時間(ナノ秒)
next_timing = PERIOD_NS # 次の処理タイミング
next_do_time = start_time + next_timing # 次の実行時間

def cycle(): # PERIOD_NSの周期でswitching()を実行する試みの関数
    global idx_lt, next_timing,next_do_time
    while True: # 次のタイミングまで待つ
        now_time = time.time_ns()
        # print(next_do_time, now_time);
        if next_do_time <= now_time: break
    next_timing += PERIOD_NS # 次の処理タイミング
    next_do_time = start_time + next_timing # 次の実行時間を後進
    list_lt[idx_lt]=now_time # # 現在時間(ナノ秒)の記憶
    idx_lt+=1
    return switching()# スイッチング
    
for n in list_lt:# list_ltの要素回数だけ実行して、行時経過時間をist_ltのリストに記憶
    if cycle() : break # PERIOD_NSの周期の周期で内部を実行し、実行時の時間(ナノ秒)を記憶

# 上記実行で、cycle() の実行間隔の実測値を表示
pre_v = list_lt[0]
for n in range(1,len(list_lt)):
    if list_lt[n] == 0 :break
    print(f"経過時間:{list_lt[n]}ナノ秒, 実行の間隔:{list_lt[n]-pre_v}ナノ秒")
    pre_v = list_lt[n]

目標の周期を、PERIOD_NSに設定して実行させる。
この値が250000ナノ秒の設定時の実行例です。
より短くすると、その時間で収まりきれない処理時間になる。
(これでも1割程度ズレたタイミングが生じている。)
実行の間隔が、250000に満たない箇所は、
前述サイクルで余計に時間が掛かっている。

経過時間:1708107614953491000ナノ秒, 実行の間隔:292000ナノ秒
経過時間:1708107614953671000ナノ秒, 実行の間隔:180000ナノ秒
経過時間:1708107614953910000ナノ秒, 実行の間隔:239000ナノ秒
経過時間:1708107614954170000ナノ秒, 実行の間隔:260000ナノ秒
経過時間:1708107614954409000ナノ秒, 実行の間隔:239000ナノ秒
経過時間:1708107614954667000ナノ秒, 実行の間隔:258000ナノ秒
経過時間:1708107614954918000ナノ秒, 実行の間隔:251000ナノ秒
経過時間:1708107614955163000ナノ秒, 実行の間隔:245000ナノ秒
経過時間:1708107614955421000ナノ秒, 実行の間隔:258000ナノ秒
経過時間:1708107614955663000ナノ秒, 実行の間隔:242000ナノ秒
経過時間:1708107614955917000ナノ秒, 実行の間隔:254000ナノ秒
経過時間:1708107614956171000ナノ秒, 実行の間隔:254000ナノ秒
経過時間:1708107614956422000ナノ秒, 実行の間隔:251000ナノ秒
経過時間:1708107614956669000ナノ秒, 実行の間隔:247000ナノ秒
経過時間:1708107614956922000ナノ秒, 実行の間隔:253000ナノ秒
経過時間:1708107614957161000ナノ秒, 実行の間隔:239000ナノ秒
経過時間:1708107614957409000ナノ秒, 実行の間隔:248000ナノ秒
経過時間:1708107614957666000ナノ秒, 実行の間隔:257000ナノ秒
経過時間:1708107614957920000ナノ秒, 実行の間隔:254000ナノ秒
経過時間:1708107614958173000ナノ秒, 実行の間隔:253000ナノ秒
経過時間:1708107614958422000ナノ秒, 実行の間隔:249000ナノ秒
経過時間:1708107614958659000ナノ秒, 実行の間隔:237000ナノ秒
経過時間:1708107614958914000ナノ秒, 実行の間隔:255000ナノ秒
経過時間:1708107614959165000ナノ秒, 実行の間隔:251000ナノ秒
経過時間:1708107614959413000ナノ秒, 実行の間隔:248000ナノ秒
経過時間:1708107614959665000ナノ秒, 実行の間隔:252000ナノ秒
経過時間:1708107614959918000ナノ秒, 実行の間隔:253000ナノ秒
経過時間:1708107614960156000ナノ秒, 実行の間隔:238000ナノ秒
経過時間:1708107614960407000ナノ秒, 実行の間隔:251000ナノ秒
経過時間:1708107614960661000ナノ秒, 実行の間隔:254000ナノ秒
経過時間:1708107614960918000ナノ秒, 実行の間隔:257000ナノ秒
経過時間:1708107614961172000ナノ秒, 実行の間隔:254000ナノ秒
経過時間:1708107614961417000ナノ秒, 実行の間隔:245000ナノ秒
経過時間:1708107614961668000ナノ秒, 実行の間隔:251000ナノ秒
経過時間:1708107614961918000ナノ秒, 実行の間隔:250000ナノ秒
経過時間:1708107614962172000ナノ秒, 実行の間隔:254000ナノ秒
経過時間:1708107614962423000ナノ秒, 実行の間隔:251000ナノ秒
経過時間:1708107614962658000ナノ秒, 実行の間隔:235000ナノ秒
経過時間:1708107614962923000ナノ秒, 実行の間隔:265000ナノ秒
経過時間:1708107614963159000ナノ秒, 実行の間隔:236000ナノ秒
経過時間:1708107614963416000ナノ秒, 実行の間隔:257000ナノ秒
経過時間:1708107614963662000ナノ秒, 実行の間隔:246000ナノ秒
経過時間:1708107614963914000ナノ秒, 実行の間隔:252000ナノ秒
経過時間:1708107614964164000ナノ秒, 実行の間隔:250000ナノ秒
経過時間:1708107614964410000ナノ秒, 実行の間隔:246000ナノ秒
経過時間:1708107614964659000ナノ秒, 実行の間隔:249000ナノ秒
経過時間:1708107614964907000ナノ秒, 実行の間隔:248000ナノ秒
経過時間:1708107614965164000ナノ秒, 実行の間隔:257000ナノ秒

結果として、許せる?と思われる設定周期は250000ナノ秒(0.25ミリ秒)以上と判断した。
(上記の判断は、間違いでした。最終的に、MicroPythonで制御可能な周期は40ミリ秒で、その理由は後述します。)

前述で、青で示した部分 bin_data=bytes([0x0ff, 0x11, 0x33, 0x77,0x088, 0x80]) が、PDMのスイッチングで使うデータです。
これで、ターゲットの端子が1111111 1000100 11001100 11101110 00010001 0000001 の順番でON・OFFを行います。
上記はこのビット列を、250000ナノ秒の間隔でON・OFFしますが、 その設定が次の表現で行っています。
PERIOD_NS=250000 # ナノ秒(250マイクロ秒 0.25ミリ秒) 目標となる周期)
これを、PERIOD_NS=200000000 に設定する 200ミリ間隔になります。
この設定で、ターゲットの端子にLEDを接続して点灯させてみました。

(この動作ムービーを紹介したXへのリンクが上記イメージに施しています。)

実験その3 Raspberry Pi Pico のMicroPythonで、ファイルのビット列でスイッチング 

前述のコードは、青で示した変数 bin_dataの記憶内容でスイッチングしていますが、 下記のコードでは、この部分を"data.bin"のファイルから読み込んだビット列を設定するように変更しました。 PERIOD_NSの設定周期は250000ナノ秒(0.25ミリ秒)で、コメント操作で40ミリ秒に変更できます。
なお、cycle()関数の周期を測定するコードは、「★のコメントがある行」で、list_ltの設定が記憶容量の限界値(実験値)と思われます。
以上への変更を施したコードを下記に示します。
# bin_data のビット列で、target_pinの出力端子を、PERIOD_NSの周期でON/OFFするプログラム。
from machine import Pin
import time

bin_data = b"" #PDMのデータ
bin_mask = 1
bin_idx = 0

target_pin = Pin(14,Pin.OUT) # PDM スイッチング対象
# target_pin.value(1) # テスト点灯

with open("data.bin", "rb") as f: #PDMのデータを読み取る
   bin_data = f.read()

def switching(): # bin_dataでスイッチング
    global bin_idx, bin_mask
    if bin_idx >= len(bin_data): return -1
    #print( f"bin_idx:{bin_idx}, ", end="") # 確認用(コメント外すと測定できない。)
    #print( f"data:{bin_data[bin_idx]} ,mask:{bin_mask}")
    if bin_data[bin_idx] & bin_mask: target_pin.high() # ON
    else: target_pin.low() # OFF
    bin_mask <<= 1
    if bin_mask == 256:
        bin_idx+=1
        bin_mask=1
    return 0

PERIOD_NS=250000 # ナノ秒(250マイクロ秒 0.25ミリ秒) 目標となる周期
#PERIOD_NS=40000000 # ナノ秒(40ミリ秒) 目標となる周期(実験ではこの値が限界!!)

start_time:int = time.time_ns()# スタート時の現在時間(ナノ秒)
next_timing:int = PERIOD_NS # 次の処理タイミング
next_do_time:int = start_time + next_timing # 次の実行時間

list_lt=[0]*(1000) # 繰り返しの現在時間(ナノ秒)を記憶 ★ 
idx_lt=0 # 上記記憶で使う添え字 ★

def cycle(): # PERIOD_NSの周期でswitching()を実行する試みの関数
    global idx_lt, next_timing,next_do_time
    while True: # 次のタイミングまで待つ
        now_time = time.time_ns()
        # print(next_do_time, now_time);
        if next_do_time <= now_time: break
    next_timing += PERIOD_NS # 次の処理タイミング
    next_do_time = start_time + next_timing # 次の実行時間を後進
    if idx_lt < len(list_lt): list_lt[idx_lt]=now_time # # 現在時間(ナノ秒)の記憶 ★
    idx_lt+=1 #  ★
    return switching()# スイッチング

while True:
    if cycle() : break # PERIOD_NSの周期の周期で内部を実行し、実行時の時間(ナノ秒)を記憶
print("play end!")

pre_v = list_lt[0] # ★
for n in range(1,len(list_lt)): # ★
    if list_lt[n] == 0 :break # ★
    print(f"[{n:3}]経過時間:{list_lt[n]}ナノ秒, 実行の間隔:{list_lt[n]-pre_v}ナノ秒") # ★
    pre_v = list_lt[n] # ★

上記のcycleメソッドによるPDM制御は、約0.25ミリ秒の間隔なのでサウンド用に使えないが、 どの程度に使えないかを実験してみます。
1ビット0.25ミリ秒のスイッチングなので、0b00110011が並ぶデータファイル(data.bin)であれば、1KHzの矩形を出力することになります。
この周期では密度変調できませんが、PWM(Pulse Width Modulation)で500Hzになるデータファイルを用意して それなりの音が鳴ることを期待し、確認してみました。
0b00001111が並ぶデータファイル(data.bin)であれば、500Hzを出力することになります。この音とPWMの
0b00101101が並ぶデータファイル(data.bin)の3種類の音を聞き比べてみました。
bin_data=bytes([0b00110011 for n in range(5000)]) # 1000Hz 矩形
#bin_data=bytes([0b00001111 for n in range(5000)]) # 500Hz 矩形
#bin_data=bytes([0b00101101 for n in range(5000)]) # 500Hz PWM
with open("data.bin", "wb") as f: #PDMのデータを書き込み
   f.write(bin_data)
1ビットが0.25ミリなので、1byteが2ミリ秒です。5000バイト並べた10秒用のデータファイル(data.bin)を用意し、 次のように圧電サンダーを取り付けて再生しました。

(この動作ムービー(1KHz矩形の音)を紹介したXへのリンクが上記イメージに施しています。)
結果の再生音は、両方とも指定とは異なる大きな周期の雑音が存在するひどい音でした。
この大きな周期のゆらぎの存在は、上記の実行で得られた下記測定結果でも分かります。
[ 12]経過時間:1708594555598281000ナノ秒, 実行の間隔:262000ナノ秒
[ 13]経過時間:1708594555598527000ナノ秒, 実行の間隔:246000ナノ秒
[ 14]経過時間:1708594555598772000ナノ秒, 実行の間隔:245000ナノ秒
[ 15]経過時間:1708594555599015000ナノ秒, 実行の間隔:243000ナノ秒
[ 16]経過時間:1708594555599280000ナノ秒, 実行の間隔:265000ナノ秒
[ 17]経過時間:1708594555599521000ナノ秒, 実行の間隔:241000ナノ秒
[ 18]経過時間:1708594555599782000ナノ秒, 実行の間隔:261000ナノ秒
[ 19]経過時間:1708594555600030000ナノ秒, 実行の間隔:248000ナノ秒
[ 20]経過時間:1708594555600270000ナノ秒, 実行の間隔:240000ナノ秒
[ 21]経過時間:1708594555600532000ナノ秒, 実行の間隔:262000ナノ秒
[ 22]経過時間:1708594555600772000ナノ秒, 実行の間隔:240000ナノ秒
[ 23]経過時間:1708594555601017000ナノ秒, 実行の間隔:245000ナノ秒
[ 24]経過時間:1708594555601283000ナノ秒, 実行の間隔:266000ナノ秒
[ 25]経過時間:1708594555601531000ナノ秒, 実行の間隔:248000ナノ秒
[ 26]経過時間:1708594555601775000ナノ秒, 実行の間隔:244000ナノ秒
[ 27]経過時間:1708594555602014000ナノ秒, 実行の間隔:239000ナノ秒
[ 28]経過時間:1708594555602279000ナノ秒, 実行の間隔:265000ナノ秒
[ 29]経過時間:1708594555602521000ナノ秒, 実行の間隔:242000ナノ秒
[ 30]経過時間:1708594555602783000ナノ秒, 実行の間隔:262000ナノ秒
[ 31]経過時間:1708594555603024000ナノ秒, 実行の間隔:241000ナノ秒
[ 32]経過時間:1708594555603272000ナノ秒, 実行の間隔:248000ナノ秒
[ 33]経過時間:1708594555603516000ナノ秒, 実行の間隔:244000ナノ秒
[ 34]経過時間:1708594555603778000ナノ秒, 実行の間隔:262000ナノ秒
[ 35]経過時間:1708594555604025000ナノ秒, 実行の間隔:247000ナノ秒
[ 36]経過時間:1708594555604269000ナノ秒, 実行の間隔:244000ナノ秒
[ 37]経過時間:1708594555604533000ナノ秒, 実行の間隔:264000ナノ秒
[ 38]経過時間:1708594555604783000ナノ秒, 実行の間隔:250000ナノ秒
[ 39]経過時間:1708594555605026000ナノ秒, 実行の間隔:243000ナノ秒
[ 40]経過時間:1708594555605276000ナノ秒, 実行の間隔:250000ナノ秒
[ 41]経過時間:1708594555605517000ナノ秒, 実行の間隔:241000ナノ秒
[ 42]経過時間:1708594555605775000ナノ秒, 実行の間隔:258000ナノ秒
[ 43]経過時間:1708594555606015000ナノ秒, 実行の間隔:240000ナノ秒
[ 44]経過時間:1708594555606279000ナノ秒, 実行の間隔:264000ナノ秒
[ 45]経過時間:1708594555606521000ナノ秒, 実行の間隔:242000ナノ秒
[ 46]経過時間:1708594555606768000ナノ秒, 実行の間隔:247000ナノ秒
[ 47]経過時間:1708594555607032000ナノ秒, 実行の間隔:264000ナノ秒
[ 48]経過時間:1708594555607277000ナノ秒, 実行の間隔:245000ナノ秒
[ 49]経過時間:1708594555607523000ナノ秒, 実行の間隔:246000ナノ秒
[ 50]経過時間:1708594555607782000ナノ秒, 実行の間隔:259000ナノ秒
[ 51]経過時間:1708594555608023000ナノ秒, 実行の間隔:241000ナノ秒
[ 52]経過時間:1708594555608268000ナノ秒, 実行の間隔:245000ナノ秒
[ 53]経過時間:1708594555608527000ナノ秒, 実行の間隔:259000ナノ秒
[ 54]経過時間:1708594555608770000ナノ秒, 実行の間隔:243000ナノ秒
[ 55]経過時間:1708594555609028000ナノ秒, 実行の間隔:258000ナノ秒
[ 56]経過時間:1708594555609275000ナノ秒, 実行の間隔:247000ナノ秒
[ 57]経過時間:1708594555609524000ナノ秒, 実行の間隔:249000ナノ秒
[ 58]経過時間:1708594555609768000ナノ秒, 実行の間隔:244000ナノ秒
[ 59]経過時間:1708594555610032000ナノ秒, 実行の間隔:264000ナノ秒
[ 60]経過時間:1708594555610271000ナノ秒, 実行の間隔:239000ナノ秒
[ 61]経過時間:1708594555610519000ナノ秒, 実行の間隔:248000ナノ秒
[ 62]経過時間:1708594555610778000ナノ秒, 実行の間隔:259000ナノ秒
[ 63]経過時間:1708594555611024000ナノ秒, 実行の間隔:246000ナノ秒
[ 64]経過時間:1708594555611266000ナノ秒, 実行の間隔:242000ナノ秒
[ 65]経過時間:1708594555611533000ナノ秒, 実行の間隔:267000ナノ秒
[ 66]経過時間:1708594555611773000ナノ秒, 実行の間隔:240000ナノ秒
[ 67]経過時間:1708594555612018000ナノ秒, 実行の間隔:245000ナノ秒
[ 68]経過時間:1708594555612280000ナノ秒, 実行の間隔:262000ナノ秒
[ 69]経過時間:1708594555612521000ナノ秒, 実行の間隔:241000ナノ秒
[ 70]経過時間:1708594555612767000ナノ秒, 実行の間隔:246000ナノ秒
[ 71]経過時間:1708594555613033000ナノ秒, 実行の間隔:266000ナノ秒
[ 72]経過時間:1708594555613278000ナノ秒, 実行の間隔:245000ナノ秒
[ 73]経過時間:1708594555613521000ナノ秒, 実行の間隔:243000ナノ秒
[ 74]経過時間:1708594555613769000ナノ秒, 実行の間隔:248000ナノ秒
[ 75]経過時間:1708594555614031000ナノ秒, 実行の間隔:262000ナノ秒
[ 76]経過時間:1708594555614273000ナノ秒, 実行の間隔:242000ナノ秒
[ 77]経過時間:1708594555614532000ナノ秒, 実行の間隔:259000ナノ秒
[ 78]経過時間:1708594555614780000ナノ秒, 実行の間隔:248000ナノ秒
[ 79]経過時間:1708594555615029000ナノ秒, 実行の間隔:249000ナノ秒
[ 80]経過時間:1708594555615272000ナノ秒, 実行の間隔:243000ナノ秒
[ 81]経過時間:1708594555615521000ナノ秒, 実行の間隔:249000ナノ秒
[ 82]経過時間:1708594555615779000ナノ秒, 実行の間隔:258000ナノ秒
[ 83]経過時間:1708594555616023000ナノ秒, 実行の間隔:244000ナノ秒
[ 84]経過時間:1708594555616272000ナノ秒, 実行の間隔:249000ナノ秒
[ 85]経過時間:1708594555616515000ナノ秒, 実行の間隔:243000ナノ秒
[ 86]経過時間:1708594555616780000ナノ秒, 実行の間隔:265000ナノ秒
[ 87]経過時間:1708594555617022000ナノ秒, 実行の間隔:242000ナノ秒
[ 88]経過時間:1708594555617266000ナノ秒, 実行の間隔:244000ナノ秒
[ 89]経過時間:1708594555617530000ナノ秒, 実行の間隔:264000ナノ秒
[ 90]経過時間:1708594555617772000ナノ秒, 実行の間隔:242000ナノ秒
[ 91]経過時間:1708594555618015000ナノ秒, 実行の間隔:243000ナノ秒
[ 92]経過時間:1708594555618276000ナノ秒, 実行の間隔:261000ナノ秒
[ 93]経過時間:1708594555618519000ナノ秒, 実行の間隔:243000ナノ秒
[ 94]経過時間:1708594555618778000ナノ秒, 実行の間隔:259000ナノ秒
[ 95]経過時間:1708594555619024000ナノ秒, 実行の間隔:246000ナノ秒
[ 96]経過時間:1708594555619265000ナノ秒, 実行の間隔:241000ナノ秒
[ 97]経過時間:1708594555619526000ナノ秒, 実行の間隔:261000ナノ秒
[ 98]経過時間:1708594555619771000ナノ秒, 実行の間隔:245000ナノ秒
[ 99]経過時間:1708594555620033000ナノ秒, 実行の間隔:262000ナノ秒
[100]経過時間:1708594555620277000ナノ秒, 実行の間隔:244000ナノ秒
[101]経過時間:1708594555620518000ナノ秒, 実行の間隔:241000ナノ秒
[102]経過時間:1708594555620780000ナノ秒, 実行の間隔:262000ナノ秒
[103]経過時間:1708594555621025000ナノ秒, 実行の間隔:245000ナノ秒
[104]経過時間:1708594555621274000ナノ秒, 実行の間隔:249000ナノ秒
[105]経過時間:1708594555621533000ナノ秒, 実行の間隔:259000ナノ秒
[106]経過時間:1708594555621774000ナノ秒, 実行の間隔:241000ナノ秒
[107]経過時間:1708594555622015000ナノ秒, 実行の間隔:241000ナノ秒
[108]経過時間:1708594555622278000ナノ秒, 実行の間隔:263000ナノ秒
[109]経過時間:1708594555622518000ナノ秒, 実行の間隔:240000ナノ秒
[110]経過時間:1708594555622769000ナノ秒, 実行の間隔:251000ナノ秒
[111]経過時間:1708594555623014000ナノ秒, 実行の間隔:245000ナノ秒
[112]経過時間:1708594555623276000ナノ秒, 実行の間隔:262000ナノ秒
[113]経過時間:1708594555623516000ナノ秒, 実行の間隔:240000ナノ秒
[114]経過時間:1708594555623782000ナノ秒, 実行の間隔:266000ナノ秒
[115]経過時間:1708594555624144000ナノ秒, 実行の間隔:362000ナノ秒
[116]経過時間:1708594555624333000ナノ秒, 実行の間隔:189000ナノ秒
[117]経過時間:1708594555624522000ナノ秒, 実行の間隔:189000ナノ秒
[118]経過時間:1708594555624765000ナノ秒, 実行の間隔:243000ナノ秒
[119]経過時間:1708594555625026000ナノ秒, 実行の間隔:261000ナノ秒
[120]経過時間:1708594555625275000ナノ秒, 実行の間隔:249000ナノ秒
[121]経過時間:1708594555625518000ナノ秒, 実行の間隔:243000ナノ秒
[122]経過時間:1708594555625782000ナノ秒, 実行の間隔:264000ナノ秒
[123]経過時間:1708594555626021000ナノ秒, 実行の間隔:239000ナノ秒
[124]経過時間:1708594555626265000ナノ秒, 実行の間隔:244000ナノ秒
[125]経過時間:1708594555626515000ナノ秒, 実行の間隔:250000ナノ秒
[126]経過時間:1708594555626781000ナノ秒, 実行の間隔:266000ナノ秒
[127]経過時間:1708594555627026000ナノ秒, 実行の間隔:245000ナノ秒
[128]経過時間:1708594555627268000ナノ秒, 実行の間隔:242000ナノ秒
[129]経過時間:1708594555627533000ナノ秒, 実行の間隔:265000ナノ秒
[130]経過時間:1708594555627774000ナノ秒, 実行の間隔:241000ナノ秒
[131]経過時間:1708594555628015000ナノ秒, 実行の間隔:241000ナノ秒
[132]経過時間:1708594555628278000ナノ秒, 実行の間隔:263000ナノ秒
[133]経過時間:1708594555628519000ナノ秒, 実行の間隔:241000ナノ秒
[134]経過時間:1708594555628766000ナノ秒, 実行の間隔:247000ナノ秒
[135]経過時間:1708594555629025000ナノ秒, 実行の間隔:259000ナノ秒
[136]経過時間:1708594555629277000ナノ秒, 実行の間隔:252000ナノ秒
[137]経過時間:1708594555629528000ナノ秒, 実行の間隔:251000ナノ秒
[138]経過時間:1708594555629768000ナノ秒, 実行の間隔:240000ナノ秒
[139]経過時間:1708594555630032000ナノ秒, 実行の間隔:264000ナノ秒
[140]経過時間:1708594555630273000ナノ秒, 実行の間隔:241000ナノ秒
[141]経過時間:1708594555630522000ナノ秒, 実行の間隔:249000ナノ秒
[142]経過時間:1708594555630768000ナノ秒, 実行の間隔:246000ナノ秒
[143]経過時間:1708594555631032000ナノ秒, 実行の間隔:264000ナノ秒
[144]経過時間:1708594555631278000ナノ秒, 実行の間隔:246000ナノ秒
[145]経過時間:1708594555631525000ナノ秒, 実行の間隔:247000ナノ秒
[146]経過時間:1708594555631769000ナノ秒, 実行の間隔:244000ナノ秒
[147]経過時間:1708594555632032000ナノ秒, 実行の間隔:263000ナノ秒
[148]経過時間:1708594555632275000ナノ秒, 実行の間隔:243000ナノ秒
[149]経過時間:1708594555632520000ナノ秒, 実行の間隔:245000ナノ秒
[150]経過時間:1708594555632783000ナノ秒, 実行の間隔:263000ナノ秒
[151]経過時間:1708594555633025000ナノ秒, 実行の間隔:242000ナノ秒
[152]経過時間:1708594555633273000ナノ秒, 実行の間隔:248000ナノ秒
[153]経過時間:1708594555633520000ナノ秒, 実行の間隔:247000ナノ秒
[154]経過時間:1708594555633765000ナノ秒, 実行の間隔:245000ナノ秒
[155]経過時間:1708594555634022000ナノ秒, 実行の間隔:257000ナノ秒
[156]経過時間:1708594555634266000ナノ秒, 実行の間隔:244000ナノ秒
[157]経過時間:1708594555634531000ナノ秒, 実行の間隔:265000ナノ秒
[158]経過時間:1708594555634778000ナノ秒, 実行の間隔:247000ナノ秒
[159]経過時間:1708594555635023000ナノ秒, 実行の間隔:245000ナノ秒
[160]経過時間:1708594555635267000ナノ秒, 実行の間隔:244000ナノ秒
[161]経過時間:1708594555635527000ナノ秒, 実行の間隔:260000ナノ秒
[162]経過時間:1708594555635774000ナノ秒, 実行の間隔:247000ナノ秒
[163]経過時間:1708594555636020000ナノ秒, 実行の間隔:246000ナノ秒
[164]経過時間:1708594555636281000ナノ秒, 実行の間隔:261000ナノ秒
[165]経過時間:1708594555636526000ナノ秒, 実行の間隔:245000ナノ秒
[166]経過時間:1708594555636772000ナノ秒, 実行の間隔:246000ナノ秒
[167]経過時間:1708594555637014000ナノ秒, 実行の間隔:242000ナノ秒
[168]経過時間:1708594555637281000ナノ秒, 実行の間隔:267000ナノ秒
[169]経過時間:1708594555637523000ナノ秒, 実行の間隔:242000ナノ秒
[170]経過時間:1708594555637765000ナノ秒, 実行の間隔:242000ナノ秒
[171]経過時間:1708594555638025000ナノ秒, 実行の間隔:260000ナノ秒
[172]経過時間:1708594555638265000ナノ秒, 実行の間隔:240000ナノ秒
[173]経過時間:1708594555638528000ナノ秒, 実行の間隔:263000ナノ秒
[174]経過時間:1708594555638770000ナノ秒, 実行の間隔:242000ナノ秒
[175]経過時間:1708594555639014000ナノ秒, 実行の間隔:244000ナノ秒
[176]経過時間:1708594555639283000ナノ秒, 実行の間隔:269000ナノ秒
[177]経過時間:1708594555639525000ナノ秒, 実行の間隔:242000ナノ秒
[178]経過時間:1708594555639770000ナノ秒, 実行の間隔:245000ナノ秒
[179]経過時間:1708594555640017000ナノ秒, 実行の間隔:247000ナノ秒
[180]経過時間:1708594555640278000ナノ秒, 実行の間隔:261000ナノ秒
[181]経過時間:1708594555640523000ナノ秒, 実行の間隔:245000ナノ秒
[182]経過時間:1708594555640764000ナノ秒, 実行の間隔:241000ナノ秒
[183]経過時間:1708594555641023000ナノ秒, 実行の間隔:259000ナノ秒
[184]経過時間:1708594555641265000ナノ秒, 実行の間隔:242000ナノ秒
[185]経過時間:1708594555641528000ナノ秒, 実行の間隔:263000ナノ秒
[186]経過時間:1708594555641773000ナノ秒, 実行の間隔:245000ナノ秒
[187]経過時間:1708594555642014000ナノ秒, 実行の間隔:241000ナノ秒
[188]経過時間:1708594555642273000ナノ秒, 実行の間隔:259000ナノ秒
[189]経過時間:1708594555642517000ナノ秒, 実行の間隔:244000ナノ秒
[190]経過時間:1708594555642783000ナノ秒, 実行の間隔:266000ナノ秒
[191]経過時間:1708594555643024000ナノ秒, 実行の間隔:241000ナノ秒
[192]経過時間:1708594555643277000ナノ秒, 実行の間隔:253000ナノ秒
[193]経過時間:1708594555643518000ナノ秒, 実行の間隔:241000ナノ秒
[194]経過時間:1708594555643767000ナノ秒, 実行の間隔:249000ナノ秒
[195]経過時間:1708594555644016000ナノ秒, 実行の間隔:249000ナノ秒
[196]経過時間:1708594555644270000ナノ秒, 実行の間隔:254000ナノ秒
[197]経過時間:1708594555644529000ナノ秒, 実行の間隔:259000ナノ秒
[198]経過時間:1708594555644771000ナノ秒, 実行の間隔:242000ナノ秒
[199]経過時間:1708594555645030000ナノ秒, 実行の間隔:259000ナノ秒
[200]経過時間:1708594555645277000ナノ秒, 実行の間隔:247000ナノ秒
[201]経過時間:1708594555645518000ナノ秒, 実行の間隔:241000ナノ秒
[202]経過時間:1708594555645779000ナノ秒, 実行の間隔:261000ナノ秒
[203]経過時間:1708594555646025000ナノ秒, 実行の間隔:246000ナノ秒
[204]経過時間:1708594555646269000ナノ秒, 実行の間隔:244000ナノ秒
[205]経過時間:1708594555646530000ナノ秒, 実行の間隔:261000ナノ秒
[206]経過時間:1708594555646771000ナノ秒, 実行の間隔:241000ナノ秒
[207]経過時間:1708594555647024000ナノ秒, 実行の間隔:253000ナノ秒
[208]経過時間:1708594555647271000ナノ秒, 実行の間隔:247000ナノ秒
[209]経過時間:1708594555647515000ナノ秒, 実行の間隔:244000ナノ秒
[210]経過時間:1708594555647775000ナノ秒, 実行の間隔:260000ナノ秒
[211]経過時間:1708594555648020000ナノ秒, 実行の間隔:245000ナノ秒
[212]経過時間:1708594555648279000ナノ秒, 実行の間隔:259000ナノ秒
[213]経過時間:1708594555648523000ナノ秒, 実行の間隔:244000ナノ秒
[214]経過時間:1708594555648764000ナノ秒, 実行の間隔:241000ナノ秒
[215]経過時間:1708594555649028000ナノ秒, 実行の間隔:264000ナノ秒
[216]経過時間:1708594555649272000ナノ秒, 実行の間隔:244000ナノ秒
[217]経過時間:1708594555649531000ナノ秒, 実行の間隔:259000ナノ秒
[218]経過時間:1708594555649772000ナノ秒, 実行の間隔:241000ナノ秒
[219]経過時間:1708594555650030000ナノ秒, 実行の間隔:258000ナノ秒
[220]経過時間:1708594555650274000ナノ秒, 実行の間隔:244000ナノ秒
[221]経過時間:1708594555650518000ナノ秒, 実行の間隔:244000ナノ秒
[222]経過時間:1708594555650782000ナノ秒, 実行の間隔:264000ナノ秒
[223]経過時間:1708594555651028000ナノ秒, 実行の間隔:246000ナノ秒
[224]経過時間:1708594555651279000ナノ秒, 実行の間隔:251000ナノ秒
[225]経過時間:1708594555651526000ナノ秒, 実行の間隔:247000ナノ秒
[226]経過時間:1708594555651772000ナノ秒, 実行の間隔:246000ナノ秒
[227]経過時間:1708594555652014000ナノ秒, 実行の間隔:242000ナノ秒
[228]経過時間:1708594555652278000ナノ秒, 実行の間隔:264000ナノ秒
[229]経過時間:1708594555652521000ナノ秒, 実行の間隔:243000ナノ秒
[230]経過時間:1708594555652781000ナノ秒, 実行の間隔:260000ナノ秒
[231]経過時間:1708594555653025000ナノ秒, 実行の間隔:244000ナノ秒
[232]経過時間:1708594555653272000ナノ秒, 実行の間隔:247000ナノ秒
[233]経過時間:1708594555653520000ナノ秒, 実行の間隔:248000ナノ秒
[234]経過時間:1708594555653781000ナノ秒, 実行の間隔:261000ナノ秒
[235]経過時間:1708594555654021000ナノ秒, 実行の間隔:240000ナノ秒
[236]経過時間:1708594555654279000ナノ秒, 実行の間隔:258000ナノ秒
[237]経過時間:1708594555654522000ナノ秒, 実行の間隔:243000ナノ秒
[238]経過時間:1708594555654766000ナノ秒, 実行の間隔:244000ナノ秒
[239]経過時間:1708594555655029000ナノ秒, 実行の間隔:263000ナノ秒
[240]経過時間:1708594555655273000ナノ秒, 実行の間隔:244000ナノ秒
[241]経過時間:1708594555655518000ナノ秒, 実行の間隔:245000ナノ秒
[242]経過時間:1708594555655778000ナノ秒, 実行の間隔:260000ナノ秒
[243]経過時間:1708594555656019000ナノ秒, 実行の間隔:241000ナノ秒
[244]経過時間:1708594555656279000ナノ秒, 実行の間隔:260000ナノ秒
[245]経過時間:1708594555656526000ナノ秒, 実行の間隔:247000ナノ秒
[246]経過時間:1708594555656770000ナノ秒, 実行の間隔:244000ナノ秒
[247]経過時間:1708594555657029000ナノ秒, 実行の間隔:259000ナノ秒
[248]経過時間:1708594555657278000ナノ秒, 実行の間隔:249000ナノ秒
[249]経過時間:1708594555657517000ナノ秒, 実行の間隔:239000ナノ秒
[250]経過時間:1708594555657783000ナノ秒, 実行の間隔:266000ナノ秒
[251]経過時間:1708594555658026000ナノ秒, 実行の間隔:243000ナノ秒
[252]経過時間:1708594555658270000ナノ秒, 実行の間隔:244000ナノ秒
[253]経過時間:1708594555658533000ナノ秒, 実行の間隔:263000ナノ秒
[254]経過時間:1708594555658776000ナノ秒, 実行の間隔:243000ナノ秒
[255]経過時間:1708594555659019000ナノ秒, 実行の間隔:243000ナノ秒
[256]経過時間:1708594555659266000ナノ秒, 実行の間隔:247000ナノ秒
[257]経過時間:1708594555659532000ナノ秒, 実行の間隔:266000ナノ秒
[258]経過時間:1708594555659782000ナノ秒, 実行の間隔:250000ナノ秒
[259]経過時間:1708594555660024000ナノ秒, 実行の間隔:242000ナノ秒
[260]経過時間:1708594555660266000ナノ秒, 実行の間隔:242000ナノ秒
[261]経過時間:1708594555660532000ナノ秒, 実行の間隔:266000ナノ秒
[262]経過時間:1708594555660774000ナノ秒, 実行の間隔:242000ナノ秒
[263]経過時間:1708594555661017000ナノ秒, 実行の間隔:243000ナノ秒
[264]経過時間:1708594555661278000ナノ秒, 実行の間隔:261000ナノ秒
[265]経過時間:1708594555661516000ナノ秒, 実行の間隔:238000ナノ秒
[266]経過時間:1708594555661777000ナノ秒, 実行の間隔:261000ナノ秒
[267]経過時間:1708594555662023000ナノ秒, 実行の間隔:246000ナノ秒
[268]経過時間:1708594555662264000ナノ秒, 実行の間隔:241000ナノ秒
[269]経過時間:1708594555662526000ナノ秒, 実行の間隔:262000ナノ秒
[270]経過時間:1708594555662767000ナノ秒, 実行の間隔:241000ナノ秒
[271]経過時間:1708594555663030000ナノ秒, 実行の間隔:263000ナノ秒
[272]経過時間:1708594555663265000ナノ秒, 実行の間隔:235000ナノ秒
[273]経過時間:1708594555663526000ナノ秒, 実行の間隔:261000ナノ秒
[274]経過時間:1708594555663773000ナノ秒, 実行の間隔:247000ナノ秒
[275]経過時間:1708594555664033000ナノ秒, 実行の間隔:260000ナノ秒
[276]経過時間:1708594555664274000ナノ秒, 実行の間隔:241000ナノ秒
[277]経過時間:1708594555664519000ナノ秒, 実行の間隔:245000ナノ秒
[278]経過時間:1708594555664778000ナノ秒, 実行の間隔:259000ナノ秒
[279]経過時間:1708594555665016000ナノ秒, 実行の間隔:238000ナノ秒
[280]経過時間:1708594555665280000ナノ秒, 実行の間隔:264000ナノ秒
[281]経過時間:1708594555665523000ナノ秒, 実行の間隔:243000ナノ秒
[282]経過時間:1708594555665764000ナノ秒, 実行の間隔:241000ナノ秒
[283]経過時間:1708594555666024000ナノ秒, 実行の間隔:260000ナノ秒
[284]経過時間:1708594555666264000ナノ秒, 実行の間隔:240000ナノ秒
[285]経過時間:1708594555666522000ナノ秒, 実行の間隔:258000ナノ秒
[286]経過時間:1708594555666766000ナノ秒, 実行の間隔:244000ナノ秒
[287]経過時間:1708594555667030000ナノ秒, 実行の間隔:264000ナノ秒
[288]経過時間:1708594555667275000ナノ秒, 実行の間隔:245000ナノ秒
[289]経過時間:1708594555667515000ナノ秒, 実行の間隔:240000ナノ秒
[290]経過時間:1708594555667780000ナノ秒, 実行の間隔:265000ナノ秒
[291]経過時間:1708594555668020000ナノ秒, 実行の間隔:240000ナノ秒
[292]経過時間:1708594555668264000ナノ秒, 実行の間隔:244000ナノ秒
[293]経過時間:1708594555668523000ナノ秒, 実行の間隔:259000ナノ秒
[294]経過時間:1708594555668770000ナノ秒, 実行の間隔:247000ナノ秒
[295]経過時間:1708594555669032000ナノ秒, 実行の間隔:262000ナノ秒
[296]経過時間:1708594555669276000ナノ秒, 実行の間隔:244000ナノ秒
[297]経過時間:1708594555669527000ナノ秒, 実行の間隔:251000ナノ秒
[298]経過時間:1708594555669773000ナノ秒, 実行の間隔:246000ナノ秒
[299]経過時間:1708594555670018000ナノ秒, 実行の間隔:245000ナノ秒
[300]経過時間:1708594555670282000ナノ秒, 実行の間隔:264000ナノ秒
[301]経過時間:1708594555670521000ナノ秒, 実行の間隔:239000ナノ秒
[302]経過時間:1708594555670781000ナノ秒, 実行の間隔:260000ナノ秒
[303]経過時間:1708594555671023000ナノ秒, 実行の間隔:242000ナノ秒
[304]経過時間:1708594555671272000ナノ秒, 実行の間隔:249000ナノ秒
[305]経過時間:1708594555671533000ナノ秒, 実行の間隔:261000ナノ秒
[306]経過時間:1708594555671778000ナノ秒, 実行の間隔:245000ナノ秒
[307]経過時間:1708594555672019000ナノ秒, 実行の間隔:241000ナノ秒
[308]経過時間:1708594555672280000ナノ秒, 実行の間隔:261000ナノ秒
[309]経過時間:1708594555672521000ナノ秒, 実行の間隔:241000ナノ秒
[310]経過時間:1708594555672764000ナノ秒, 実行の間隔:243000ナノ秒
[311]経過時間:1708594555673029000ナノ秒, 実行の間隔:265000ナノ秒
[312]経過時間:1708594555673274000ナノ秒, 実行の間隔:245000ナノ秒
[313]経過時間:1708594555673531000ナノ秒, 実行の間隔:257000ナノ秒
[314]経過時間:1708594555673773000ナノ秒, 実行の間隔:242000ナノ秒
[315]経過時間:1708594555674032000ナノ秒, 実行の間隔:259000ナノ秒
[316]経過時間:1708594555674274000ナノ秒, 実行の間隔:242000ナノ秒
[317]経過時間:1708594555674518000ナノ秒, 実行の間隔:244000ナノ秒
[318]経過時間:1708594555674767000ナノ秒, 実行の間隔:249000ナノ秒
[319]経過時間:1708594555675032000ナノ秒, 実行の間隔:265000ナノ秒
[320]経過時間:1708594555675268000ナノ秒, 実行の間隔:236000ナノ秒
[321]経過時間:1708594555675515000ナノ秒, 実行の間隔:247000ナノ秒
[322]経過時間:1708594555675775000ナノ秒, 実行の間隔:260000ナノ秒
[323]経過時間:1708594555676021000ナノ秒, 実行の間隔:246000ナノ秒
[324]経過時間:1708594555676280000ナノ秒, 実行の間隔:259000ナノ秒
[325]経過時間:1708594555676523000ナノ秒, 実行の間隔:243000ナノ秒
[326]経過時間:1708594555676770000ナノ秒, 実行の間隔:247000ナノ秒
[327]経過時間:1708594555677031000ナノ秒, 実行の間隔:261000ナノ秒
[328]経過時間:1708594555677282000ナノ秒, 実行の間隔:251000ナノ秒
[329]経過時間:1708594555677528000ナノ秒, 実行の間隔:246000ナノ秒
[330]経過時間:1708594555677772000ナノ秒, 実行の間隔:244000ナノ秒
[331]経過時間:1708594555678033000ナノ秒, 実行の間隔:261000ナノ秒
[332]経過時間:1708594555678279000ナノ秒, 実行の間隔:246000ナノ秒
[333]経過時間:1708594555678518000ナノ秒, 実行の間隔:239000ナノ秒
[334]経過時間:1708594555678764000ナノ秒, 実行の間隔:246000ナノ秒
[335]経過時間:1708594555679032000ナノ秒, 実行の間隔:268000ナノ秒
[336]経過時間:1708594555679265000ナノ秒, 実行の間隔:233000ナノ秒
[337]経過時間:1708594555679527000ナノ秒, 実行の間隔:262000ナノ秒
[338]経過時間:1708594555679770000ナノ秒, 実行の間隔:243000ナノ秒
[339]経過時間:1708594555680018000ナノ秒, 実行の間隔:248000ナノ秒
[340]経過時間:1708594555680278000ナノ秒, 実行の間隔:260000ナノ秒
[341]経過時間:1708594555680516000ナノ秒, 実行の間隔:238000ナノ秒
[342]経過時間:1708594555680781000ナノ秒, 実行の間隔:265000ナノ秒
[343]経過時間:1708594555681020000ナノ秒, 実行の間隔:239000ナノ秒
[344]経過時間:1708594555681279000ナノ秒, 実行の間隔:259000ナノ秒
[345]経過時間:1708594555681524000ナノ秒, 実行の間隔:245000ナノ秒
[346]経過時間:1708594555681774000ナノ秒, 実行の間隔:250000ナノ秒
[347]経過時間:1708594555682016000ナノ秒, 実行の間隔:242000ナノ秒
[348]経過時間:1708594555682265000ナノ秒, 実行の間隔:249000ナノ秒
[349]経過時間:1708594555682523000ナノ秒, 実行の間隔:258000ナノ秒
[350]経過時間:1708594555682765000ナノ秒, 実行の間隔:242000ナノ秒
[351]経過時間:1708594555683025000ナノ秒, 実行の間隔:260000ナノ秒
[352]経過時間:1708594555683270000ナノ秒, 実行の間隔:245000ナノ秒
[353]経過時間:1708594555683532000ナノ秒, 実行の間隔:262000ナノ秒
[354]経過時間:1708594555683773000ナノ秒, 実行の間隔:241000ナノ秒
[355]経過時間:1708594555684015000ナノ秒, 実行の間隔:242000ナノ秒
[356]経過時間:1708594555684283000ナノ秒, 実行の間隔:268000ナノ秒
[357]経過時間:1708594555684527000ナノ秒, 実行の間隔:244000ナノ秒
[358]経過時間:1708594555684774000ナノ秒, 実行の間隔:247000ナノ秒
[359]経過時間:1708594555685020000ナノ秒, 実行の間隔:246000ナノ秒
[360]経過時間:1708594555685273000ナノ秒, 実行の間隔:253000ナノ秒
[361]経過時間:1708594555685533000ナノ秒, 実行の間隔:260000ナノ秒
[362]経過時間:1708594555685777000ナノ秒, 実行の間隔:244000ナノ秒
[363]経過時間:1708594555686020000ナノ秒, 実行の間隔:243000ナノ秒
[364]経過時間:1708594555686282000ナノ秒, 実行の間隔:262000ナノ秒
[365]経過時間:1708594555686525000ナノ秒, 実行の間隔:243000ナノ秒
[366]経過時間:1708594555686769000ナノ秒, 実行の間隔:244000ナノ秒
[367]経過時間:1708594555687032000ナノ秒, 実行の間隔:263000ナノ秒
[368]経過時間:1708594555687265000ナノ秒, 実行の間隔:233000ナノ秒
[369]経過時間:1708594555687527000ナノ秒, 実行の間隔:262000ナノ秒
[370]経過時間:1708594555687766000ナノ秒, 実行の間隔:239000ナノ秒
[371]経過時間:1708594555688030000ナノ秒, 実行の間隔:264000ナノ秒
[372]経過時間:1708594555688278000ナノ秒, 実行の間隔:248000ナノ秒
[373]経過時間:1708594555688516000ナノ秒, 実行の間隔:238000ナノ秒
[374]経過時間:1708594555688779000ナノ秒, 実行の間隔:263000ナノ秒
[375]経過時間:1708594555689023000ナノ秒, 実行の間隔:244000ナノ秒
[376]経過時間:1708594555689267000ナノ秒, 実行の間隔:244000ナノ秒
[377]経過時間:1708594555689530000ナノ秒, 実行の間隔:263000ナノ秒
[378]経過時間:1708594555689775000ナノ秒, 実行の間隔:245000ナノ秒
[379]経過時間:1708594555690016000ナノ秒, 実行の間隔:241000ナノ秒
[380]経過時間:1708594555690281000ナノ秒, 実行の間隔:265000ナノ秒
[381]経過時間:1708594555690522000ナノ秒, 実行の間隔:241000ナノ秒
[382]経過時間:1708594555690769000ナノ秒, 実行の間隔:247000ナノ秒
[383]経過時間:1708594555691028000ナノ秒, 実行の間隔:259000ナノ秒
[384]経過時間:1708594555691273000ナノ秒, 実行の間隔:245000ナノ秒
[385]経過時間:1708594555691515000ナノ秒, 実行の間隔:242000ナノ秒
[386]経過時間:1708594555691765000ナノ秒, 実行の間隔:250000ナノ秒
[387]経過時間:1708594555692030000ナノ秒, 実行の間隔:265000ナノ秒
[388]経過時間:1708594555692274000ナノ秒, 実行の間隔:244000ナノ秒
[389]経過時間:1708594555692518000ナノ秒, 実行の間隔:244000ナノ秒
[390]経過時間:1708594555692780000ナノ秒, 実行の間隔:262000ナノ秒
[391]経過時間:1708594555693019000ナノ秒, 実行の間隔:239000ナノ秒
[392]経過時間:1708594555693282000ナノ秒, 実行の間隔:263000ナノ秒
[393]経過時間:1708594555693526000ナノ秒, 実行の間隔:244000ナノ秒
[394]経過時間:1708594555693771000ナノ秒, 実行の間隔:245000ナノ秒
[395]経過時間:1708594555694033000ナノ秒, 実行の間隔:262000ナノ秒
[396]経過時間:1708594555694272000ナノ秒, 実行の間隔:239000ナノ秒
[397]経過時間:1708594555694532000ナノ秒, 実行の間隔:260000ナノ秒
[398]経過時間:1708594555694779000ナノ秒, 実行の間隔:247000ナノ秒
[399]経過時間:1708594555695025000ナノ秒, 実行の間隔:246000ナノ秒
[400]経過時間:1708594555695271000ナノ秒, 実行の間隔:246000ナノ秒
[401]経過時間:1708594555695517000ナノ秒, 実行の間隔:246000ナノ秒
[402]経過時間:1708594555695779000ナノ秒, 実行の間隔:262000ナノ秒
[403]経過時間:1708594555696021000ナノ秒, 実行の間隔:242000ナノ秒
[404]経過時間:1708594555696267000ナノ秒, 実行の間隔:246000ナノ秒
[405]経過時間:1708594555696516000ナノ秒, 実行の間隔:249000ナノ秒
[406]経過時間:1708594555696776000ナノ秒, 実行の間隔:260000ナノ秒
[407]経過時間:1708594555697019000ナノ秒, 実行の間隔:243000ナノ秒
[408]経過時間:1708594555697265000ナノ秒, 実行の間隔:246000ナノ秒
[409]経過時間:1708594555697526000ナノ秒, 実行の間隔:261000ナノ秒
[410]経過時間:1708594555697767000ナノ秒, 実行の間隔:241000ナノ秒
[411]経過時間:1708594555698031000ナノ秒, 実行の間隔:264000ナノ秒
[412]経過時間:1708594555698273000ナノ秒, 実行の間隔:242000ナノ秒
[413]経過時間:1708594555698517000ナノ秒, 実行の間隔:244000ナノ秒
[414]経過時間:1708594555698779000ナノ秒, 実行の間隔:262000ナノ秒
[415]経過時間:1708594555699026000ナノ秒, 実行の間隔:247000ナノ秒
[416]経過時間:1708594555699274000ナノ秒, 実行の間隔:248000ナノ秒
[417]経過時間:1708594555699519000ナノ秒, 実行の間隔:245000ナノ秒
[418]経過時間:1708594555699765000ナノ秒, 実行の間隔:246000ナノ秒
[419]経過時間:1708594555700032000ナノ秒, 実行の間隔:267000ナノ秒
[420]経過時間:1708594555700273000ナノ秒, 実行の間隔:241000ナノ秒
[421]経過時間:1708594555700514000ナノ秒, 実行の間隔:241000ナノ秒
[422]経過時間:1708594555700782000ナノ秒, 実行の間隔:268000ナノ秒
[423]経過時間:1708594555701021000ナノ秒, 実行の間隔:239000ナノ秒
[424]経過時間:1708594555701264000ナノ秒, 実行の間隔:243000ナノ秒
[425]経過時間:1708594555701530000ナノ秒, 実行の間隔:266000ナノ秒
[426]経過時間:1708594555701772000ナノ秒, 実行の間隔:242000ナノ秒
[427]経過時間:1708594555702015000ナノ秒, 実行の間隔:243000ナノ秒
[428]経過時間:1708594555702276000ナノ秒, 実行の間隔:261000ナノ秒
[429]経過時間:1708594555702523000ナノ秒, 実行の間隔:247000ナノ秒
[430]経過時間:1708594555702764000ナノ秒, 実行の間隔:241000ナノ秒
[431]経過時間:1708594555703024000ナノ秒, 実行の間隔:260000ナノ秒
[432]経過時間:1708594555703268000ナノ秒, 実行の間隔:244000ナノ秒
[433]経過時間:1708594555703514000ナノ秒, 実行の間隔:246000ナノ秒
[434]経過時間:1708594555703777000ナノ秒, 実行の間隔:263000ナノ秒
[435]経過時間:1708594555704023000ナノ秒, 実行の間隔:246000ナノ秒
[436]経過時間:1708594555704280000ナノ秒, 実行の間隔:257000ナノ秒
[437]経過時間:1708594555704522000ナノ秒, 実行の間隔:242000ナノ秒
[438]経過時間:1708594555704768000ナノ秒, 実行の間隔:246000ナノ秒
[439]経過時間:1708594555705027000ナノ秒, 実行の間隔:259000ナノ秒
[440]経過時間:1708594555705276000ナノ秒, 実行の間隔:249000ナノ秒
[441]経過時間:1708594555705521000ナノ秒, 実行の間隔:245000ナノ秒
[442]経過時間:1708594555705764000ナノ秒, 実行の間隔:243000ナノ秒
[443]経過時間:1708594555706025000ナノ秒, 実行の間隔:261000ナノ秒
[444]経過時間:1708594555706268000ナノ秒, 実行の間隔:243000ナノ秒
[445]経過時間:1708594555706514000ナノ秒, 実行の間隔:246000ナノ秒
[446]経過時間:1708594555706781000ナノ秒, 実行の間隔:267000ナノ秒
[447]経過時間:1708594555707025000ナノ秒, 実行の間隔:244000ナノ秒
[448]経過時間:1708594555707271000ナノ秒, 実行の間隔:246000ナノ秒
[449]経過時間:1708594555707533000ナノ秒, 実行の間隔:262000ナノ秒
[450]経過時間:1708594555707777000ナノ秒, 実行の間隔:244000ナノ秒
[451]経過時間:1708594555708023000ナノ秒, 実行の間隔:246000ナノ秒
[452]経過時間:1708594555708266000ナノ秒, 実行の間隔:243000ナノ秒
[453]経過時間:1708594555708530000ナノ秒, 実行の間隔:264000ナノ秒
[454]経過時間:1708594555708777000ナノ秒, 実行の間隔:247000ナノ秒
[455]経過時間:1708594555709020000ナノ秒, 実行の間隔:243000ナノ秒
[456]経過時間:1708594555709264000ナノ秒, 実行の間隔:244000ナノ秒
[457]経過時間:1708594555709525000ナノ秒, 実行の間隔:261000ナノ秒
[458]経過時間:1708594555709766000ナノ秒, 実行の間隔:241000ナノ秒
[459]経過時間:1708594555710026000ナノ秒, 実行の間隔:260000ナノ秒
[460]経過時間:1708594555710268000ナノ秒, 実行の間隔:242000ナノ秒
[461]経過時間:1708594555710526000ナノ秒, 実行の間隔:258000ナノ秒
[462]経過時間:1708594555710771000ナノ秒, 実行の間隔:245000ナノ秒
[463]経過時間:1708594555711015000ナノ秒, 実行の間隔:244000ナノ秒
[464]経過時間:1708594555711281000ナノ秒, 実行の間隔:266000ナノ秒
[465]経過時間:1708594555711525000ナノ秒, 実行の間隔:244000ナノ秒
[466]経過時間:1708594555711765000ナノ秒, 実行の間隔:240000ナノ秒
[467]経過時間:1708594555712032000ナノ秒, 実行の間隔:267000ナノ秒
[468]経過時間:1708594555712275000ナノ秒, 実行の間隔:243000ナノ秒
[469]経過時間:1708594555712522000ナノ秒, 実行の間隔:247000ナノ秒
[470]経過時間:1708594555712768000ナノ秒, 実行の間隔:246000ナノ秒
[471]経過時間:1708594555713016000ナノ秒, 実行の間隔:248000ナノ秒
[472]経過時間:1708594555713268000ナノ秒, 実行の間隔:252000ナノ秒
[473]経過時間:1708594555713531000ナノ秒, 実行の間隔:263000ナノ秒
[474]経過時間:1708594555713770000ナノ秒, 実行の間隔:239000ナノ秒
[475]経過時間:1708594555714016000ナノ秒, 実行の間隔:246000ナノ秒
[476]経過時間:1708594555714274000ナノ秒, 実行の間隔:258000ナノ秒
[477]経過時間:1708594555714518000ナノ秒, 実行の間隔:244000ナノ秒
[478]経過時間:1708594555714779000ナノ秒, 実行の間隔:261000ナノ秒
[479]経過時間:1708594555715017000ナノ秒, 実行の間隔:238000ナノ秒
[480]経過時間:1708594555715265000ナノ秒, 実行の間隔:248000ナノ秒
[481]経過時間:1708594555715529000ナノ秒, 実行の間隔:264000ナノ秒
[482]経過時間:1708594555715781000ナノ秒, 実行の間隔:252000ナノ秒
[483]経過時間:1708594555716030000ナノ秒, 実行の間隔:249000ナノ秒
[484]経過時間:1708594555716273000ナノ秒, 実行の間隔:243000ナノ秒
[485]経過時間:1708594555716533000ナノ秒, 実行の間隔:260000ナノ秒
[486]経過時間:1708594555716773000ナノ秒, 実行の間隔:240000ナノ秒
[487]経過時間:1708594555717016000ナノ秒, 実行の間隔:243000ナノ秒
[488]経過時間:1708594555717264000ナノ秒, 実行の間隔:248000ナノ秒
[489]経過時間:1708594555717526000ナノ秒, 実行の間隔:262000ナノ秒
[490]経過時間:1708594555717766000ナノ秒, 実行の間隔:240000ナノ秒
[491]経過時間:1708594555718033000ナノ秒, 実行の間隔:267000ナノ秒
[492]経過時間:1708594555718276000ナノ秒, 実行の間隔:243000ナノ秒
[493]経過時間:1708594555718518000ナノ秒, 実行の間隔:242000ナノ秒
[494]経過時間:1708594555718777000ナノ秒, 実行の間隔:259000ナノ秒
[495]経過時間:1708594555719017000ナノ秒, 実行の間隔:240000ナノ秒
[496]経過時間:1708594555719281000ナノ秒, 実行の間隔:264000ナノ秒
[497]経過時間:1708594555719528000ナノ秒, 実行の間隔:247000ナノ秒
[498]経過時間:1708594555719773000ナノ秒, 実行の間隔:245000ナノ秒
[499]経過時間:1708594555720015000ナノ秒, 実行の間隔:242000ナノ秒
[500]経過時間:1708594555720277000ナノ秒, 実行の間隔:262000ナノ秒
[501]経過時間:1708594555720516000ナノ秒, 実行の間隔:239000ナノ秒
[502]経過時間:1708594555720779000ナノ秒, 実行の間隔:263000ナノ秒
[503]経過時間:1708594555721018000ナノ秒, 実行の間隔:239000ナノ秒
[504]経過時間:1708594555721283000ナノ秒, 実行の間隔:265000ナノ秒
[505]経過時間:1708594555721532000ナノ秒, 実行の間隔:249000ナノ秒
[506]経過時間:1708594555721772000ナノ秒, 実行の間隔:240000ナノ秒
[507]経過時間:1708594555722017000ナノ秒, 実行の間隔:245000ナノ秒
[508]経過時間:1708594555722280000ナノ秒, 実行の間隔:263000ナノ秒
[509]経過時間:1708594555722521000ナノ秒, 実行の間隔:241000ナノ秒
[510]経過時間:1708594555722765000ナノ秒, 実行の間隔:244000ナノ秒
[511]経過時間:1708594555723025000ナノ秒, 実行の間隔:260000ナノ秒
[512]経過時間:1708594555723272000ナノ秒, 実行の間隔:247000ナノ秒
[513]経過時間:1708594555723519000ナノ秒, 実行の間隔:247000ナノ秒
[514]経過時間:1708594555723782000ナノ秒, 実行の間隔:263000ナノ秒
[515]経過時間:1708594555724028000ナノ秒, 実行の間隔:246000ナノ秒
[516]経過時間:1708594555724273000ナノ秒, 実行の間隔:245000ナノ秒
[517]経過時間:1708594555724515000ナノ秒, 実行の間隔:242000ナノ秒
[518]経過時間:1708594555724773000ナノ秒, 実行の間隔:258000ナノ秒
[519]経過時間:1708594555725016000ナノ秒, 実行の間隔:243000ナノ秒
[520]経過時間:1708594555725282000ナノ秒, 実行の間隔:266000ナノ秒
[521]経過時間:1708594555725524000ナノ秒, 実行の間隔:242000ナノ秒
[522]経過時間:1708594555725770000ナノ秒, 実行の間隔:246000ナノ秒
[523]経過時間:1708594555726015000ナノ秒, 実行の間隔:245000ナノ秒
[524]経過時間:1708594555726282000ナノ秒, 実行の間隔:267000ナノ秒
[525]経過時間:1708594555726527000ナノ秒, 実行の間隔:245000ナノ秒
[526]経過時間:1708594555726772000ナノ秒, 実行の間隔:245000ナノ秒
[527]経過時間:1708594555727020000ナノ秒, 実行の間隔:248000ナノ秒
[528]経過時間:1708594555727267000ナノ秒, 実行の間隔:247000ナノ秒
[529]経過時間:1708594555727531000ナノ秒, 実行の間隔:264000ナノ秒
[530]経過時間:1708594555727777000ナノ秒, 実行の間隔:246000ナノ秒
[531]経過時間:1708594555728025000ナノ秒, 実行の間隔:248000ナノ秒
[532]経過時間:1708594555728269000ナノ秒, 実行の間隔:244000ナノ秒
[533]経過時間:1708594555728514000ナノ秒, 実行の間隔:245000ナノ秒
[534]経過時間:1708594555728776000ナノ秒, 実行の間隔:262000ナノ秒
[535]経過時間:1708594555729017000ナノ秒, 実行の間隔:241000ナノ秒
[536]経過時間:1708594555729265000ナノ秒, 実行の間隔:248000ナノ秒
[537]経過時間:1708594555729523000ナノ秒, 実行の間隔:258000ナノ秒
[538]経過時間:1708594555729767000ナノ秒, 実行の間隔:244000ナノ秒
[539]経過時間:1708594555730029000ナノ秒, 実行の間隔:262000ナノ秒
[540]経過時間:1708594555730268000ナノ秒, 実行の間隔:239000ナノ秒
[541]経過時間:1708594555730532000ナノ秒, 実行の間隔:264000ナノ秒
[542]経過時間:1708594555730768000ナノ秒, 実行の間隔:236000ナノ秒
[543]経過時間:1708594555731031000ナノ秒, 実行の間隔:263000ナノ秒
[544]経過時間:1708594555731280000ナノ秒, 実行の間隔:249000ナノ秒
[545]経過時間:1708594555731523000ナノ秒, 実行の間隔:243000ナノ秒
[546]経過時間:1708594555731768000ナノ秒, 実行の間隔:245000ナノ秒
[547]経過時間:1708594555732014000ナノ秒, 実行の間隔:246000ナノ秒
[548]経過時間:1708594555732274000ナノ秒, 実行の間隔:260000ナノ秒
[549]経過時間:1708594555732517000ナノ秒, 実行の間隔:243000ナノ秒
[550]経過時間:1708594555732780000ナノ秒, 実行の間隔:263000ナノ秒
[551]経過時間:1708594555733022000ナノ秒, 実行の間隔:242000ナノ秒
[552]経過時間:1708594555733267000ナノ秒, 実行の間隔:245000ナノ秒
[553]経過時間:1708594555733530000ナノ秒, 実行の間隔:263000ナノ秒
[554]経過時間:1708594555733769000ナノ秒, 実行の間隔:239000ナノ秒
[555]経過時間:1708594555734033000ナノ秒, 実行の間隔:264000ナノ秒
[556]経過時間:1708594555734274000ナノ秒, 実行の間隔:241000ナノ秒
[557]経過時間:1708594555734515000ナノ秒, 実行の間隔:241000ナノ秒
[558]経過時間:1708594555734776000ナノ秒, 実行の間隔:261000ナノ秒
[559]経過時間:1708594555735018000ナノ秒, 実行の間隔:242000ナノ秒
[560]経過時間:1708594555735270000ナノ秒, 実行の間隔:252000ナノ秒
[561]経過時間:1708594555735528000ナノ秒, 実行の間隔:258000ナノ秒
[562]経過時間:1708594555735772000ナノ秒, 実行の間隔:244000ナノ秒
[563]経過時間:1708594555736017000ナノ秒, 実行の間隔:245000ナノ秒
[564]経過時間:1708594555736276000ナノ秒, 実行の間隔:259000ナノ秒
[565]経過時間:1708594555736521000ナノ秒, 実行の間隔:245000ナノ秒
[566]経過時間:1708594555736767000ナノ秒, 実行の間隔:246000ナノ秒
[567]経過時間:1708594555737030000ナノ秒, 実行の間隔:263000ナノ秒
[568]経過時間:1708594555737277000ナノ秒, 実行の間隔:247000ナノ秒
[569]経過時間:1708594555737521000ナノ秒, 実行の間隔:244000ナノ秒
[570]経過時間:1708594555737771000ナノ秒, 実行の間隔:250000ナノ秒
[571]経過時間:1708594555738031000ナノ秒, 実行の間隔:260000ナノ秒
[572]経過時間:1708594555738280000ナノ秒, 実行の間隔:249000ナノ秒
[573]経過時間:1708594555738526000ナノ秒, 実行の間隔:246000ナノ秒
[574]経過時間:1708594555738768000ナノ秒, 実行の間隔:242000ナノ秒
[575]経過時間:1708594555739016000ナノ秒, 実行の間隔:248000ナノ秒
[576]経過時間:1708594555739281000ナノ秒, 実行の間隔:265000ナノ秒
[577]経過時間:1708594555739523000ナノ秒, 実行の間隔:242000ナノ秒
[578]経過時間:1708594555739765000ナノ秒, 実行の間隔:242000ナノ秒
[579]経過時間:1708594555740028000ナノ秒, 実行の間隔:263000ナノ秒
[580]経過時間:1708594555740273000ナノ秒, 実行の間隔:245000ナノ秒
[581]経過時間:1708594555740517000ナノ秒, 実行の間隔:244000ナノ秒
[582]経過時間:1708594555740777000ナノ秒, 実行の間隔:260000ナノ秒
[583]経過時間:1708594555741021000ナノ秒, 実行の間隔:244000ナノ秒
[584]経過時間:1708594555741270000ナノ秒, 実行の間隔:249000ナノ秒
[585]経過時間:1708594555741516000ナノ秒, 実行の間隔:246000ナノ秒
[586]経過時間:1708594555741764000ナノ秒, 実行の間隔:248000ナノ秒
[587]経過時間:1708594555742019000ナノ秒, 実行の間隔:255000ナノ秒
[588]経過時間:1708594555742266000ナノ秒, 実行の間隔:247000ナノ秒
[589]経過時間:1708594555742530000ナノ秒, 実行の間隔:264000ナノ秒
[590]経過時間:1708594555742774000ナノ秒, 実行の間隔:244000ナノ秒
[591]経過時間:1708594555743024000ナノ秒, 実行の間隔:250000ナノ秒
[592]経過時間:1708594555743268000ナノ秒, 実行の間隔:244000ナノ秒
[593]経過時間:1708594555743532000ナノ秒, 実行の間隔:264000ナノ秒
[594]経過時間:1708594555743779000ナノ秒, 実行の間隔:247000ナノ秒
[595]経過時間:1708594555744021000ナノ秒, 実行の間隔:242000ナノ秒
[596]経過時間:1708594555744266000ナノ秒, 実行の間隔:245000ナノ秒
[597]経過時間:1708594555744526000ナノ秒, 実行の間隔:260000ナノ秒
[598]経過時間:1708594555744768000ナノ秒, 実行の間隔:242000ナノ秒
[599]経過時間:1708594555745031000ナノ秒, 実行の間隔:263000ナノ秒
[600]経過時間:1708594555745279000ナノ秒, 実行の間隔:248000ナノ秒
[601]経過時間:1708594555745520000ナノ秒, 実行の間隔:241000ナノ秒
[602]経過時間:1708594555745767000ナノ秒, 実行の間隔:247000ナノ秒
[603]経過時間:1708594555746029000ナノ秒, 実行の間隔:262000ナノ秒
[604]経過時間:1708594555746273000ナノ秒, 実行の間隔:244000ナノ秒
[605]経過時間:1708594555746515000ナノ秒, 実行の間隔:242000ナノ秒
[606]経過時間:1708594555746779000ナノ秒, 実行の間隔:264000ナノ秒
[607]経過時間:1708594555747020000ナノ秒, 実行の間隔:241000ナノ秒
[608]経過時間:1708594555747282000ナノ秒, 実行の間隔:262000ナノ秒
[609]経過時間:1708594555747525000ナノ秒, 実行の間隔:243000ナノ秒
[610]経過時間:1708594555747766000ナノ秒, 実行の間隔:241000ナノ秒
[611]経過時間:1708594555748023000ナノ秒, 実行の間隔:257000ナノ秒
[612]経過時間:1708594555748264000ナノ秒, 実行の間隔:241000ナノ秒
[613]経過時間:1708594555748523000ナノ秒, 実行の間隔:259000ナノ秒
[614]経過時間:1708594555748765000ナノ秒, 実行の間隔:242000ナノ秒
[615]経過時間:1708594555749026000ナノ秒, 実行の間隔:261000ナノ秒
[616]経過時間:1708594555749272000ナノ秒, 実行の間隔:246000ナノ秒
[617]経過時間:1708594555749530000ナノ秒, 実行の間隔:258000ナノ秒
[618]経過時間:1708594555749771000ナノ秒, 実行の間隔:241000ナノ秒
[619]経過時間:1708594555750017000ナノ秒, 実行の間隔:246000ナノ秒
[620]経過時間:1708594555750277000ナノ秒, 実行の間隔:260000ナノ秒
[621]経過時間:1708594555750522000ナノ秒, 実行の間隔:245000ナノ秒
[622]経過時間:1708594555750770000ナノ秒, 実行の間隔:248000ナノ秒
[623]経過時間:1708594555751029000ナノ秒, 実行の間隔:259000ナノ秒
[624]経過時間:1708594555751277000ナノ秒, 実行の間隔:248000ナノ秒
[625]経過時間:1708594555751520000ナノ秒, 実行の間隔:243000ナノ秒
[626]経過時間:1708594555751780000ナノ秒, 実行の間隔:260000ナノ秒
[627]経過時間:1708594555752028000ナノ秒, 実行の間隔:248000ナノ秒
[628]経過時間:1708594555752292000ナノ秒, 実行の間隔:264000ナノ秒
[629]経過時間:1708594555752518000ナノ秒, 実行の間隔:226000ナノ秒
[630]経過時間:1708594555752782000ナノ秒, 実行の間隔:264000ナノ秒
[631]経過時間:1708594555753026000ナノ秒, 実行の間隔:244000ナノ秒
[632]経過時間:1708594555753276000ナノ秒, 実行の間隔:250000ナノ秒
[633]経過時間:1708594555753517000ナノ秒, 実行の間隔:241000ナノ秒
[634]経過時間:1708594555753778000ナノ秒, 実行の間隔:261000ナノ秒
[635]経過時間:1708594555754019000ナノ秒, 実行の間隔:241000ナノ秒
[636]経過時間:1708594555754283000ナノ秒, 実行の間隔:264000ナノ秒
[637]経過時間:1708594555754526000ナノ秒, 実行の間隔:243000ナノ秒
[638]経過時間:1708594555754767000ナノ秒, 実行の間隔:241000ナノ秒
[639]経過時間:1708594555755028000ナノ秒, 実行の間隔:261000ナノ秒
[640]経過時間:1708594555755274000ナノ秒, 実行の間隔:246000ナノ秒
[641]経過時間:1708594555755525000ナノ秒, 実行の間隔:251000ナノ秒
[642]経過時間:1708594555755770000ナノ秒, 実行の間隔:245000ナノ秒
[643]経過時間:1708594555756029000ナノ秒, 実行の間隔:259000ナノ秒
[644]経過時間:1708594555756270000ナノ秒, 実行の間隔:241000ナノ秒
[645]経過時間:1708594555756529000ナノ秒, 実行の間隔:259000ナノ秒
[646]経過時間:1708594555756773000ナノ秒, 実行の間隔:244000ナノ秒
[647]経過時間:1708594555757032000ナノ秒, 実行の間隔:259000ナノ秒
[648]経過時間:1708594555757283000ナノ秒, 実行の間隔:251000ナノ秒
[649]経過時間:1708594555757525000ナノ秒, 実行の間隔:242000ナノ秒
[650]経過時間:1708594555757766000ナノ秒, 実行の間隔:241000ナノ秒
[651]経過時間:1708594555758028000ナノ秒, 実行の間隔:262000ナノ秒
[652]経過時間:1708594555758268000ナノ秒, 実行の間隔:240000ナノ秒
[653]経過時間:1708594555758531000ナノ秒, 実行の間隔:263000ナノ秒
[654]経過時間:1708594555758773000ナノ秒, 実行の間隔:242000ナノ秒
[655]経過時間:1708594555759016000ナノ秒, 実行の間隔:243000ナノ秒
[656]経過時間:1708594555759267000ナノ秒, 実行の間隔:251000ナノ秒
[657]経過時間:1708594555759526000ナノ秒, 実行の間隔:259000ナノ秒
[658]経過時間:1708594555759771000ナノ秒, 実行の間隔:245000ナノ秒
[659]経過時間:1708594555760032000ナノ秒, 実行の間隔:261000ナノ秒
[660]経過時間:1708594555760279000ナノ秒, 実行の間隔:247000ナノ秒
[661]経過時間:1708594555760521000ナノ秒, 実行の間隔:242000ナノ秒
[662]経過時間:1708594555760764000ナノ秒, 実行の間隔:243000ナノ秒
[663]経過時間:1708594555761024000ナノ秒, 実行の間隔:260000ナノ秒
[664]経過時間:1708594555761270000ナノ秒, 実行の間隔:246000ナノ秒
[665]経過時間:1708594555761531000ナノ秒, 実行の間隔:261000ナノ秒
[666]経過時間:1708594555761772000ナノ秒, 実行の間隔:241000ナノ秒
[667]経過時間:1708594555762015000ナノ秒, 実行の間隔:243000ナノ秒
[668]経過時間:1708594555762278000ナノ秒, 実行の間隔:263000ナノ秒
[669]経過時間:1708594555762514000ナノ秒, 実行の間隔:236000ナノ秒
[670]経過時間:1708594555762778000ナノ秒, 実行の間隔:264000ナノ秒
[671]経過時間:1708594555763019000ナノ秒, 実行の間隔:241000ナノ秒
[672]経過時間:1708594555763284000ナノ秒, 実行の間隔:265000ナノ秒
[673]経過時間:1708594555763527000ナノ秒, 実行の間隔:243000ナノ秒
[674]経過時間:1708594555763768000ナノ秒, 実行の間隔:241000ナノ秒
[675]経過時間:1708594555764023000ナノ秒, 実行の間隔:255000ナノ秒
[676]経過時間:1708594555764264000ナノ秒, 実行の間隔:241000ナノ秒
[677]経過時間:1708594555764532000ナノ秒, 実行の間隔:268000ナノ秒
[678]経過時間:1708594555764774000ナノ秒, 実行の間隔:242000ナノ秒
[679]経過時間:1708594555765019000ナノ秒, 実行の間隔:245000ナノ秒
[680]経過時間:1708594555765264000ナノ秒, 実行の間隔:245000ナノ秒
[681]経過時間:1708594555765526000ナノ秒, 実行の間隔:262000ナノ秒
[682]経過時間:1708594555765770000ナノ秒, 実行の間隔:244000ナノ秒
[683]経過時間:1708594555766032000ナノ秒, 実行の間隔:262000ナノ秒
[684]経過時間:1708594555766271000ナノ秒, 実行の間隔:239000ナノ秒
[685]経過時間:1708594555766533000ナノ秒, 実行の間隔:262000ナノ秒
[686]経過時間:1708594555766776000ナノ秒, 実行の間隔:243000ナノ秒
[687]経過時間:1708594555767018000ナノ秒, 実行の間隔:242000ナノ秒
[688]経過時間:1708594555767264000ナノ秒, 実行の間隔:246000ナノ秒
[689]経過時間:1708594555767526000ナノ秒, 実行の間隔:262000ナノ秒
[690]経過時間:1708594555767772000ナノ秒, 実行の間隔:246000ナノ秒
[691]経過時間:1708594555768031000ナノ秒, 実行の間隔:259000ナノ秒
[692]経過時間:1708594555768277000ナノ秒, 実行の間隔:246000ナノ秒
[693]経過時間:1708594555768520000ナノ秒, 実行の間隔:243000ナノ秒
[694]経過時間:1708594555768766000ナノ秒, 実行の間隔:246000ナノ秒
[695]経過時間:1708594555769030000ナノ秒, 実行の間隔:264000ナノ秒
[696]経過時間:1708594555769275000ナノ秒, 実行の間隔:245000ナノ秒
[697]経過時間:1708594555769517000ナノ秒, 実行の間隔:242000ナノ秒
[698]経過時間:1708594555769779000ナノ秒, 実行の間隔:262000ナノ秒
[699]経過時間:1708594555770023000ナノ秒, 実行の間隔:244000ナノ秒
[700]経過時間:1708594555770265000ナノ秒, 実行の間隔:242000ナノ秒
[701]経過時間:1708594555770529000ナノ秒, 実行の間隔:264000ナノ秒
[702]経過時間:1708594555770771000ナノ秒, 実行の間隔:242000ナノ秒
[703]経過時間:1708594555771016000ナノ秒, 実行の間隔:245000ナノ秒
[704]経過時間:1708594555771278000ナノ秒, 実行の間隔:262000ナノ秒
[705]経過時間:1708594555771526000ナノ秒, 実行の間隔:248000ナノ秒
[706]経過時間:1708594555771764000ナノ秒, 実行の間隔:238000ナノ秒
[707]経過時間:1708594555772023000ナノ秒, 実行の間隔:259000ナノ秒
[708]経過時間:1708594555772270000ナノ秒, 実行の間隔:247000ナノ秒
[709]経過時間:1708594555772514000ナノ秒, 実行の間隔:244000ナノ秒
[710]経過時間:1708594555772773000ナノ秒, 実行の間隔:259000ナノ秒
[711]経過時間:1708594555773030000ナノ秒, 実行の間隔:257000ナノ秒
[712]経過時間:1708594555773282000ナノ秒, 実行の間隔:252000ナノ秒
[713]経過時間:1708594555773521000ナノ秒, 実行の間隔:239000ナノ秒
[714]経過時間:1708594555773770000ナノ秒, 実行の間隔:249000ナノ秒
[715]経過時間:1708594555774028000ナノ秒, 実行の間隔:258000ナノ秒
[716]経過時間:1708594555774268000ナノ秒, 実行の間隔:240000ナノ秒
[717]経過時間:1708594555774533000ナノ秒, 実行の間隔:265000ナノ秒
[718]経過時間:1708594555774772000ナノ秒, 実行の間隔:239000ナノ秒
[719]経過時間:1708594555775016000ナノ秒, 実行の間隔:244000ナノ秒
[720]経過時間:1708594555775281000ナノ秒, 実行の間隔:265000ナノ秒
[721]経過時間:1708594555775523000ナノ秒, 実行の間隔:242000ナノ秒
[722]経過時間:1708594555775768000ナノ秒, 実行の間隔:245000ナノ秒
[723]経過時間:1708594555776032000ナノ秒, 実行の間隔:264000ナノ秒
[724]経過時間:1708594555776277000ナノ秒, 実行の間隔:245000ナノ秒
[725]経過時間:1708594555776519000ナノ秒, 実行の間隔:242000ナノ秒
[726]経過時間:1708594555776765000ナノ秒, 実行の間隔:246000ナノ秒
[727]経過時間:1708594555777026000ナノ秒, 実行の間隔:261000ナノ秒
[728]経過時間:1708594555777273000ナノ秒, 実行の間隔:247000ナノ秒
[729]経過時間:1708594555777522000ナノ秒, 実行の間隔:249000ナノ秒
[730]経過時間:1708594555777764000ナノ秒, 実行の間隔:242000ナノ秒
[731]経過時間:1708594555778025000ナノ秒, 実行の間隔:261000ナノ秒
[732]経過時間:1708594555778268000ナノ秒, 実行の間隔:243000ナノ秒
[733]経過時間:1708594555778530000ナノ秒, 実行の間隔:262000ナノ秒
[734]経過時間:1708594555778776000ナノ秒, 実行の間隔:246000ナノ秒
[735]経過時間:1708594555779021000ナノ秒, 実行の間隔:245000ナノ秒
[736]経過時間:1708594555779268000ナノ秒, 実行の間隔:247000ナノ秒
[737]経過時間:1708594555779514000ナノ秒, 実行の間隔:246000ナノ秒
[738]経過時間:1708594555779773000ナノ秒, 実行の間隔:259000ナノ秒
[739]経過時間:1708594555780016000ナノ秒, 実行の間隔:243000ナノ秒
[740]経過時間:1708594555780279000ナノ秒, 実行の間隔:263000ナノ秒
[741]経過時間:1708594555780526000ナノ秒, 実行の間隔:247000ナノ秒
[742]経過時間:1708594555780772000ナノ秒, 実行の間隔:246000ナノ秒
[743]経過時間:1708594555781031000ナノ秒, 実行の間隔:259000ナノ秒
[744]経過時間:1708594555781281000ナノ秒, 実行の間隔:250000ナノ秒
[745]経過時間:1708594555781523000ナノ秒, 実行の間隔:242000ナノ秒
[746]経過時間:1708594555781781000ナノ秒, 実行の間隔:258000ナノ秒
[747]経過時間:1708594555782021000ナノ秒, 実行の間隔:240000ナノ秒
[748]経過時間:1708594555782267000ナノ秒, 実行の間隔:246000ナノ秒
[749]経過時間:1708594555782514000ナノ秒, 実行の間隔:247000ナノ秒
[750]経過時間:1708594555782777000ナノ秒, 実行の間隔:263000ナノ秒
[751]経過時間:1708594555783018000ナノ秒, 実行の間隔:241000ナノ秒
[752]経過時間:1708594555783268000ナノ秒, 実行の間隔:250000ナノ秒
[753]経過時間:1708594555783528000ナノ秒, 実行の間隔:260000ナノ秒
[754]経過時間:1708594555783765000ナノ秒, 実行の間隔:237000ナノ秒
[755]経過時間:1708594555784029000ナノ秒, 実行の間隔:264000ナノ秒
[756]経過時間:1708594555784276000ナノ秒, 実行の間隔:247000ナノ秒
[757]経過時間:1708594555784514000ナノ秒, 実行の間隔:238000ナノ秒
[758]経過時間:1708594555784775000ナノ秒, 実行の間隔:261000ナノ秒
[759]経過時間:1708594555785015000ナノ秒, 実行の間隔:240000ナノ秒
[760]経過時間:1708594555785283000ナノ秒, 実行の間隔:268000ナノ秒
[761]経過時間:1708594555785524000ナノ秒, 実行の間隔:241000ナノ秒
[762]経過時間:1708594555785766000ナノ秒, 実行の間隔:242000ナノ秒
[763]経過時間:1708594555786027000ナノ秒, 実行の間隔:261000ナノ秒
[764]経過時間:1708594555786266000ナノ秒, 実行の間隔:239000ナノ秒
[765]経過時間:1708594555786527000ナノ秒, 実行の間隔:261000ナノ秒
[766]経過時間:1708594555786769000ナノ秒, 実行の間隔:242000ナノ秒
[767]経過時間:1708594555787033000ナノ秒, 実行の間隔:264000ナノ秒
[768]経過時間:1708594555787283000ナノ秒, 実行の間隔:250000ナノ秒
[769]経過時間:1708594555787523000ナノ秒, 実行の間隔:240000ナノ秒
[770]経過時間:1708594555787769000ナノ秒, 実行の間隔:246000ナノ秒
[771]経過時間:1708594555788027000ナノ秒, 実行の間隔:258000ナノ秒
[772]経過時間:1708594555788268000ナノ秒, 実行の間隔:241000ナノ秒
[773]経過時間:1708594555788528000ナノ秒, 実行の間隔:260000ナノ秒
[774]経過時間:1708594555788769000ナノ秒, 実行の間隔:241000ナノ秒
[775]経過時間:1708594555789032000ナノ秒, 実行の間隔:263000ナノ秒
[776]経過時間:1708594555789275000ナノ秒, 実行の間隔:243000ナノ秒
[777]経過時間:1708594555789516000ナノ秒, 実行の間隔:241000ナノ秒
[778]経過時間:1708594555802290000ナノ秒, 実行の間隔:12774000ナノ秒
[779]経過時間:1708594555802435000ナノ秒, 実行の間隔:145000ナノ秒
[780]経過時間:1708594555802578000ナノ秒, 実行の間隔:143000ナノ秒
[781]経過時間:1708594555802721000ナノ秒, 実行の間隔:143000ナノ秒
[782]経過時間:1708594555802878000ナノ秒, 実行の間隔:157000ナノ秒
[783]経過時間:1708594555803023000ナノ秒, 実行の間隔:145000ナノ秒
[784]経過時間:1708594555803167000ナノ秒, 実行の間隔:144000ナノ秒
[785]経過時間:1708594555803307000ナノ秒, 実行の間隔:140000ナノ秒
[786]経過時間:1708594555803456000ナノ秒, 実行の間隔:149000ナノ秒
[787]経過時間:1708594555803594000ナノ秒, 実行の間隔:138000ナノ秒
[788]経過時間:1708594555803737000ナノ秒, 実行の間隔:143000ナノ秒
[789]経過時間:1708594555803877000ナノ秒, 実行の間隔:140000ナノ秒
[790]経過時間:1708594555804019000ナノ秒, 実行の間隔:142000ナノ秒
[791]経過時間:1708594555804165000ナノ秒, 実行の間隔:146000ナノ秒
[792]経過時間:1708594555804311000ナノ秒, 実行の間隔:146000ナノ秒
[793]経過時間:1708594555804458000ナノ秒, 実行の間隔:147000ナノ秒
[794]経過時間:1708594555804592000ナノ秒, 実行の間隔:134000ナノ秒
[795]経過時間:1708594555804734000ナノ秒, 実行の間隔:142000ナノ秒
[796]経過時間:1708594555804872000ナノ秒, 実行の間隔:138000ナノ秒
[797]経過時間:1708594555805012000ナノ秒, 実行の間隔:140000ナノ秒
[798]経過時間:1708594555805156000ナノ秒, 実行の間隔:144000ナノ秒
[799]経過時間:1708594555805300000ナノ秒, 実行の間隔:144000ナノ秒
[800]経過時間:1708594555805447000ナノ秒, 実行の間隔:147000ナノ秒
[801]経過時間:1708594555805589000ナノ秒, 実行の間隔:142000ナノ秒
[802]経過時間:1708594555805727000ナノ秒, 実行の間隔:138000ナノ秒
[803]経過時間:1708594555805866000ナノ秒, 実行の間隔:139000ナノ秒
[804]経過時間:1708594555806009000ナノ秒, 実行の間隔:143000ナノ秒
[805]経過時間:1708594555806151000ナノ秒, 実行の間隔:142000ナノ秒
[806]経過時間:1708594555806290000ナノ秒, 実行の間隔:139000ナノ秒
[807]経過時間:1708594555806432000ナノ秒, 実行の間隔:142000ナノ秒
[808]経過時間:1708594555806578000ナノ秒, 実行の間隔:146000ナノ秒
[809]経過時間:1708594555806722000ナノ秒, 実行の間隔:144000ナノ秒
[810]経過時間:1708594555806862000ナノ秒, 実行の間隔:140000ナノ秒
[811]経過時間:1708594555807003000ナノ秒, 実行の間隔:141000ナノ秒
[812]経過時間:1708594555807143000ナノ秒, 実行の間隔:140000ナノ秒
[813]経過時間:1708594555807284000ナノ秒, 実行の間隔:141000ナノ秒
[814]経過時間:1708594555807424000ナノ秒, 実行の間隔:140000ナノ秒
[815]経過時間:1708594555807565000ナノ秒, 実行の間隔:141000ナノ秒
[816]経過時間:1708594555807713000ナノ秒, 実行の間隔:148000ナノ秒
[817]経過時間:1708594555807872000ナノ秒, 実行の間隔:159000ナノ秒
[818]経過時間:1708594555808015000ナノ秒, 実行の間隔:143000ナノ秒
[819]経過時間:1708594555808156000ナノ秒, 実行の間隔:141000ナノ秒
[820]経過時間:1708594555808298000ナノ秒, 実行の間隔:142000ナノ秒
[821]経過時間:1708594555808437000ナノ秒, 実行の間隔:139000ナノ秒
[822]経過時間:1708594555808576000ナノ秒, 実行の間隔:139000ナノ秒
[823]経過時間:1708594555808719000ナノ秒, 実行の間隔:143000ナノ秒
[824]経過時間:1708594555808864000ナノ秒, 実行の間隔:145000ナノ秒
[825]経過時間:1708594555809003000ナノ秒, 実行の間隔:139000ナノ秒
[826]経過時間:1708594555809141000ナノ秒, 実行の間隔:138000ナノ秒
[827]経過時間:1708594555809280000ナノ秒, 実行の間隔:139000ナノ秒
[828]経過時間:1708594555809420000ナノ秒, 実行の間隔:140000ナノ秒
[829]経過時間:1708594555809564000ナノ秒, 実行の間隔:144000ナノ秒
[830]経過時間:1708594555809704000ナノ秒, 実行の間隔:140000ナノ秒
[831]経過時間:1708594555809846000ナノ秒, 実行の間隔:142000ナノ秒
[832]経過時間:1708594555809995000ナノ秒, 実行の間隔:149000ナノ秒
[833]経過時間:1708594555810136000ナノ秒, 実行の間隔:141000ナノ秒
[834]経過時間:1708594555810280000ナノ秒, 実行の間隔:144000ナノ秒
[835]経過時間:1708594555810420000ナノ秒, 実行の間隔:140000ナノ秒
[836]経過時間:1708594555810564000ナノ秒, 実行の間隔:144000ナノ秒
[837]経過時間:1708594555810705000ナノ秒, 実行の間隔:141000ナノ秒
[838]経過時間:1708594555810849000ナノ秒, 実行の間隔:144000ナノ秒
[839]経過時間:1708594555810996000ナノ秒, 実行の間隔:147000ナノ秒
[840]経過時間:1708594555811141000ナノ秒, 実行の間隔:145000ナノ秒
[841]経過時間:1708594555811281000ナノ秒, 実行の間隔:140000ナノ秒
[842]経過時間:1708594555811423000ナノ秒, 実行の間隔:142000ナノ秒
[843]経過時間:1708594555811566000ナノ秒, 実行の間隔:143000ナノ秒
[844]経過時間:1708594555811706000ナノ秒, 実行の間隔:140000ナノ秒
[845]経過時間:1708594555811850000ナノ秒, 実行の間隔:144000ナノ秒
[846]経過時間:1708594555811990000ナノ秒, 実行の間隔:140000ナノ秒
[847]経過時間:1708594555812134000ナノ秒, 実行の間隔:144000ナノ秒
[848]経過時間:1708594555812282000ナノ秒, 実行の間隔:148000ナノ秒
[849]経過時間:1708594555812421000ナノ秒, 実行の間隔:139000ナノ秒
[850]経過時間:1708594555812566000ナノ秒, 実行の間隔:145000ナノ秒
[851]経過時間:1708594555812709000ナノ秒, 実行の間隔:143000ナノ秒
[852]経過時間:1708594555812853000ナノ秒, 実行の間隔:144000ナノ秒
[853]経過時間:1708594555812992000ナノ秒, 実行の間隔:139000ナノ秒
[854]経過時間:1708594555813133000ナノ秒, 実行の間隔:141000ナノ秒
[855]経過時間:1708594555813281000ナノ秒, 実行の間隔:148000ナノ秒
[856]経過時間:1708594555813429000ナノ秒, 実行の間隔:148000ナノ秒
[857]経過時間:1708594555813569000ナノ秒, 実行の間隔:140000ナノ秒
[858]経過時間:1708594555813712000ナノ秒, 実行の間隔:143000ナノ秒
[859]経過時間:1708594555813858000ナノ秒, 実行の間隔:146000ナノ秒
[860]経過時間:1708594555813996000ナノ秒, 実行の間隔:138000ナノ秒
[861]経過時間:1708594555814139000ナノ秒, 実行の間隔:143000ナノ秒
[862]経過時間:1708594555814280000ナノ秒, 実行の間隔:141000ナノ秒
[863]経過時間:1708594555814419000ナノ秒, 実行の間隔:139000ナノ秒
[864]経過時間:1708594555814563000ナノ秒, 実行の間隔:144000ナノ秒
[865]経過時間:1708594555814702000ナノ秒, 実行の間隔:139000ナノ秒
[866]経過時間:1708594555814842000ナノ秒, 実行の間隔:140000ナノ秒
[867]経過時間:1708594555814981000ナノ秒, 実行の間隔:139000ナノ秒
[868]経過時間:1708594555815122000ナノ秒, 実行の間隔:141000ナノ秒
[869]経過時間:1708594555815262000ナノ秒, 実行の間隔:140000ナノ秒
[870]経過時間:1708594555815402000ナノ秒, 実行の間隔:140000ナノ秒
[871]経過時間:1708594555815545000ナノ秒, 実行の間隔:143000ナノ秒
[872]経過時間:1708594555815689000ナノ秒, 実行の間隔:144000ナノ秒
[873]経過時間:1708594555815830000ナノ秒, 実行の間隔:141000ナノ秒
[874]経過時間:1708594555815977000ナノ秒, 実行の間隔:147000ナノ秒
[875]経過時間:1708594555816118000ナノ秒, 実行の間隔:141000ナノ秒
[876]経過時間:1708594555816361000ナノ秒, 実行の間隔:243000ナノ秒
[877]経過時間:1708594555816517000ナノ秒, 実行の間隔:156000ナノ秒
[878]経過時間:1708594555816661000ナノ秒, 実行の間隔:144000ナノ秒
[879]経過時間:1708594555816800000ナノ秒, 実行の間隔:139000ナノ秒
[880]経過時間:1708594555816944000ナノ秒, 実行の間隔:144000ナノ秒
[881]経過時間:1708594555817086000ナノ秒, 実行の間隔:142000ナノ秒
[882]経過時間:1708594555817226000ナノ秒, 実行の間隔:140000ナノ秒
[883]経過時間:1708594555817369000ナノ秒, 実行の間隔:143000ナノ秒
[884]経過時間:1708594555817508000ナノ秒, 実行の間隔:139000ナノ秒
[885]経過時間:1708594555817650000ナノ秒, 実行の間隔:142000ナノ秒
[886]経過時間:1708594555817786000ナノ秒, 実行の間隔:136000ナノ秒
[887]経過時間:1708594555817927000ナノ秒, 実行の間隔:141000ナノ秒
[888]経過時間:1708594555818070000ナノ秒, 実行の間隔:143000ナノ秒
[889]経過時間:1708594555818215000ナノ秒, 実行の間隔:145000ナノ秒
[890]経過時間:1708594555818354000ナノ秒, 実行の間隔:139000ナノ秒
[891]経過時間:1708594555818498000ナノ秒, 実行の間隔:144000ナノ秒
[892]経過時間:1708594555818637000ナノ秒, 実行の間隔:139000ナノ秒
[893]経過時間:1708594555818778000ナノ秒, 実行の間隔:141000ナノ秒
[894]経過時間:1708594555818919000ナノ秒, 実行の間隔:141000ナノ秒
[895]経過時間:1708594555819064000ナノ秒, 実行の間隔:145000ナノ秒
[896]経過時間:1708594555819273000ナノ秒, 実行の間隔:209000ナノ秒
[897]経過時間:1708594555819534000ナノ秒, 実行の間隔:261000ナノ秒
[898]経過時間:1708594555819776000ナノ秒, 実行の間隔:242000ナノ秒
[899]経過時間:1708594555820017000ナノ秒, 実行の間隔:241000ナノ秒
[900]経過時間:1708594555820265000ナノ秒, 実行の間隔:248000ナノ秒
[901]経過時間:1708594555820528000ナノ秒, 実行の間隔:263000ナノ秒
[902]経過時間:1708594555820770000ナノ秒, 実行の間隔:242000ナノ秒
[903]経過時間:1708594555821031000ナノ秒, 実行の間隔:261000ナノ秒
[904]経過時間:1708594555821280000ナノ秒, 実行の間隔:249000ナノ秒
[905]経過時間:1708594555821521000ナノ秒, 実行の間隔:241000ナノ秒
[906]経過時間:1708594555821781000ナノ秒, 実行の間隔:260000ナノ秒
[907]経過時間:1708594555822031000ナノ秒, 実行の間隔:250000ナノ秒
[908]経過時間:1708594555822274000ナノ秒, 実行の間隔:243000ナノ秒
[909]経過時間:1708594555822517000ナノ秒, 実行の間隔:243000ナノ秒
[910]経過時間:1708594555822765000ナノ秒, 実行の間隔:248000ナノ秒
[911]経過時間:1708594555823025000ナノ秒, 実行の間隔:260000ナノ秒
[912]経過時間:1708594555823267000ナノ秒, 実行の間隔:242000ナノ秒
[913]経過時間:1708594555823528000ナノ秒, 実行の間隔:261000ナノ秒
[914]経過時間:1708594555823770000ナノ秒, 実行の間隔:242000ナノ秒
[915]経過時間:1708594555824032000ナノ秒, 実行の間隔:262000ナノ秒
[916]経過時間:1708594555824275000ナノ秒, 実行の間隔:243000ナノ秒
[917]経過時間:1708594555824519000ナノ秒, 実行の間隔:244000ナノ秒
[918]経過時間:1708594555824782000ナノ秒, 実行の間隔:263000ナノ秒
[919]経過時間:1708594555825029000ナノ秒, 実行の間隔:247000ナノ秒
[920]経過時間:1708594555825274000ナノ秒, 実行の間隔:245000ナノ秒
[921]経過時間:1708594555825520000ナノ秒, 実行の間隔:246000ナノ秒
[922]経過時間:1708594555825783000ナノ秒, 実行の間隔:263000ナノ秒
[923]経過時間:1708594555826026000ナノ秒, 実行の間隔:243000ナノ秒
[924]経過時間:1708594555826271000ナノ秒, 実行の間隔:245000ナノ秒
[925]経過時間:1708594555826532000ナノ秒, 実行の間隔:261000ナノ秒
[926]経過時間:1708594555826776000ナノ秒, 実行の間隔:244000ナノ秒
[927]経過時間:1708594555827023000ナノ秒, 実行の間隔:247000ナノ秒
[928]経過時間:1708594555827272000ナノ秒, 実行の間隔:249000ナノ秒
[929]経過時間:1708594555827532000ナノ秒, 実行の間隔:260000ナノ秒
[930]経過時間:1708594555827775000ナノ秒, 実行の間隔:243000ナノ秒
[931]経過時間:1708594555828018000ナノ秒, 実行の間隔:243000ナノ秒
[932]経過時間:1708594555828269000ナノ秒, 実行の間隔:251000ナノ秒
[933]経過時間:1708594555828532000ナノ秒, 実行の間隔:263000ナノ秒
[934]経過時間:1708594555828774000ナノ秒, 実行の間隔:242000ナノ秒
[935]経過時間:1708594555829021000ナノ秒, 実行の間隔:247000ナノ秒
[936]経過時間:1708594555829270000ナノ秒, 実行の間隔:249000ナノ秒
[937]経過時間:1708594555829533000ナノ秒, 実行の間隔:263000ナノ秒
[938]経過時間:1708594555829775000ナノ秒, 実行の間隔:242000ナノ秒
[939]経過時間:1708594555830022000ナノ秒, 実行の間隔:247000ナノ秒
[940]経過時間:1708594555830267000ナノ秒, 実行の間隔:245000ナノ秒
[941]経過時間:1708594555830526000ナノ秒, 実行の間隔:259000ナノ秒
[942]経過時間:1708594555830767000ナノ秒, 実行の間隔:241000ナノ秒
[943]経過時間:1708594555831030000ナノ秒, 実行の間隔:263000ナノ秒
[944]経過時間:1708594555831279000ナノ秒, 実行の間隔:249000ナノ秒
[945]経過時間:1708594555831520000ナノ秒, 実行の間隔:241000ナノ秒
[946]経過時間:1708594555831765000ナノ秒, 実行の間隔:245000ナノ秒
[947]経過時間:1708594555832026000ナノ秒, 実行の間隔:261000ナノ秒
[948]経過時間:1708594555832270000ナノ秒, 実行の間隔:244000ナノ秒
[949]経過時間:1708594555832531000ナノ秒, 実行の間隔:261000ナノ秒
[950]経過時間:1708594555832775000ナノ秒, 実行の間隔:244000ナノ秒
[951]経過時間:1708594555833020000ナノ秒, 実行の間隔:245000ナノ秒
[952]経過時間:1708594555833267000ナノ秒, 実行の間隔:247000ナノ秒
[953]経過時間:1708594555833533000ナノ秒, 実行の間隔:266000ナノ秒
[954]経過時間:1708594555833778000ナノ秒, 実行の間隔:245000ナノ秒
[955]経過時間:1708594555834021000ナノ秒, 実行の間隔:243000ナノ秒
[956]経過時間:1708594555834282000ナノ秒, 実行の間隔:261000ナノ秒
[957]経過時間:1708594555834525000ナノ秒, 実行の間隔:243000ナノ秒
[958]経過時間:1708594555834770000ナノ秒, 実行の間隔:245000ナノ秒
[959]経過時間:1708594555835018000ナノ秒, 実行の間隔:248000ナノ秒
[960]経過時間:1708594555835282000ナノ秒, 実行の間隔:264000ナノ秒
[961]経過時間:1708594555835524000ナノ秒, 実行の間隔:242000ナノ秒
[962]経過時間:1708594555835766000ナノ秒, 実行の間隔:242000ナノ秒
[963]経過時間:1708594555836032000ナノ秒, 実行の間隔:266000ナノ秒
[964]経過時間:1708594555836273000ナノ秒, 実行の間隔:241000ナノ秒
[965]経過時間:1708594555836514000ナノ秒, 実行の間隔:241000ナノ秒
[966]経過時間:1708594555836774000ナノ秒, 実行の間隔:260000ナノ秒
[967]経過時間:1708594555837018000ナノ秒, 実行の間隔:244000ナノ秒
[968]経過時間:1708594555837282000ナノ秒, 実行の間隔:264000ナノ秒
[969]経過時間:1708594555837526000ナノ秒, 実行の間隔:244000ナノ秒
[970]経過時間:1708594555837767000ナノ秒, 実行の間隔:241000ナノ秒
[971]経過時間:1708594555838032000ナノ秒, 実行の間隔:265000ナノ秒
[972]経過時間:1708594555838279000ナノ秒, 実行の間隔:247000ナノ秒
[973]経過時間:1708594555838527000ナノ秒, 実行の間隔:248000ナノ秒
[974]経過時間:1708594555838773000ナノ秒, 実行の間隔:246000ナノ秒
[975]経過時間:1708594555839017000ナノ秒, 実行の間隔:244000ナノ秒
[976]経過時間:1708594555839264000ナノ秒, 実行の間隔:247000ナノ秒
[977]経過時間:1708594555839524000ナノ秒, 実行の間隔:260000ナノ秒
[978]経過時間:1708594555839766000ナノ秒, 実行の間隔:242000ナノ秒
[979]経過時間:1708594555840029000ナノ秒, 実行の間隔:263000ナノ秒
[980]経過時間:1708594555840273000ナノ秒, 実行の間隔:244000ナノ秒
[981]経過時間:1708594555840533000ナノ秒, 実行の間隔:260000ナノ秒
[982]経過時間:1708594555840776000ナノ秒, 実行の間隔:243000ナノ秒
[983]経過時間:1708594555841032000ナノ秒, 実行の間隔:256000ナノ秒
[984]経過時間:1708594555841279000ナノ秒, 実行の間隔:247000ナノ秒
[985]経過時間:1708594555841525000ナノ秒, 実行の間隔:246000ナノ秒
[986]経過時間:1708594555841767000ナノ秒, 実行の間隔:242000ナノ秒
[987]経過時間:1708594555842030000ナノ秒, 実行の間隔:263000ナノ秒
[988]経過時間:1708594555842276000ナノ秒, 実行の間隔:246000ナノ秒
[989]経過時間:1708594555842517000ナノ秒, 実行の間隔:241000ナノ秒
[990]経過時間:1708594555842780000ナノ秒, 実行の間隔:263000ナノ秒
[991]経過時間:1708594555843024000ナノ秒, 実行の間隔:244000ナノ秒
[992]経過時間:1708594555843270000ナノ秒, 実行の間隔:246000ナノ秒
[993]経過時間:1708594555843533000ナノ秒, 実行の間隔:263000ナノ秒
[994]経過時間:1708594555843776000ナノ秒, 実行の間隔:243000ナノ秒
[995]経過時間:1708594555844023000ナノ秒, 実行の間隔:247000ナノ秒
[996]経過時間:1708594555844267000ナノ秒, 実行の間隔:244000ナノ秒
[997]経過時間:1708594555844526000ナノ秒, 実行の間隔:259000ナノ秒
[998]経過時間:1708594555844773000ナノ秒, 実行の間隔:247000ナノ秒
[999]経過時間:1708594555845031000ナノ秒, 実行の間隔:258000ナノ秒
PROBLEM IN THONNY'S BACK-END: Exception while handling 'Run' (thonny.plugins.micropython.mp_back.ManagementError: Command output was not empty).
See Thonny's backend.log for more info.
You may need to press "Stop/Restart" or hard-reset your MicroPython device and try again.


Process ended with exit code 1.
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

MPY: soft reboot
MicroPython v1.22.1 on 2024-01-05; Raspberry Pi Pico W with RP2040
Type "help()" for more information.
>>> 
上記で、[778]経過時間:1708594555802290000ナノ秒, 実行の間隔:12774000ナノ秒の所があり、
その後に短い周期に続いた後に、約0.25ミリ周期へ戻っています。
これが、期待していなかった大きな周期の雑音になっています。
この理由は、このMicroPythonでは、バックグラウンドで処理される何らかの処理で作成したコードの実行が滞っている為です。 この何らかの処理とは、ガベージコレクションなどではないかと予測しています。

いすれにしても、現時点(2024-02-22)でこのような制御に、MicroPythonという言語は向かないと、判断しました。
なお、このようなコードで影響受けないと判断できる制御周期は、実験の結果、40ミリ秒以上となりました。
(コード内で#PERIOD_NS=40000000 のコメントを外した場合の実行結果から判断した値です。)

実験その4 Raspberry Pi PicoをC言語のスイッチングのパルス変調で音を鳴らす

Raspberry Pi PicoをC言語のコールバック関数でスイッチングして音を鳴らす(add_repeating_timer_usを利用)

前述と同じswitching()関数をC言語で実装して、pythonのような揺らぎの雑音の問題なく1Hzの矩形音がなることを検証してみました。
C言語では、switching()関数をコールバック関数の登録で行っています。よって、別処理を平行して行うことができます。
switching()関数は、pythonで作成したswitching()と同じ構造で、bin_dataのバイト列のビット列を、PERIOD_USの周期でスイッチングしています。
以下では、鳴っている処理と平行してPico WのLEDを、1秒間隔でON/OFFすることも出来ています。
そのコードが、次のコードです。
#include <stdio.h>      // GPIO14をbin_dataのビット列で、PERIOD_USの周期(マイクロ秒)で、ON/OFFするプログラム
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/cyw43_arch.h"
#define TRAGET_PIN 14 // スイッチング対象のGPIO端子
// PERIOD_USがswitchingコールバック関数周期 マイクロ秒(:bin_dataのビット列のビット変更周期)
#define PERIOD_US 250 // スイッチング callback 関数の実行周期 単位:マイクロ秒
#define DELAY_MS 1000 // PICO W のオンボードLED点滅周期指定

char bin_data[] = // { 0x33,0x33 }; // スイッチングデータが並ぶバイナリ
#include "data.bin.hex" // パルス変調用 バイナリ配列初期定義部分を取り込む
// data.bin.hexの中に、{ 0x33,・・0x33,  }; のようなが並ぶ このデータの並びはERIOD_USが250usであれば1KHz矩形となる
int bin_mask = 1;
int bin_idx = 0;
uint64_t strat_time, end_time;//音の鳴らし始めと、終わりの時間の記憶用
// スイッチング callback 関数
bool switching(struct repeating_timer *t) {
    if( bin_idx >= sizeof(bin_data) ) {
        bin_idx = 0;// bin_data のデータをループ再生
        end_time=time_us_64();//CPUが動作を開始してからの時間確認用
        printf("END:%lld-START:%lld=%llduSec\n", end_time,strat_time,end_time-strat_time);//時間確認用
        return false; //ループしない。(この行をコメントにするとループ再生)
    }
    if (bin_data[bin_idx] & bin_mask) gpio_put(TRAGET_PIN, 1);
    else gpio_put(TRAGET_PIN, 0);
    bin_mask <<= 1;
    if( bin_mask == 256 ){
        bin_idx+=1;
        bin_mask=1;
    }
    return true;
}
int main() {
    stdio_init_all();//To use USB
    gpio_init(TRAGET_PIN);//GPIO TRAGET_PINを初期化
    gpio_set_dir(TRAGET_PIN, GPIO_OUT);//GPIO TRAGET_PINを出力用に指定
    sleep_ms(1000);
    printf("GPIO TRAGET_PIN:%d\n", TRAGET_PIN);// switchingのON/OFF対象ピン
    printf("play data size: %d byte\n", sizeof(bin_data) );
    int cyw43 = cyw43_arch_init();
    printf("result cyw43_arch_init():%d\n", cyw43);
    if( cyw43 != PICO_OK){
        printf("Wi-Fi init failed");
        return -1;
    }
    cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);//Pico WのオンボードLEDをON

    struct repeating_timer timer;// タイマー割り込み
    strat_time=time_us_64();//CPUが動作を開始してからの時間確認用
    add_repeating_timer_us(PERIOD_US, switching, NULL, &timer);// switchingのコールバック関数を登録
    int n = 0;
    while (true) {
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);//Pico WのオンボードLEDをOFF
        sleep_ms(DELAY_MS);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);//Pico WのオンボードLEDをON
        sleep_ms(DELAY_MS);
        //printf("Pino LED Blink No:%d\n", ++n);// ★★
    }
}
上記のprintfの出力は、USBを介して受信した情報をターミナルに表示できています。次のような表示が得られました。
GPIO TRAGET_PIN:14
play data size: 5000 byte
result cyw43_arch_init():0
END:11695845-START:1575277=10120568uSec
上記のソースでは、bin_dataのバイト列のビット列を使ってPERIOD_USの周期でスイッチングしています。
このbin_dataのバイト列は、インクルードした"data.bin.hex"の内容で初期化しています。
この"data.bin.hex"は、次のPythonのコードで作成しました。
data_bin_hex="data.bin.hex"
pm_bin=bytes([0b00110011 for n in range(5000)]) # スイッチング周期が0.25mSの時、1KHz矩形 10秒
with open(data_bin_hex, "w") as f: #パルス変調のデータを書き込み
    f.write("{\n")
    for n,v in enumerate(pm_bin):
        if n > 0 and n % 10 == 0 : f.write("\n")
        s=f" '\\x{v:02X}',"
        # print(f"{n}:{s}:{v:08b}")
        f.write(s)
    f.write("};\n")
上記の実行で出来上る"data.bin.hex" (パルス変調用のビット列データの初期化コード)の内容は次のようになります。
{
 '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33',
 '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33',
・・・・・
'\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33', '\x33',};
これは、'\x33'が5000個並ぶデータです。1ビットの周期が250マイクロ秒なので、矩形の周期が、0x3の4ビットより、250u秒×4=1000u秒で1KHzの周波数です。
1byteの再生250u秒×8=2ミリ秒なので、5000byteの再生時間は10秒です。
(この初期化データを上手く作れば、パルス変調で任意の音が鳴らせると考えたコードです。)
この音を含む動作ムービー(1KHz矩形の音)を紹介したXへのリンクを下記イメージに施しています。


上記動作時に雑音が内容ですが、★★の行のコメントを外して、「printf("Pino LED Blink No:%d\n", ++n); 」のコードを有効にすると、USB通信時に雑音が生じます。
つまり、上記の250マイクロ秒毎に呼び出されるはずのswitchingのコールバック関数の実行タイミングがズレるためと予想されます。
このswitching関数は、add_repeating_timer_us(250, switching, NULL, &timer);の実行でが250マイクロ秒ごと呼び出しが始まって、 bin_dataのビット列でスイッチングしており、 それが(sizeof(bin_data)×8)×250マイクロ秒=10秒で終わります。
そして、この始まりと終わりのタイミングで、time_us_64()によりCPUが動作を開始してからの経過時間(μ秒)を測定し、その差から音の出る時間を測定して、 表示させています。
その結果がEND:11695845-START:1575277=10120568uSecと表示されました。
つまり、0.12秒も誤差がありました。
つまり、APIのadd_repeating_timer_us関数は、使い方で大きな誤差が生じることを意味しています。

そこでスイッチング周期の250μ秒(#define PERIOD_US 250)を色々と変更して、2秒間の音(2000000uSec)の誤差を測定してみました。
2秒間の音のデータを、PERIOD_USのスイッチング周期を変更したごとにPython(後述します)で作り、音の鳴る時間のズレを測定しました。
この結果を以下に示します。
PERIOD_USの設定値(スイッチ周期のμ秒)測定した表示結果備考
250END:3599701-START:1575344=2024357uSecmainでループでprintfを使った場合:END:3635526-START:1575266=2060260uSec
100END:3635462-START:1575245=2060217uSecmainでループでprintfを使った場合:END:3656054-START:1575318=2080736uSec
75END:3655891-START:1575271=2080620uSecこの例のコールバック関数に於いて、10%以下の遅れの限界値
60END:3675620-START:1575269=2100351uSec
50END:3695464-START:1575276=2120188uSec
25END:3815540-START:1575267=2240273uSec
10END:4175646-START:1575226=2600420uSec
5END:4778546-START:1575309=3203237uSec
1END:7223266-START:1575237=5648029uSec
上記の想定結果の理想値は2000000uSecですが、それぞれで遅れが生じています。
それぞれのスイッチング周期の分だけズレる可能性がありますが、add_repeating_timer_us関数によるコールバック関数では、正確なスイッチングは望めない結果です。
この結果からパルス変調で音を出す場合、チョット間延びすることを許せる最小値は、50μ秒になるでしょうが、この周期の周波数が20KHzです。
この周期のスイッチングできれいなサウンドを鳴らすことはとてもできないと思われます。

実験その5 Raspberry Pi PicoをC言語で、スイッチングに専念した繰り返しで音を鳴らす。(コールバックを使わない)

前述により、add_repeating_timer_usを使ったコールバックでswitching関数呼び出すと、短い周期設定で処理できない状況が分かりました。
そこでコールバックを使わずに、switching関数を呼び出すことに専念したコードにして試します。
それは、単純な繰り返しを使う方法で、sleep_us関数の最小となる1μ秒に近い周期にする制御で、次のコードです。
#include <stdio.h>      // GPIO14をbin_dataのビット列で、PERIOD_USの周期(マイクロ秒)で、ON/OFFするプログラム
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "pico/cyw43_arch.h"
#define TRAGET_PIN 14 // スイッチング対象のGPIO端子

#define PERIOD_US 1 // 後述するが,2以上でなければならない。bin_dataのビット列のスイッチング周期 単位:マイクロ秒

char bin_data[] = // { 0x33,0x33 }; // スイッチングデータが並ぶバイナリ
#include "data.bin.hex" // パルス変調用 バイナリ配列初期定義部分を取り込む
// data.bin.hexの中に、{ 0x33,・・0x33,  }; のようなが並ぶ このデータの並びはERIOD_USが250usであれば1KHz矩形となる
int bin_mask = 1;
int bin_idx = 0;
uint64_t strat_time, end_time;//音の鳴らし始めと、終わりの時間の記憶用
// スイッチング callback 関数
bool switching(struct repeating_timer *t) {
    if( bin_idx >= sizeof(bin_data) ) {
        bin_idx = 0;// bin_data のデータをループ再生
        end_time=time_us_64();//CPUが動作を開始してからの時間確認用
        printf("END:%lld-START:%lld=%llduSec\n", end_time,strat_time,end_time-strat_time);//時間確認用
        return false; //ループしない。(この行をコメントにするとループ再生)
    }
    if (bin_data[bin_idx] & bin_mask) gpio_put(TRAGET_PIN, 1);
    else gpio_put(TRAGET_PIN, 0);
    bin_mask <<= 1;
    if( bin_mask == 256 ){
        bin_idx+=1;
        bin_mask=1;
    }
    return true;
}
int main() {
    stdio_init_all();//To use USB
    gpio_init(TRAGET_PIN);//GPIO TRAGET_PINを初期化
    gpio_set_dir(TRAGET_PIN, GPIO_OUT);//GPIO TRAGET_PINを出力用に指定
    sleep_ms(1000);
    printf("GPIO TRAGET_PIN:%d\n", TRAGET_PIN);// switchingのON/OFF対象ピン
    int cyw43 = cyw43_arch_init();
    printf("result cyw43_arch_init():%d\n", cyw43);
    if( cyw43 != PICO_OK){
        printf("Wi-Fi init failed");
        return -1;
    }
    cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);//Pico WのオンボードLEDをON
    printf("PERIOD_US:%duSec, play data size: %d byte\n", PERIOD_US,sizeof(bin_data) );
    cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);//Pico WのオンボードLEDをOFF

    strat_time=time_us_64();//CPUが動作を開始してからの時間確認用
    while(switching(NULL)==true){
        sleep_us(PERIOD_US);    // PERIOD_USのμ秒でswitchingのパルス変調
    }
    cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1);//Pico WのオンボードLEDをON
}
// 参考URL:https://www.raspberrypi.com/documentation/pico-sdk/high_level.html
上記のchar bin_data[] の初期化コードを#include "data.bin.hex"を、 次のコードで生成して、音の時間を確認しました。
このコードは、スイッチング周期を1マイク秒の場合、1/(1e-6*8*20)=6250Hzの音を1秒間だけ鳴らす配列の初期化するものです。
data_bin_hex="data.bin.hex"
with open(data_bin_hex, "w") as f: #パルス変調のデータを書き込み
    f.write("{\n")
    for v in range(6250):		# 1e-6*8*20*6250=1秒
        s= " '\\xff', '\\xff', '\\xff', '\\xff', '\\xff', '\\xff', '\\xff', '\\xff', '\\xff', '\\xff',\n"
        s+=" '\\x00', '\\x00', '\\x00', '\\x00', '\\x00', '\\x00', '\\x00', '\\x00', '\\x00', '\\x00',\n"
        f.write(s)
    f.write("};\n")
前述のC言語コードでは、USBを介してターミナルへ、音の鳴っていた時間などを表示しているが、その実行結果が次のようになりました。
GPIO TRAGET_PIN:14
result cyw43_arch_init():0
PERIOD_US:1uSec, play data size: 125000 byte
END:2914986-START:1576817=1338169uSec
以上のように、1000000に近い値になることを期待したが、結果は1338169μ秒でした。
次に#define PERIOD_US 1のコードを#define PERIOD_US 2に変更して、スイッチング周期を2μ秒にした結果を示します。
GPIO TRAGET_PIN:14
result cyw43_arch_init():0
PERIOD_US:2uSec, play data size: 125000 byte
END:3577764-START:1576823=2000941uSec
こちらは、2000941と、予想通りで1秒の2倍になりました。
以上から前述のC言語コードでは、μ秒周期を指定する#define PERIOD_USの設定は2以上にしなければいけないことが分かりました。
(これを、1に設定してchar bin_data[]に1秒のデータを指定した場合、1.338169秒に間延びしてしまう。)

また、char bin_data[]を大きなサイズで初期化を行うと、リンクエラーが起きました。
実験によると、この要素数(バイト数を)249700にすると、リンクエラーでした。
そして、要素数(バイト数を)249600にすると、リンクエラーは起きませんでした。

実験その6 Raspberry Pi PicoのC言語スイッチングデータをPythonで作る。(スイッチング周期は2μ秒

前述のC言語は、パルス変調データファイルの"data.bin"を用意しすれば、そのスイッチング(PicoのGP14をON・OFF)で音が鳴ります。
そこで適当な.wavファイルをパルス変調して"data.bin"を生成するコード(generate_PM.py )を次のように作成しました。
このコードは、WAV_FILE_PATHに変換対象のwavファイルパス、PERIOD_USで指定したμ秒の周期、、BIT_DEPTHでPDMに使う分可能のビット数を指定して、 生成したPDMのビット列を「"data.bin"」のファイルに生成するコードです。
なお、符号無し16bit整数から、任意のビット幅のパルスの値に変換する関数を別モジュール(val2pulse.py)にしており、これも示します。
# generate_PM.py wavファイルからパルス変調用ファイルを作成する
import wave
# 参考https://docs.python.org/ja/3/library/wave.html
import numpy as np
import matplotlib.pyplot as plt

BIT_DEPTH=32 # パルス変調に使うビット数(段階数で分解能と違う)
PERIOD_US=2 # Pulse modulation用のスイッチング周期 

WAV_FILE_PATH="はいわかりました.wav" # 変換対象のこの音声が記憶されるサウンドファイル
#WAV_FILE_PATH="doremi.wav"
#WAV_FILE_PATH="440Hz1Sec.wav"

def getframedatas_by_wav(wav_file_path:str): # wavファイルからフレームレートと、16bitPCMバイナリーを取得
   print(f"{wav_file_path}サウンドファイルから、再生用のバイト列を取得")
   wavefile = wave.open(wav_file_path, "r")
   framerate = wavefile.getframerate() # フレームレート(1秒間のデータ出力数)
   print(f"フレームレート:{framerate}Hz、サンプリング周期:{1/framerate*1e6:6.2f}u秒") 
   nchannel=wavefile.getnchannels()
   print("チャンネル数:", nchannel)
   sampwidth=wavefile.getsampwidth()
   print("サンプル幅数:", sampwidth)
   if sampwidth != 2:
      print(f"サンプル幅数が2(PCM 16bit)以外に対応していません")
      exit()
   nframes = wavefile.getnframes() # 全フレーム内データ数
   print(f"フレームの数:{nframes}, 時間:{nframes/framerate}秒") 
   buffer = wavefile.readframes(nframes) # 全フレームを読み取る
   wavefile.close() # ファイルを閉じる 
   if nchannel == 2: # 2チャンネルであれば、左チャンネルだけ抽出
      ba=bytearray()
      for i,c in enumerate(list(buffer)):
         if i%4==0: ba.append(c)# 左チャンネル抽出(0,1)、右なら(3,4)
         if i%4==1: ba.append(c)
      buffer = bytes(ba)
   return framerate, buffer

framerate, buffer=getframedatas_by_wav(WAV_FILE_PATH) # wavファイルからフレームレートと、16bitPCMバイナリーを取得

print(f"オリジナルのサウンドの{len(buffer)/2/framerate} 秒を再生する。")
import pyaudio # 再生して確認する。
audio = pyaudio.PyAudio()
format=audio.get_format_from_width(width=2) # ストリームを読み書きするときのデータ型
stream = audio.open(format=format,channels=1,rate=framerate,output=True)
stream.write(buffer)  # オリジナルのサウンドの音を確認

print(f"サウンドデータ(16bitPCMバイナリー)からpulse_modulationで使う値(符号なし16bitのnumpy配列)に変換")
int16_np=np.frombuffer(buffer, dtype="int16")
uint16_np=int16_np+(2<<14) # int16をunsigned int 16へ
plt.plot(uint16_np)  # オリジナルのサウンド(uint16)の視覚化
plt.show() 

from val2pulse import pulse_modulation # パルスデータに変換関数

# uint16_npのwavデータ(符号なし16bitのnumpy配列)を、(PERIOD_US*BIT_DEPTH)周期のPM変換対象データリスト(data_list)に変換
data_list=[] # (PERIOD_US*BIT_DEPTH)周期のリスト
maxval=max(uint16_np)
print(f"最大値:{maxval}、ビット幅:{BIT_DEPTH}")
start_time = 0 # スタート時の現在時間
next_do_time = 0 # 次のスイッチングタイミング
idx_wav=0 # 
while idx_wav < uint16_np.shape[0]:
   val = uint16_np[idx_wav]
   idx_wav+=1
   start_time+=1/framerate*1e6 # wavのサンプリング周期加算
   if idx_wav <= 50: print(f"{start_time} >= {next_do_time} {start_time >= next_do_time}")
   while start_time >= next_do_time:
      if idx_wav <= 50: print(f"next_do_time: {next_do_time}")
      next_do_time+=(PERIOD_US*BIT_DEPTH) # 次のスイッチングタイミング
      val_PM= pulse_modulation(val, maxval ,BIT_DEPTH-1)#, debug=True) # ★★パルスデータに変換★★
      data_list.append(val_PM) # PMに使うリストに一時記憶

print(f"変換後のデータ数:{len(data_list)}、", end="==================")
print(f"{len(data_list)*BIT_DEPTH*PERIOD_US*1e-6} 秒")

plt.plot(data_list)  # (PERIOD_US*BIT_DEPTH)周期のPM変換対象データリストの視覚確認
plt.show()

# data_list (PERIOD_US*BIT_DEPTH)周期のリストからバイナリ列を生成するクラス
class ListToBytes:
   def __init__(self, data_list: list, bit_depth:int ):
      self.bit32=0        # bit設定の作業用変数
      self.bitCount=0     # 上記への記憶bit数。 8bit毎に変換処理
      self.bitSize=0      # データのビットサイズ
      self.bit_depth=bit_depth # 変換するビット長
      self.byte_buf = bytearray()
      for value in data_list: # 記憶対象のデータ群
         self.setdata(value,bit_depth) # valueを6bitで記憶
      self.padding()
   #
   def setdata(self, data, bitSize): # dataをbyte列に変換 ビット列構築用で使う。
      '''bitsizeのビット数で、dataを記憶 1byte分に詰められたタイミングで byte_bufに追加'''
      bitmask = (1<<bitSize)-1
      if data > bitmask : raise Exception(f"{data} does not fit in {bitSize} bit")
      self.bit32 |= data << self.bitCount
      self.bitCount += bitSize
      #print(f"{self.bit32:032b}")
      while self.bitCount >= 8:
         self.byte_buf.append(self.bit32 & 0x0ff)
         self.bit32 >>= 8
         self.bitCount-=8
   #
   def padding(self): # ビット列構築用で使う
      ''' bit_sizeサイズが、丁度byteに達するように0で埋める'''
      if self.bitCount != 0:
         self.setdata(0, 8-self.bitCount) # bit列をbyte列に変換
   #
   def debug_string(self):# 下位ビットからビット列を並べた文字列を取得
      s=""
      for v in self.byte_buf:s+=''.join(list(reversed(f"{v:08b}")))
      return s

pm_bin=bytes(ListToBytes(data_list,BIT_DEPTH).byte_buf) # data_listからPulse modulation用バイナリをpm_binに得る

print(f"data:{len(pm_bin)}byte*{PERIOD_US}ナノ周期*8bit={len(pm_bin)*PERIOD_US*8/1e6}秒")

with open("data.bin", "wb") as f: # Pulse modulation用のバイナリデータを書き込み
   f.write(pm_bin)

import base64
with open("data.bin.txt", "wb") as f: # Pulse modulation用のbase64データをBase64書き込み
   f.write(base64.b64encode(pm_bin)) # このファイルは、picoのThonny環境にデータ入れる場合に使う

with open("data.bin.hex", "w") as f: # C言語配列用パルス変調のデータを書き込み
    f.write("{\n")
    for n,v in enumerate(pm_bin): # (249600バイト以下にしないとリンクエラーの可能性あり)
        if n > 0 and n % 10 == 0 : f.write("\n")
        s=f" '\\x{v:02X}',"
        # print(f"{n}:{s}:{v:08b}")
        f.write(s)
    f.write("};\n")

print(f"オリジナルサウンドのuint16要素数:{len(uint16_np)} ==>PM後のbyte数:{len(pm_bin)}")
stream.stop_stream()
stream.close()
上記は次の手順で動作しています。
  1. wavファイルからフレームレートと、16bitPCMバイナリーを取得
  2. サウンドデータ(16bitPCMバイナリー)からpulse_modulationで使う値(符号なし16bitのnumpy配列)に変換
  3. uint16_npのwavデータ(符号なし16bitのnumpy配列)を、(PERIOD_US*BIT_DEPTH)周期のPM変換対象データリスト(data_list)に変換
  4. data_listからPulse modulation用バイナリをpm_binに得る
  5. pm_binをファイル化
なお、出来上ったパルス変調用(pm_bin)バイナリデータを最後でファイルしていますが、 バイナリファイル、ベース64ファイル、C言語のchar初期化インクルード用ファイル の3種類を出力しています。
(ベース64ファイルのファイルは、Thonnyの環境の場合に使うことを想定にしています。Thonnyの環境でPico側にファイル送る方法が単純に存在しないのですが、 テキストファイルであれば編集出来るので、このアフィルをコピー貼り付けして使います。
その後、次のようなコードでバイナリ化します。(Micropythonのコードです。)
import ubinascii
with open("data.txt", "rb") as f: base64_txt=f.read() # テキストデータ読み込み
print(base64_txt)
bin_data=ubinascii.a2b_base64(base64_txt)
print(len(bin_data))
with open("data.bin", "wb") as f: f.write(bin_data) # バイナリデータを書き込み

なお、パルス変調の要として、パルスのビット列を取得しているのが、 val2pulseモジュールのpulse_modulation 関数です。
このval2pulse.pyのコードは、次の内容です。(このファイルは、前述のgenerate_PM.py と同じ位置に起きます。)
# val2pulse.py の名前のモジュール pulse_modulation関数の定義 val の引数に対して、そのパルス変調用のデータを返す関数

convTbl=None

# valの集合の最大がmaxvalとして、(bit_depth+1)の分解能でパルス幅のビットをintで返す。
# つまり、maxvalを(bit_depth+1)分割して、valに対するパルス幅のビットをintで返す。
# ( intで返すが、有効値は(bit_depth+1)のビット幅なので、そのビット列をパックして使う必要がある。)
# 例:bit_depth=7の時、maxvalを8分割して、8bitで0〜255のビット列に変換
# bit_depth=7でmaxvalが80の場合、valが70〜80であれば255になる。
def val_to_pulse(val, maxval ,bit_depth, debug=False): 
   global convTbl
   if convTbl == None:
      convTbl=[2**n-1 for n in range(bit_depth+2)]
      #print(convTbl) # [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535]
   #
   i=int(val/maxval*(bit_depth+2))
   i = i if i < (bit_depth+2) else (bit_depth+1)
   binVal=convTbl[i]
   if debug: s="{:6d}==>i={:02}:{:04x}:{:0"+str(bit_depth+1)+"b}";print(s.format(val,i,val,binVal))
   return binVal

pulse_modulation=val_to_pulse

if __name__ == '__main__': # pulse_modulation関数確認用
   for v in range(0, 91): # 8分割で 10〜19なら 0b00000001、80〜90 なら 0b11111111の8ビット幅
      pulse_modulation(v, 90, 8-1, debug=True) 
   for v in range(0, 101): # 10分割で 10〜19なら 0b0000000001、90〜100 なら 0b1111111111の10ビット幅
      pulse_modulation(v, 100, 10-1, debug=True) 
   for v in range(0, 65536, 1000): 
      pulse_modulation(v, 65535, 48-1, debug=True) 

上記の実行例を示します。
左下は、"はいわかりました.wav"の16ビットPCMのデータの左チャンネルのデータを符号無しに変換したデータを視覚化したグラフです。
そして、右下がこれを 5ビット(32段階)のPWDデータに変換したデータを視覚化したグラフです。
上記の実行後、生成された"data.bin.hex"を使って、C言語のコールバックを使わないスイッチングに専念した方をコンパイルして 実行した場合の動作ムービーを紹介したXへのリンクを下記イメージに施しています。

これは2μ秒のスイッチングを作り、PWM制御で作った「はい、分かりました」の音声の再生音です。
PWMの分解能は5ビット(32段階)で、聞き分けにくい音になっています。

実験その5 パルス変調関数(val2pulseモジュールのpulse_modulation)の検討(パルス密度変調検討?) 

前述の再生音の品質を上げるための模索をしてみました。
その1: 「人間の感覚の大きさが、受ける刺激の強さの対数に比例する」というウェーバー−フェヒナーの法則から、 小さい音を強調すれば、聞きやすい音になるのではないか?ということで、非線形の増幅関数(amplify_non_linear)追加してみました。
int((1-math.exp(-val* 0.00008))*maxval)の変換でこの式は、次の入出力関係です。
これにより、5ビット(32段階)のPWDデータに変換したデータを視覚化したグラフは右下のように変わります。
結果:大きな改善は見られませんでした。雑音が少なくなった分だけ聞き取り難くなったように感じます。
ソースはこの色の部分で残しますが、コメントで使わないとにしました。

その2: 前述のpulse_modulation関数はパルス幅変調(PWM)で、パルス密度変調(PDM)ではない。
そこで、次のイメージの密度変調のパルスに変更してみる。
PWD(幅変調)PMD(密度変調)
# 一つのパルス幅変調用データを、パルス密度変調用データに変換?する関数
def PWM_to_PDM(val, bit_depth, debug=False): 
   f="{:0"+str(bit_depth)+"b}"
   s1=f.format(val)
   if debug : print(s1)
   lst=list(s1)
   i1=0
   i2=len(lst)-1
   while i1 < i2: # 交換の繰り返し
      t=lst[i1]
      lst[i1]=lst[i2]
      lst[i2]=t
      i1+=2
      i2-=2
   s2="".join(lst)
   if debug : print(s2, end="\n\n")
   return int(s2,2) # 2進文字列を数値

左列のPWBのビットで、奇数ビットの半分を、対応上位ビットと交換して、可能限り1が連続しないようにしたのが中央列のPDMデータです。
0000000000000000 0000000000000000
0000000000000001 1000000000000000
0000000000000011 1000000000000010
0000000000000111 1010000000000010
0000000000001111 1010000000001010
0000000000011111 1010100000001010
0000000000111111 1010100000101010
0000000001111111 1010101000101010
0000000011111111 1010101010101010
0000000111111111 1010101110101010
0000001111111111 1010101111101010
0000011111111111 1010111111101010
0000111111111111 1010111111111010
0001111111111111 1011111111111010
0011111111111111 1011111111111110
0111111111111111 1111111111111110
1111111111111111 1111111111111111

以上の変更を行ったval2pulse.py のモジュールを示します。(  の部分が密度変調変換に対する追加コードです。)
# val2pulse.py の名前のモジュール pulse_modulation関数の定義 val の引数に対して、そのパルス変調用のデータを返す関数

convTbl=None # 値を、パルス変調のビットパターンに変換する時に用いるテーブル

import math
def amplify_non_linear(val, maxval): # 小さい値ほど、大きく増幅する関数
   threshold = 10000 # 閾値(しきいち)
   #val = int((1-math.exp((-val)* 0.00004))*(maxval+threshold))-threshold
   val = int((1-math.exp((-val)* 0.00008))*(maxval+threshold))-threshold
   if val < 0 : val = 0
   return val

def PWM_to_PDM(val, bit_depth, debug=False): # 一つのパルス幅変調用データを、パルス密度変調用データに変換する関数
   f="{:0"+str(bit_depth)+"b}"
   s1=f.format(val)
   if debug : print(s1)
   lst=list(s1)
   i1=0
   i2=len(lst)-1
   while i1 < i2: # 交換の繰り返し
      t=lst[i1]
      lst[i1]=lst[i2]
      lst[i2]=t
      i1+=2
      i2-=2
   s2="".join(lst)
   if debug : print(s2, end="\n\n")
   return int(s2,2) # 2進文字列を数値

# リスト内のパルス幅変調用データを、パルス密度変調用データに変換して、リストを返す。
def PWMlist_to_PDMlist(vals:list, bit_depth, debug=False):
   rtnLst=[]
   for v in vals:
      v= PWM_to_PDM(v, bit_depth, debug)
      rtnLst.append(v)
   return rtnLst

# valの集合の最大がmaxvalとして、(bit_depth+1)の分解能でパルス幅のビットをintで返す。
# つまり、maxvalを(bit_depth+1)分割して、valに対するパルス幅のビットをintで返す。
# ( intで返すが、有効値は(bit_depth+1)のビット幅なので、そのビット列をパックして使う必要がある。)
# 例:bit_depth=7の時、maxvalを8分割して、8bitで0〜255のビット列に変換
# bit_depth=7でmaxvalが80の場合、valが70〜80であれば255になる。
def val_to_pulse(val, maxval ,bit_depth, debug=False): 
   global convTbl
   if convTbl == None:
      convTbl=[2**n-1 for n in range(bit_depth+2)]
      #print(convTbl) # [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535]
      convTbl = PWMlist_to_PDMlist(convTbl, bit_depth, len(convTbl))
   #
   val = amplify_non_linear(val,maxval) # 小さいレベルほど大きくする指数増幅関数 ★★
   i=int(val/maxval*(bit_depth+2))
   i = i if i < (bit_depth+2) else (bit_depth+1)
   binVal=convTbl[i]
   if debug: s="{:6d}==>i={:02}:{:04x}:{:0"+str(bit_depth+1)+"b}";print(s.format(val,i,val,binVal))
   return binVal

pulse_modulation=val_to_pulse

if __name__ == '__main__': # pulse_modulation関数確認用
   for v in range(0, 91): # 8分割で 10〜19なら 0b00000001、80〜90 なら 0b11111111の8ビット幅
      pulse_modulation(v, 90, 8-1, debug=True) 
   convTbl=None
   for v in range(0, 101): # 10分割で 10〜19なら 0b0000000001、90〜100 なら 0b1111111111の10ビット幅
      pulse_modulation(v, 100, 10-1, debug=True) 
   convTbl=None
   for v in range(0, 65536, 1000): 
      pulse_modulation(v, 65535, 48-1, debug=True) 
   #
   import matplotlib.pyplot as plt
   ys=[amplify_non_linear(v, 65535) for v in range(65535)]
   plt.plot(ys)  # 視覚化
   plt.show()
   #
   test=[0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535]
   PWMlist_to_PDMlist(test,16, debug = True)

以上の変更を施しました。聞いた限りでは、少し雑音が減ったように感じますが、それほど改善されませんでした。

実験その7 ドレミファソラシドの録音ファイルで試す。

上記で、音の品質の向上検討を施しましたが、明確な改善がなされませんでした。
最も効果があると思われるのは、スイッチング周期を短くして、分解能を上げることです。
ですが前述(コールバックを使わないスイッチングに専念したC言語switching関数)では、 この周期を1μ秒でにすると間延びして、2μ秒で無理やり許せるかもという状況で試しました。

分解能は、データ生成の分解能を5ビットから6ビットにしてみました。(2μ秒に間に合わないデータは無視する手法にして見ました。)
それは、generate_PM.py のBIT_DEPTH=64にします。(32から64に変更)
なお、スイッチング周期はPERIOD_US=2の2μ秒のままです。
そして、シンセサイザで出したドレミファソラシドの録音ファイルを、次のように指定します。
WAV_FILE_PATH="doremi.wav"

以上でgenerate_PM.pyを実行し、出来上った"data.bin.hex"をCのソースと同じ位置に置いてcmakeして、 出来たバイナリファイルをPicoにコピーして鳴らしてみました。
この動作ムービーを紹介したXへのリンクを下記イメージに施しています。


聴いて分かるように、使える品質では鳴りませんでした。
スイッチング2μ秒で64段階(2μ×64=128μ秒でデジタルからアナログに変換する)処理なので、 その程度の音となるのでしょう。

これ以上の音を作るには、スイッチング周期を数10分の1に小さくするしか方法は無いと思います。
Picoにはそれに対して、オーバサンプリング機能と補間器(インターポレータ)のハードウェアを持っており、 それを駆使するしないと思われます。

実験その8 pythonで音質を変更して、再生する。(情報量を少なくして再生)

前述のPicoのパルス変調による音は2μ秒のスイッチングが限界のため、16bitデータを実質的に6ビット分の解能にして(情報量を少なくして)実現しています。
(22.68μ秒のサンプリング周期に収まらないのデータをの無視も生じています。)

このような品質低下の音を、実際にPicoに転送しなくても、予測して鳴らすpythonのプログラムを作って見ました。。
これがあれば、実際にPicoに転送しなくても、聞こえるはずの音を予め予測できるのではないか?ということです。
(実際に、この音を聴いて許せるギリギリの音質でデータを作れば、その分だけメモリを少なくできるはず。という思惑もあります。)

下記Xの動画へのリンクの音は、22.68μ秒のサンプリング周波数で16ビット分解能の音を、5ビットの分解能(64段階)と情報量を少なくして出した音です。
上記再生音を鳴らすpythonコードは、2つのソースファイルで構成されています。
一つは、前述で示したgenerate_PM.pyを変更した次のコードです。
# generate_PM.py 『wavファイルからパルス変調用ファイルを作成する』
import wave
# 参考https://docs.python.org/ja/3/library/wave.html
import numpy as np
import matplotlib.pyplot as plt

BIT_DEPTH=16 # パルス変調に使うビット数(段階数が16の時、分解能4はとなる)
PERIOD_US=2.2675 # Pulse modulation用のスイッチング周期 

#WAV_FILE_PATH="はいわかりました.wav" # 変換対象のこの音声が記憶されるサウンドファイル
WAV_FILE_PATH="doremi.wav"

def getframedatas_by_wav(wav_file_path:str): # wavファイルからフレームレートと、16bitPCMバイナリーを取得
   print(f"{wav_file_path}サウンドファイルから、再生用のバイト列を取得")
   wavefile = wave.open(wav_file_path, "r")
   framerate = wavefile.getframerate() # フレームレート(1秒間のデータ出力数)
   print(f"フレームレート:{framerate}Hz、サンプリング周期:{1/framerate*1e6:6.2f}u秒") 
   nchannel=wavefile.getnchannels()
   print("チャンネル数:", nchannel)
   sampwidth=wavefile.getsampwidth()
   print("サンプル幅数:", sampwidth)
   if sampwidth != 2:
      print(f"サンプル幅数が2(PCM 16bit)以外に対応していません")
      exit()
   nframes = wavefile.getnframes() # 全フレーム内データ数
   print(f"フレームの数:{nframes}, 時間:{nframes/framerate}秒") 
   buffer = wavefile.readframes(nframes) # 全フレームを読み取る
   wavefile.close() # ファイルを閉じる 
   if nchannel == 2: # 2チャンネルであれば、左チャンネルだけ抽出
      ba=bytearray()
      for i,c in enumerate(list(buffer)):
         if i%4==0: ba.append(c)# 左チャンネル抽出(0,1)、右なら(3,4)
         if i%4==1: ba.append(c)
      buffer = bytes(ba)
   return framerate, buffer

framerate, buffer=getframedatas_by_wav(WAV_FILE_PATH) # wavファイルからフレームレートと、16bitPCMバイナリーを取得

print(f"オリジナルのサウンドの{len(buffer)/2/framerate} 秒を再生する。")
import pyaudio # サウンド再生用
audio = pyaudio.PyAudio()
format=audio.get_format_from_width(width=2) # ストリームを読み書きするときのデータ型
stream = audio.open(format=format,channels=1,rate=framerate,output=True)
stream.write(buffer)  # オリジナルのサウンドの音を確認

print(f"サウンドデータ(16bitPCMバイナリー)からpulse_modulationで使う値(符号なし16bitのnumpy配列)に変換")
int16_np=np.frombuffer(buffer, dtype="int16")
uint16_np=int16_np+(2<<14) # int16をunsigned int 16へ
plt.plot(uint16_np)  # オリジナルのサウンド(uint16)の視覚化
plt.show() 

# from val2pulse import pulse_modulation # パルスデータに変換関数
from val2pulseB import pulse_modulation, play_with # パルスデータに変換関数と再生関数

# uint16_npのwavデータ(符号なし16bitのnumpy配列)を、(PERIOD_US*BIT_DEPTH)周期のPM変換対象データリスト(data_list)に変換
data_list=[] # (PERIOD_US*BIT_DEPTH)周期のリスト
maxval=max(uint16_np)
print(f"最大値:{maxval}、ビット幅:{BIT_DEPTH}")
start_time = 0 # スタート時の現在時間
next_do_time = 0 # 次のスイッチングタイミング
idx_wav=0 # 
while idx_wav < uint16_np.shape[0]:
   val = uint16_np[idx_wav]
   idx_wav+=1
   start_time+=1/framerate*1e6 # wavのサンプリング周期加算
   if idx_wav <= 50: print(f"{start_time} >= {next_do_time} {start_time >= next_do_time}")
   while start_time >= next_do_time:
      if idx_wav <= 50: print(f"next_do_time: {next_do_time}")
      next_do_time+=(PERIOD_US*BIT_DEPTH) # 次のスイッチングタイミング
      val_PM= pulse_modulation(val, maxval ,BIT_DEPTH-1) # ★★パルスデータに変換★★
      data_list.append(val_PM) # PMに使うリストに一時記憶

print(f"変換後のデータ数:{len(data_list)}、", end="==================")
print(f"{len(data_list)*BIT_DEPTH*PERIOD_US*1e-6} 秒")

plt.plot(data_list)  # (PERIOD_US*BIT_DEPTH)周期のPM変換対象データリストの視覚確認
plt.show()

# data_list (PERIOD_US*BIT_DEPTH)周期のリストからバイナリ列を生成するクラス
class ListToBytes:
   def __init__(self, data_list: list, bit_depth:int ):
      self.bit32=0        # bit設定の作業用変数
      self.bitCount=0     # 上記への記憶bit数。 8bit毎に変換処理
      self.bitSize=0      # データのビットサイズ
      self.bit_depth=bit_depth # 変換するビット長
      self.byte_buf = bytearray()
      for value in data_list: # 記憶対象のデータ群
         self.setdata(value,bit_depth) # valueを6bitで記憶
      self.padding()
   #
   def setdata(self, data, bitSize): # dataをbyte列に変換 ビット列構築用で使う。
      '''bitsizeのビット数で、dataを記憶 1byte分に詰められたタイミングで byte_bufに追加'''
      bitmask = (1<<bitSize)-1
      if data > bitmask : raise Exception(f"{data} does not fit in {bitSize} bit")
      self.bit32 |= data << self.bitCount
      self.bitCount += bitSize
      #print(f"{self.bit32:032b}")
      while self.bitCount >= 8:
         self.byte_buf.append(self.bit32 & 0x0ff)
         self.bit32 >>= 8
         self.bitCount-=8
   #
   def padding(self): # ビット列構築用で使う
      ''' bit_sizeサイズが、丁度byteに達するように0で埋める'''
      if self.bitCount != 0:
         self.setdata(0, 8-self.bitCount) # bit列をbyte列に変換
   #
   def debug_string(self):# 下位ビットからビット列を並べた文字列を取得
      s=""
      for v in self.byte_buf:s+=''.join(list(reversed(f"{v:08b}")))
      return s

pm_bin=bytes(ListToBytes(data_list,BIT_DEPTH).byte_buf) # data_listからPulse modulation用バイナリをpm_binに得る

print(f"data:{len(pm_bin)}byte*{PERIOD_US}ナノ周期*8bit={len(pm_bin)*PERIOD_US*8/1e6}秒")

with open("data.bin", "wb") as f: # Pulse modulation用のバイナリデータを書き込み
   f.write(pm_bin)

import base64
with open("data.bin.txt", "wb") as f: # Pulse modulation用のbase64データをBase64書き込み
   f.write(base64.b64encode(pm_bin)) # このファイルは、picoのThonny環境にデータ入れる場合に使う

with open("data.bin.hex", "w") as f: # C言語配列用パルス変調のデータを書き込み
    f.write("{\n")
    for n,v in enumerate(pm_bin): # (249600バイト以下にしないとリンクエラーの可能性あり)
        if n > 0 and n % 10 == 0 : f.write("\n")
        s=f" '\\x{v:02X}',"
        # print(f"{n}:{s}:{v:08b}")
        f.write(s)
    f.write("};\n")

print(f"オリジナルサウンドのuint16要素数:{len(uint16_np)} ==>パルス変調したbyte数:{len(pm_bin)}")

play_with(stream, framerate, data_list, BIT_DEPTH, PERIOD_US) # 確認再生

stream.stop_stream()
stream.close()
変更箇所は  の色の箇所です。
つまり、val2pulse モジュールをval2pulseBに変えて、それで作られたplay_with関数で音を鳴らしています。
このval2pulseB.pyは、次の内容です。
import pyaudio # サウンド再生用
import numpy as np
import matplotlib.pyplot as plt

# maxval ,bit_depthに応じて、valの情報量を減らした値を返す
def val_by_bit_depth(val, maxval ,bit_depth, debug=False):
   convTbl=[2**n-1 for n in range(bit_depth+2)]
   i=int(val/maxval*(bit_depth+2))
   i = i if i < (bit_depth+2) else (bit_depth+1)
   binVal=convTbl[i]
   if debug: s="{:6d}==>i={:02}:{:04x}:{:0"+str(bit_depth+1)+"b}";print(s.format(val,i,val,binVal))
   return i

pulse_modulation=val_by_bit_depth # valの情報量を減らした値を返す処理に、pulse_modulation関数を変更

def play_with(stream:pyaudio.Stream, framerate:int, data_list: list, BIT_DEPTH:int, PERIOD_US:float):
   print(f"data_listの予想されるサウンドデータをサウンド再生で確かめる。---")
   conf_list=[]
   timing=1/framerate # wavのサンプリング周期
   for n, v in enumerate(data_list):# BIT_DEPTHのビット数に変換されたリスト(パルス変調直前のデータ)
      v2 = int(v/BIT_DEPTH * 65535)
      while ( (n+1) * PERIOD_US*BIT_DEPTH * 1e-6) > timing:
         conf_list.append(v2)
         timing+=1/framerate # wavのサンプリング周期加算
   uint16_np=np.array(conf_list)
   print(f"data_list要素数:{len(data_list)}, 生成したconf_list要素数:{len(conf_list)} オリジナル要素数:{uint16_np.shape[0]}")
   int16_np=uint16_np-(2<<14) # uint16をint16に戻す
   #plt.plot(int16_np)  # (int16)の視覚化
   #plt.show() 
   int16_np=int16_np.astype(np.int16)
   plt.plot(int16_np)  # (uint16)の視覚化
   plt.show() 

   buffer = int16_np.tobytes()
   print(f"buffer size:{len(buffer)}")
   stream.write(buffer)  # ストリームへの書き込みで音が出力される。

val_by_bit_depth関数、情報量を減らす処理なので、以前のようなパルス変調のビットパターンではなく、 PCM16ビットをbit_depthのビット数で表現した小さいデータに変換しています。
そして、その音を再生するplay_with関数を定義しています。
どのように情報量が減ったかのグラフ表示もしています。上がオリジナルの音で、下が情報量を減らしたイメージを下記に示します。

(この動作ムービーを紹介したXへのリンクが上記イメージに施しています。)

垂直の分解能が16ビットから4ビットに減っていますが、垂直の分解能も同じ大きさのレベルが16個並ぶので、1/16に情報量が減っています。