RIAA カーブ
いまどき RIAA のイコライザを作る人もあまりいないでしょうが、たまに訊かれますのでついでに記録しておきます。
使われなくなった分だけ、情報が無くなって入手難になったのかもしれませんね。
イコライザを設計される方は「 RIAA Equalizer 」のページも参考にしてください。
下の図の赤い線が記録するときのカーブです。 再生するときは青い線で補正してやります。


詳しい表も右に載せておきます。 先ほど計算したできたてのほやほやです。 再生時は符号を逆にして読んでください。
カーブに現れるロールオフとターンオーバの周波数は3つ有りますが、それぞれの時定数は 3.18ms、318us、75us です。 それを計算した後、1kHz で 0dB に補正してあります。
なお、JIS の中にも載っていて、その数値はほぼ正しいのですが、ところどころ計算間違いがありますのでこちらを使うことをお勧めします。
あ、古い話なのでひょっとしたらもうその JIS はなくなっているかもしれませんね。
(追記: JIS S8601, 1994年廃止)
イコライザを作る人にヒントを一つ:
NF にカーブを作る素子を入れた場合ですが、この素子は高い周波数でインピーダンスがずいぶん小さくなります。
出力段はこれをドライブできるだけの電力が必要です。 たとえば、エミッタフォロアでドライブしようとすると、動作させる電流が少ないとドライブできません。 エミッタフォロアはインピーダンスが低いから大丈夫、などと単純に考えていてはいけません。 Z の低い負荷時の最大振幅の大きさに気をつけて。
イコライザー回路の一例を下に示します。
この回路についての解説は RiaaEq.htm に詳しく記述しておきました。

[RIAA カーブを計算したい人のために]
w=2*π*f
RIAA=20*LOG(SQRT(
(1+1/(0.00318*w)^2)
/(1+1/(0.000318*w)^2)
*(1+(0.000075*w)^2)
) )
+0.08898158095803 (dB)
/* RIAA Curve */
call rxfuncadd 'mathloadfuncs','rxmath' /* load math function set */
call mathLoadFuncs
numeric digits 15
outfile="RIAACurve.txt"
/* get normalising value at 1kHz */
comp=0
f=1000
call point
comp=dB
/* loop from 10Hz to 100kHz */
f=10
do i=0 to 40
call point
ff=(f*1000+0.5)%1/1000; dB=(dB*1000+0.5)%1/1000 /* round to the nearest 0.001 */
if ff//1=0 then ff=ff||".000" /* digit alignments */
else if ff*10//1=0 then ff=ff||"00"
else if ff*100//1=0 then ff=ff||"0"
if dB//1=0 then dB=dB||".000"
else if dB*10//1=0 then dB=dB||"00"
else if dB*100//1=0 then dB=dB||"0"
if dB>0 then dB="+"||dB
ff=right(" "||ff,12); dB=right(" "||dB,11) /* cosmetic formatting */
say ff dB
status=lineout(outfile,ff||" "||dB)
f=f*1.258925411795 /* 10 plots btwn one decade */
end
exit
point:
w=2*3.14159265358979*f
dB=20*RxCalcLog10(RxCalcSqrt((1+1/(0.00318*w)**2)/(1+1/(0.000318*w)**2)*(1+(0.000075*w)**2)))+comp
dB=-dB /* reverse it for playback */
return
上のコードは REXX という言語で書いています。 Windows 上で実行するには Regina REXX インタプリタと、数学関数(対数や平方根)用の dll をインストールする必要があります。
