この解説は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 プロパティ 0x1A03. FM_HICUT_RELEASE_RATE 概要
FM_HICUT_RELEASE_RATE
ハイカット機能による遷移周波数の変化率を設定します。
次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このプロパティは、POWERUPモードでのみ設定または読み出しが可能です。
デフォルト値は20(約3.3秒)です。
RELEASE[15:0] = 65536 / time (timeはミリ秒単位の希望する遷移時間)
対応デバイス: Si4704/05-D50以降、Si4706-D50、Si4730/31/34/35-D50以降、Si4732
デフォルト値: 0x0014
範囲: 0(無効)、1~32767
注: FW2.Bではプロパティ0x180Fでした。
ハイカット機能による遷移周波数の変化率を設定します。
次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このプロパティは、POWERUPモードでのみ設定または読み出しが可能です。
デフォルト値は20(約3.3秒)です。
RELEASE[15:0] = 65536 / time (timeはミリ秒単位の希望する遷移時間)
対応デバイス: Si4704/05-D50以降、Si4706-D50、Si4730/31/34/35-D50以降、Si4732
デフォルト値: 0x0014
範囲: 0(無効)、1~32767
注: FW2.Bではプロパティ0x180Fでした。
2 プロパティ
2.1 プロパティリスト
| Bit | 上位バイト PROPH | 下位バイト PROPL | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | RELEASE | |||||||||||||||
| Bit | Name | Function |
|---|---|---|
| 15:0 | RELEASE |
2.2 プロパティ
本プロパティは、FM受信中に電波状況(SNR)が改善した際、籠(こも)った状態のハイカット(Hi-Cut)フィルターを「どれくらいの遅さ(時間設定)」で
元のクリアな高音域へ復帰させるか(リリースレート)を指定するものです。
前回の 0x1A02 (FM_HICUT_ATTACK_RATE) がノイズ発生時に一瞬で高音をカットする「遮断の速さ」であるのに対し、 この 0x1A03 は安全圏に戻った後に高音域をじわじわと広げていく「復帰の余韻時間」を制御します。
前回の 0x1A02 (FM_HICUT_ATTACK_RATE) がノイズ発生時に一瞬で高音をカットする「遮断の速さ」であるのに対し、 この 0x1A03 は安全圏に戻った後に高音域をじわじわと広げていく「復帰の余韻時間」を制御します。
2.2.1 RELEASE (Rate at which hi-cut rises the transition frequency)
目的と概要:
電波状態が回復した際の、カットオフ周波数を引き上げるリリースレートを設定します。
設定範囲は 0(無効)または 1〜32767 で、デフォルト値は 20(0x0014、時間換算で約3276.8ms=約3.2秒)です。
チップ内部の時定数は以下の計算式で決定されます
RELEASE = 65536 / 希望する遷移時間(ms)
値が大きいほど復帰速度が「速く(クリアな音にすぐ戻る)」なり、値が小さいほど「遅く(じっくりクリアな音に戻る)」なります。
AN332に明記されない目的と解説:
設定範囲は 0(無効)または 1〜32767 で、デフォルト値は 20(0x0014、時間換算で約3276.8ms=約3.2秒)です。
チップ内部の時定数は以下の計算式で決定されます
RELEASE = 65536 / 希望する遷移時間(ms)
値が大きいほど復帰速度が「速く(クリアな音にすぐ戻る)」なり、値が小さいほど「遅く(じっくりクリアな音に戻る)」なります。
公式ガイド AN332 のデフォルト値(20 = 約3.2秒)からも分かる通り、ハイカットのリリースはアタック(デフォルト約3.3ms)に比べて圧倒的に遅く設定されることが大前提となっています。
このオーディオ工学的・心理音響学的な真の目的は、「音質のパタつき(フリッカー現象)を徹底的に排除し、電波の微小なフラつきを人間の耳に気づかせないこと」にあります。
FMの電波は、周囲の環境やわずかなアンテナの揺れによってSNRが数dB程度絶えず上下しています。
もしリリース速度をアタック並みに高速にしてしまうと、SNRが一瞬良くなるたびに「シャキーン」と高音が明るくなり、次の瞬間にまた「モゴモゴ」と籠る、 という「音が激しくパタパタと変化する非常に耳障りな現象」が発生します。
本パラメータをあえて約3.2秒という長い時間に設定しておくことで、一時的にSNRが回復してもDSPは籠った状態を一定時間キープ(ホールド)します。
これにより、完全にノイズ環境を抜けたと判断できるまで音質を安定させ、リスナーにストレスを感じさせない「聴き疲れしない上品なサウンド」を作り出すことができます。
このオーディオ工学的・心理音響学的な真の目的は、「音質のパタつき(フリッカー現象)を徹底的に排除し、電波の微小なフラつきを人間の耳に気づかせないこと」にあります。
FMの電波は、周囲の環境やわずかなアンテナの揺れによってSNRが数dB程度絶えず上下しています。
もしリリース速度をアタック並みに高速にしてしまうと、SNRが一瞬良くなるたびに「シャキーン」と高音が明るくなり、次の瞬間にまた「モゴモゴ」と籠る、 という「音が激しくパタパタと変化する非常に耳障りな現象」が発生します。
本パラメータをあえて約3.2秒という長い時間に設定しておくことで、一時的にSNRが回復してもDSPは籠った状態を一定時間キープ(ホールド)します。
これにより、完全にノイズ環境を抜けたと判断できるまで音質を安定させ、リスナーにストレスを感じさせない「聴き疲れしない上品なサウンド」を作り出すことができます。
3 応答パラメータ
STATUS (Status Byte)
CTS (Clear to Send):
ERR (Error):
1 になると、チップが前のコマンドの処理を完了し、次のコマンドを受け入れられる状態であることを示します。
ERR (Error):
1 の場合、直前に送ったコマンドやプロパティの引数が不正(範囲外など)であったことを示します。
4 その他(Google AI (Gemini) の見解)
4.1 コマンドの重要ステップと注意事項
16ビット値の分割送信手順
古いファームウェアにおける互換性ID
本プロパティは他の閾値(8ビット)と異なり、2バイト(16ビット)構成です。
SET_PROPERTY コマンドを送信する際は、プロパティID(0x1A03)に続いて、設定値の上位バイト(ARG3)、下位バイト(ARG4)の順で正確に分割して送信する必要があります。
SET_PROPERTY コマンドを送信する際は、プロパティID(0x1A03)に続いて、設定値の上位バイト(ARG3)、下位バイト(ARG4)の順で正確に分割して送信する必要があります。
古いファームウェアにおける互換性ID
[AN332]の注記にある通り、初期のファームウェア(FW2.B等)ではこのプロパティIDが 0x180F でした。
hobbylab.jp が現在使用されている Si4735-D60 や Si4732-A10 等の現行チップでは 0x1A03 に統一されていますが、古い海外のオープンソースコードを参考にする場合は見落としやすいポイントです。
hobbylab.jp が現在使用されている Si4735-D60 や Si4732-A10 等の現行チップでは 0x1A03 に統一されていますが、古い海外のオープンソースコードを参考にする場合は見落としやすいポイントです。
4.2 もう少し踏み込んだ応用展開
マルチパス系リリース(0x180B)との「時間軸の同期(シンクロ)」
0設定(時定数ホールド)による「強制イコライザ固定」
Si4735には、マルチパスによってモノラル化した音をステレオに戻す 0x180B (FM_BLEND_MULTIPATH_RELEASE_RATE) が存在し、
こちらもデフォルトは約3.2秒(値: 20)です。この「音場が広がる時間軸(マルチパス解除)」と「高音が晴れる時間軸(ハイカット解除:0x1A03)」を意図的にシンクロ、
またはハイカット側をわずかに遅く(例: 値を 10=約6.5秒に)設定することで、トンネルやビル影を抜けたあとに「まずステレオ感が戻り、
そのあとに最高音域がじわっと開放される」という、高級カーオーディオさながらの芸術的な音質グラデーションを演出できます。
0設定(時定数ホールド)による「強制イコライザ固定」
本プロパティに 0 を設定すると、内部DSPのハイカットリリース特性の計算がストップします。
これを利用し、SNRが極端に悪いエリアで一度完全に音が籠ったタイミングを見計らって 0 を書き込むことで、 その後電波が多少良くなっても「あえて高域をカットしたまま(籠ったまま)にしてノイズを一切出さない」という、ソフトウェア側での強制ホールド制御が可能です。
これを利用し、SNRが極端に悪いエリアで一度完全に音が籠ったタイミングを見計らって 0 を書き込むことで、 その後電波が多少良くなっても「あえて高域をカットしたまま(籠ったまま)にしてノイズを一切出さない」という、ソフトウェア側での強制ホールド制御が可能です。
4.3 デバッグ時のチェックリスト
エンディアン(バイト順)の確認:
アタックレート(0x1A02)との連続設定時のCTS確認:
GET_PROPERTYによる値の検証:
I2Cで送信する際、RELEASE の「上位バイト」→「下位バイト」の順で正しく送れているか(逆になると、例えば 20 (0x0014) が 5120 (0x1400=約12.8msの超高速復帰) に化けてしまい、音が激しくパタつきます)。
アタックレート(0x1A02)との連続設定時のCTS確認:
通常、0x1A02(ATTACK)を設定した直後に 0x1A03(RELEASE)を設定するため、その間で確実に CTS==1 をポーリングしてチップの処理完了を待っているか。
GET_PROPERTYによる値の検証:
音質の戻り方が不自然に早い、または遅すぎる直感がある場合、GET_PROPERTY を投げて意図した16ビット値が正しくチップに保持されているかをログで確認したか。
4.4 まとめ
0x1A03 (FM_HICUT_RELEASE_RATE) は、ハイカットノイズリダクションにおける「大人の落ち着き」を演出するための最重要プロパティです。
ノイズから「電光石火(高速アタック)」で逃げる機能がどれだけ優秀でも、この戻る側のリリースが雑(高速すぎ)だと、ラジオ全体の聴き心地は一気に安っぽくなってしまいます。
hobbylab.jp の自作ラジオ基板において、この約3.2秒という絶妙な余韻のデフォルト値をベースに、実走・実聴テストを重ねて「一番耳が疲れない、心地よい復帰スピード」を追い込んでみてください。
ノイズから「電光石火(高速アタック)」で逃げる機能がどれだけ優秀でも、この戻る側のリリースが雑(高速すぎ)だと、ラジオ全体の聴き心地は一気に安っぽくなってしまいます。
hobbylab.jp の自作ラジオ基板において、この約3.2秒という絶妙な余韻のデフォルト値をベースに、実走・実聴テストを重ねて「一番耳が疲れない、心地よい復帰スピード」を追い込んでみてください。
