人気ブログランキング | 話題のタグを見る

【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その3】

 図6にGETPRE-1を2つ使ったミキサーの回路の例を示します。
【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その3】_d0010259_21210473.png
 まず、後半のオペアンプを反転増幅に改造します。
 C6の二次側を浮かせて、R8のイマジナリグランド側も浮かせて、空中で接続します。
 R6を半田爆弾でショートします。
 こうすると、後半部が反転増幅機になります。
 
 2ch目は、とりあえず前半部しか使いません。
 ボリュームの中間端子をパターンから浮かせて、浮かせたボリュームの端子が前半部分の出力端子になります。
 
 後半部分の入力端子は、R10とR8とオペアンプのマイナス端子が合わさったところです。
 2ch目を1ch目の後半部分につなぐには、ちょっと回路が必要です。
 2ch目の前半オペアンプの出力端子から解説します。
 オペアンプは4.5Vを仮想グランドとして動いているので、出力信号も当然、中心が4.5Vです。
 ボリュームでレベルを調整するために一旦0Vグランドに合わせる必要があるので、コンデンサC7でDCカットしてます。
 なので、c7の極性は、ボリューム側がマイナスです。
 ボリュームを通過したあと、後半部がまた4.5Vの仮想グランドで動作しているので、もう一度Cx1でDCカットしています。
 Cx1に電荷が溜まってしまうのでそれを抜くためにRx1で電荷抜きをします。
 Cx1の先に加算回路としての抵抗Rx2があります。
  
 後半部の入力インピーダンスは220kΩあるいは、それとRx2の100kΩの並列したものになりますので、前半部の出力インピーダンスはそれより低くないといけません。
 ボリュームは10kΩですので、そんなもんでしょう。
 コンデンサの値は、直列Cと並列Rで形成されてしまうハイパスフィルタのカットオフ周波数で判断します。
 1/(2x3.14xC7 x VR1)を計算すると、15.9Hzなので、ベースに使うには、C7は10μF程度に増やしたほうがいいかもしれません。

 と、このあたりがアナログミキサーの基本です。


# by studio_do | 2020-10-24 21:21 | 音楽 | Comments(0)

【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その2】

 さて、例えばミキサーを作ろうとすると、反転増幅器が必要です。
 オペアンプの特性として、プラスマイナスそれぞれの入力端子は、仮想的にショートされているということをがあります。(イマジナリーショートといいます。)
 非反転増幅器のマイナス入力をよくみてもらうと、出力が抵抗分圧されて帰還されています。
 これにより、プラス入力が仮想的に揺れてしまい、ミキサーとして複数の入力をつなぐとお互いに影響されてしまい、独立して音量をコントロールで着なくなります。
 
【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その2】_d0010259_21084866.png
 図4に反転増幅器の基本回路を示します。
 反転増幅器は、プラス入力がグランドに固定されているので、マイナス側の入力電位が揺れません。
 欠点もありまして、入力インピーダンスがRaの抵抗値になります。
 100kΩ程度ですので、マイクやパッシブピックアップの入力には使えません。
【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その2】_d0010259_21085225.png
 図5に、反転増幅器でミキサーにした回路をしめします。
 加算回路として習います。
 では、3回目の次回はGETPRE-1で作るミキサーの回路を紹介します。



# by studio_do | 2020-10-23 21:09 | 音楽 | Comments(0)

【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その1】

 日本橋にある共立電子のキットで、ギターに内蔵させるためのプリアンプキットがあります。
 単純な汎用オペアンプの小さな基板ですが、ボリュームに基板がくっついたとても使いやすい形をしています。
 これを使うとマイクや電気楽器用のミキサーやエフェクタを簡単に作ることができます。
 自分で回路が設計できるようになるためには、この基板の回路を理解する必要がありますので、解説しましょう。
 
 図1にGETPRE-1の回路図を示します.
【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その1】_d0010259_11291065.png
 添付されているpdfにも回路図は載ってますが、少々分かりにくいです。
 ここでは、ボリュームをはさんでオペアンプが二つ載っていることが分かればOKです。
 前半部と後半部はほぼ同じ回路になっています。
 入力がオペアンプのプラス側に接続されているので、「非反転増幅器」であると分かります。

 図2に非反転増幅器と反転増幅器の基本回路を示します。
【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その1】_d0010259_11291710.png

 オペアンプは、プラス入力とマイナス入力の差分を無限大に増幅する素子です。
 ゲインを制限するために、マイナス側に出力を帰還させます。 これを負帰還といいます。
 出力をそのまま帰還させるとゲインが1.0になります。
 ここでは、抵抗分圧によって1/2を帰還させているので、ゲインは2.0です。
 非反転増幅の特徴は、プラス入力をそのまま入力端子にすることで、入力インピーダンスが高くなることです。
 ここで想定されている入力はエレキギターのピックアップなので、出力インピーダンスは500kΩ程度とかなり高いので非反転入力が適当です。

 図3にキットでの実際の回路の前半部分を示します。
【デジットオリジナル ギタープリアンプキットGETPRE-1をしゃぶりつくす その1】_d0010259_11292119.png
 部品番号はキットの回路図と合わせてあります。
 理想オペアンプは、プラスマイナスの両電源で動作しているので、ゼロボルトを中心とする音声信号を処理できますが、コンパクトエフェクタに9ボルト電池を二つも搭載したりdc/dcコンバータを搭載するのは「めんどくさい」ので9ボルト電池一つで動かします。
 このままですと、マイナス側の信号が処理できませんので、中間の4.5ボルトを仮想グランドとするのが、R1,R2です。
 C5,C7のコンデンサでDCカットして外界のゼロボルト中心と接続しています。
 このカップリングコンデンサに溜まってしまった電荷を逃すためにR3,R5があります。
 R3,R5を並列にした500kΩがこの回路の入力インピーダンスです。
 これは、エレキギターの出力インピーダンスが200k〜500kΩ程度なのに合わせてあります.
 また、R5,C5でハイパスフィルタを形成してしまいます。 
 そのカットオフ周波数は、1/(2πCR)ですので、この場合は1.6Hz程度です。


# by studio_do | 2020-10-23 11:31 | 音楽 | Comments(0)

python2.7 プログラミング作法

python プログラミング作法
 リストなど変数に代入するのは、参照のコピーでしかない。
 これは、関数、メソッドの呼び出しで引数を渡すのも同じこと。
 渡したつもりで、参照がコピーされただけなので、メソッドの中で引数が変化すれば参照元も変化して見える。
 これを知らなければ、
>>> a=[1,2,3]
>>> b=a
>>> b
[1, 2, 3]
>>> b[1]=11
>>> a
[1, 11, 3]
>>> b
[1, 11, 3]
>>>

 という、不可解な現象に悩むことになる。
 これは、bには、aから[1,2,3]への参照と同じ参照が渡されるだけだからだ。
 これだけ見ると、どうしてこうゆう仕様になっているのか不思議だが、メソッドの引数渡しでもこの動きはあって、
def func_a(rec):

rec[1]=22

a=[1,2,3]
print a
func_a(a)
print a

ーーーー
[1, 2, 3]
[1, 22, 3]

 からわかるとおり、メソッドの受け取った引数recはローカル変数かと思いきや、参照しか渡されていないので、メソッドの中で引数を変更すると、メインルーチン側でも変数が変化していることがわかる。

 そうすると、メソッドと上位ルーチン間での引数、リターン値のやり取り方法にいくつか方法が考えられる。
import time

def func_a(rec):

rec[1]=rec[1]+1
return rec

def func_b(rec):
rec2 = rec[:]
rec2[1]=rec2[1]+1
return rec2

def func_c(rec):

rec[1]=rec[1]+1

def func_d():

rec[1]=rec[1]+1

# way 1
start = time.time()
a=[1,2,3]
for i in range (int(1e6)):
r=func_a(a)
r1=func_a(r)
r2=func_a(r1)
print r2
stop = time.time()
elapsed= (stop - start) * 1e3
print ("elapsed_time:{0}".format(elapsed) + "[ms]")

# way 2
start = time.time()
a=[1,2,3]
for i in range (int(1e6)):
r2=func_a(func_a(func_a(a)))
print r2
stop = time.time()
elapsed= (stop - start) * 1e3
print ("elapsed_time:{0}".format(elapsed) + "[ms]")

# way 2-1
start = time.time()
a=[1,2,3]
for i in range (int(1e6)):
r2=func_b(func_b(func_b(a)))
a=r2
print r2
stop = time.time()
elapsed= (stop - start) * 1e3
print ("elapsed_time:{0}".format(elapsed) + "[ms]")

# way 3
start = time.time()
a=[1,2,3]
for i in range (int(1e6)):
func_c(a)
func_c(a)
func_c(a)

print a
stop = time.time()
elapsed= (stop - start) * 1e3
print ("elapsed_time:{0}".format(elapsed) + "[ms]")

# way 4
start = time.time()
rec=[1,2,3]
for i in range (int(1e6)):
func_d()
func_d()
func_d()

print rec
stop = time.time()
elapsed= (stop - start) * 1e3
print ("elapsed_time:{0}".format(elapsed) + "[ms]")



結果
[1, 3000002, 3]
elapsed_time:1574.20301437[ms]
[1, 3000002, 3]
elapsed_time:1273.03004265[ms]
[1, 3000002, 3]
elapsed_time:2094.46501732[ms]
[1, 3000002, 3]
elapsed_time:1342.04602242[ms]
[1, 3000002, 3]
elapsed_time:1299.40485954[ms]

 一番早いのは、way4の、グローバル変数をメソッドの中でそのまま変更する方法。
 だがこれは何やってるのかソースの可読性が悪い。
 一番遅いのは、way2-1のループの中に代入がある方法。
 普通は、way1の、引数とリターンを使う方法。

 以上で分かるように、出来るだけ、値のコピーをしないほうが速度が向上する。
 
 pythonの解析サイトで、「代入が参照なので、気をつけるように」というのはよく解説されていることだが、どうしてそうなっているのかの理由まで言及しているところが見当たらない。
 現象としては、「代入文の右辺が左辺に影響される」という現象がよく言われるのだが、実はこれは副作用ではないかと思う。
 やりたかったのは、メソッドへの引数をコピーなしに渡したい、ということではなかったかと思う。
 代入文で右辺が左辺に影響されるというのは、バグを誘発する要因でしかないが、メソッドへの引数がコピーなしに渡せるというのは思想だと思う。
 それだけに、その思想は理解しないと、変数のスコープが曖昧だというデメリットばかりが目にについてしまう。
 
 先ほどの実験でも、なるべく値のコピーを発生させないようなコーディングのほうが早いというのが見て取れた。
 引数渡しは、変数がグローバルかローカルかというのより上位の概念のようで、変数名にかかわりなく、参照がコピーされるだけだ。
 
 プログラミング作法としては、メソッドの中の引数は、ローカルではなくグローバルのつもりでアクセスすることが必要だし、必要ない中間の変数をやたらと生成しないようにするほうが良い。
 
 

# by studio_do | 2019-12-31 19:58 | 機械室から | Comments(0)

SAB JAM マンドリン編

2019年11月に逝去された、井上三郎氏が残された教則ビデオのうち、マンドリンの部を一覧にしました。 新しいものから古いものへと並んでいます。
|(52) Moonshiner Jam 201905 15 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of B - YouTube
|(52) Moonshiner Jam 201905 14 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of A - YouTube
|(52) Moonshiner Jam 201905 13 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G 通 - YouTube
|(52) Moonshiner Jam 201905 12 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube
|(52) Moonshiner Jam 201905 11 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube
|(52) Moonshiner Jam 201905 10 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube
|(52) Moonshiner Jam 201905 09 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube
|(52) Moonshiner Jam 201905 08 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of G - YouTube
|(52) Moonshiner Jam 201905 07 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube
|(52) Moonshiner Jam 201905 06 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube
|(52) Moonshiner Jam 201905 05 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube
|(52) Moonshiner Jam 201905 04 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube
|(52) Moonshiner Jam 201905 03 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube
|(52) Moonshiner Jam 201905 02 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) Key of D - YouTube
|(52) Moonshiner Jam 201905 01 How To Play Bluegrass #05 Will the Circle Be Unbroken (Mandolin) ごあいさつ - YouTube

# by studio_do | 2019-11-25 23:32 | 音楽 | Comments(0)