伊豆

下田と河津へ行ってきました。
下田は黒船が停留していた場所を見てみたかったためです。私のイメージでは太平洋の中でしたが、実際は湾の中だったみたいです。

河津は雨でした。5年位前に行った時は感動しましたが、大したことはなくなっていました。2度目のせいか?雨のせいか?河津が人気に溺れて研鑽をさぼったか?ですが、多分全てでしょう。

USBワンセグチューナ

今日は尺八で東京へ行ったついでに秋葉原の秋葉王でUSBワンセグチューナを購入。帰宅してインストールしようとすると、インストール予定のノートパソコンにCDがなくて直接インストールできない。
ダメ元でインストールCDをUSBメモリーにコピーしてインストールしたらうまくいった。
USBワンセグチューナーは390円でした。これで実家でもmyテレビが見られるようになったことになる。そもそもテレビが好きじゃないのでこれで十分。

耳栓

夜寝ている時、音に敏感になって目が覚めることがあるので、耳栓を買ってきました。

低反発スポンジのようなやつで、先端をつぶして細くして耳のトンネルに入れると、少しずつ太くなって耳トンネルをふさぎます。

効果は絶大ですが、耳栓をした方の耳を下にして寝ると耳が痛い感じがします。そこで、耳のトンネルをふさぐのではなく、トンネルの前にある凹んだ空間に置いていくだけでも効果があることが分かりました。

プールで頭を水につけてゆっくり平泳ぎをすると気持ちがスーッと落ち着くのとよく似た感じです。耳栓など無くてよければ、それに越したことはないんですが。

ワンセグチューナ

最近、実家へ泊まり込む機会が増えたので、パソコンでテレビが見られといいなと思い、USBに差すワンセグチューナを買おうと大型家電店へ行く。ところが、どこの店にもワンセグチューナが無い。

何軒見てもないので、ついに店員さんに聞くと、「そう言えば昔ありましたね、でも最近はニーズがなくメーカーも作ってないんですよ」、とのこと。
何でニーズが無いのかな?テレビを見られるスマホがあるからかな?ネットでは売ってるみたいなので、そちらで買おうと思います。

アナログ

詩吟の吟譜から五線譜への変換が一意に決まらない部分があり、先生の模範吟で補完をしようと思いました。
そこで、先生の吟をpythonで信号処理をして音の高さを出そうとしましたが肝心の所がイマイチうまくいきません。
具体的には、先生の吟にバンドパスフィルターをかけてwevetoneというソフトで鍵盤に対応付けしました。

ディジタル信号処理がうまいかないので、チューナーを持ってきて模範吟の重要な所を測定てみると、何とか反応して(音の高さを)見ることができました。詩吟はノロノロ吟じるので、アナログチューナーで測定可能でした。

なーんだ、pythonの勉強しちゃったよ!って感じでした。

サンプリング

最近、政府の統計不正問題が騒がれています。

(政府の不誠実な対応と態度を評価するものではありませんが)

ディジタル信号処理ではサンプリングを取るのが基本です。(意図的にサンプリングするのはダメですが)ナイキスト周波数さえ押さえておけば(人手不足の折)サンプリング調査でもよいのかなと思います。

学生時代、私は国の調査統計の集計のアルバイトをやっていました。その時思ったことは、各社から出されるデータに時々(100に1つか2つだったと思う)桁違いの数値が入っていたりしました。会社の担当者が質問の意味を誤解しているのか、単位を2桁位間違っているんじゃないかな、なんて思いましたが追跡調査をせず、提出されたデータをそのまま入力していました。これで大丈夫かな?なんて思いながら。

色々

このところ、色々面倒なことがあり、月火水と実家に行ってきました。

実家にはノートパソコンを持ち込み、少しpythonプログラミングを楽しみました。具体的には詩吟の先生の模範吟から先生の伴奏だけを取り出すプログラムを作りました。

実家にはネットにつなぐ環境がないため、3日間投稿できませんでした。

 

 

firフィルター

一昨日の「いたずら」の「ローパスフィルター」を確認するプログラムを作ってみた。

==

import numpy as np
import matplotlib.pyplot as plt
import scipy.signal
def main():
# データのパラメータ
N = 500            # サンプル数
dt = 0.002          # サンプリング間隔
f1, f2 = 10, 20    # 周波数
t = np.arange(0, N*dt, dt) # 時間軸
freq = np.linspace(0, 1.0/dt, N) # 周波数軸
    # 信号を生成(周波数10の正弦波+周波数20の正弦波+ランダムノイズ)
#    f = np.sin(2*np.pi*f1*t) + np.sin(2*np.pi*f2*t) + 0.3 * np.random.randn(N)
o= np.random.rand(N)
fs = N #サンプリング周波数
nyq = fs / 2.0  #ナイキスト周波数
# フィルタの設計
f1 = 50.0 / nyq      #カットオフ周波数1
f2 = 70.0 / nyq      #カットオフ周波数2
numtaps = 127       #フィルタ係数の数(奇数)
    #b = scipy.signal.firwin(numtaps, f1)  #ローパス
#b = scipy.signal.firwin(numtaps, f2, pass_zero=False)        # ハイパス
b = scipy.signal.firwin(numtaps, [f1, f2], pass_zero=False) # バンドパスf = scipy.signal.lfilter(b, 1, o)

# 高速フーリエ変換
F = np.fft.fft(f)

    # 振幅スペクトルを計算
Amp = np.abs(F)
    # グラフ表示
plt.figure()
plt.rcParams['font.family'] = ‘Times New Roman’
plt.rcParams['font.size'] = 17
plt.subplot(121)
plt.plot(t, f, label=’f(n)’)
plt.xlabel(“”, fontsize=5)
plt.ylabel(“”, fontsize=5)
plt.grid()
leg = plt.legend(loc=1, fontsize=12)
leg.get_frame().set_alpha(1)
plt.subplot(122)
plt.plot(freq, Amp, label=’|F(k)|’)
plt.xlabel(”, fontsize=20)
plt.ylabel(”, fontsize=20)
plt.grid()
leg = plt.legend(loc=1, fontsize=12)
leg.get_frame().set_alpha(1)
plt.show()
if __name__ == “__main__”:
main()

 

70の手習い

Pythonを使ってみる。
やってみたこと。
wav(音声)ファイルを読込み、
音声データを少しいたずらし、
別のwavファイルに書出す。
==
import wave
import matplotlib.pyplot as plt
import numpy as np
import struct
from scipy import signal
dt = 0.001          # サンプリング周期 [s]
wf = wave.open(“testkm.wav”, “r”)
#音声バイナリーデータの読み込み
datab= wf.readframes(wf.getnframes())
wf.close()
#バイナリを整数(-32768~32767)に変換
datai = np.frombuffer(datab, dtype=”int16″)
#整数を実数(-1~+1)に変換
dataf = frombuffer(datai, dtype=”int16″) / 32768.0
plt.plot(datai)
plt.show()
#ここで音声データを「いたずら」
#datafが元のデータ、y1がいたずら後の(実数-1~+1)データ
#整数にする
odatai= [int(v * 32767.0) for v in y1]
#バイナリにする
odatab = struct.pack(“h” * len(odatai), *odatai)
#修正済データをファイルに出力
w = wave.Wave_write(“ofile.wav”)
w.setparams(wf.getparams())
w.writeframes(odatab)
w.close()
plt.plot(odatai)
plt.show()
==
上記の「いたずら」の例
(1)ボリュームを半分にする
y1= dataf * 0.5
(2)音の前半をクリッピング
y1= dataf
for i in range(0,int(len(dataf)/2)):
if(y1[i]>0.7):
y1[i]= 0.7
if(y1[i]<-0.7):
y1[i]= -0.7
(3)ローパスフィルターをかける
filter1 = signal.firwin(numtaps=21, cutoff=40, fs=1/dt)
y1 = signal.lfilter(filter1, 1, dataf)

Python再開

1月は初日から腹痛、インフル、インフル後遺症(喉、鼻水、咳)のダメージで何もやる気がせず、ダラダラと1か月半過ごしてしまいました。
健康でないと何もやる気がしないんだ、と実感しました。

先週末から少しずつ気力が戻ってきて、詩吟、尺八をやってみる気になりました。昨日は尺八で目白まで行きました。帰り、池袋のジュンク堂で「Pythonによる音声処理」の本を買ってきました。ジュンク堂は7,8階建てですが、お金を払う所は1階にしかありません。よく盗まれないなと思いました。

長いこと放ってあったPythonも再開しました。昨年Anacondaをインストールした段階でストップしていました。
復習:いろんな走らせ方があった。

*プログラムの走らせ方1(Anaconda Prompt上で走らせる)
Anaconda Promptを立ち上げ、Pythonと入力すると>>>が表示され実行可能になる。
>>>3+1
なんて入力すると
4
>>>
と出てくる。

*プログラムの走らせ方2(Jupyter Notebook上で走らせる)
1よりおしゃれ。

*プログラムの走らせ方3(IDLEで実行)
コンパイラ風の実行も可能で便利

*プログラムの走らせ方4(Spyderで実行)
科学用途のプログラミングをすることを意図して作られていて、開発に便利。

Spyderで初めてのプログラム、正弦波を描いてみた。