この解説は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 プロパティ 0x1A00. FM_HICUT_SNR_HIGH_THRESHOLD 概要
FM_HICUT_SNR_HIGH_THRESHOLD
ハイカット機能による帯域制限が開始されるSNRレベルを設定します。
次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このプロパティは、POWERUPモードでのみ設定または読み出しが可能です。
デフォルト値は24 dBです。
対応デバイス:Si4704/05-D50以降、Si4706-D50以降、Si4730/31/34/35-D50以降、Si4732
デフォルト値:0x0018
範囲:0~127
注:FW2.Bではプロパティ0x180Cでした。
ハイカット機能による帯域制限が開始されるSNRレベルを設定します。
次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。
このプロパティは、POWERUPモードでのみ設定または読み出しが可能です。
デフォルト値は24 dBです。
対応デバイス:Si4704/05-D50以降、Si4706-D50以降、Si4730/31/34/35-D50以降、Si4732
デフォルト値:0x0018
範囲:0~127
注:FW2.Bではプロパティ0x180Cでした。
2 プロパティ
2.1 プロパティリスト
| Bit | 上位バイト PROPH | 下位バイト PROPL | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | SNR_HIGH | ||||||
| Bit | Name | Function |
|---|---|---|
| 6:0 | SNR_HIGH |
2.2 プロパティ
本プロパティは、FM受信時に信号の品質(SNR:信号対雑音比)が悪化し始めた際、
高音域をカットして不快な「シャー」という高周波ノイズ(ホワイトノイズ)を低減する「ハイカット(Hi-Cut)フィルター」の作動開始閾値を設定するものです。
受信している電波のSNRが、このプロパティで設定した閾値(上限値)を下回った瞬間にハイカット機能が作動(帯域制限を開始)し始めます。
これにより、弱電界やノイズ混入時に聴感上のストレスを大幅に軽減します。
受信している電波のSNRが、このプロパティで設定した閾値(上限値)を下回った瞬間にハイカット機能が作動(帯域制限を開始)し始めます。
これにより、弱電界やノイズ混入時に聴感上のストレスを大幅に軽減します。
2.2.1 SNR_HIGH (SNR level at which hi-cut begins to band limit)
目的と概要:
AN332に明記されない目的と解説:
ハイカットフィルターがオーディオの帯域制限(高音カット)を開始するSNRレベルを 0〜127(dB) の範囲で設定します。
デフォルト値は 24 (0x0018、24 dB)です。電波状況が非常に良く、SNRがこの設定値以上(例:25 dB以上)であればハイカットは一切行われず、 クリアなフルレンジのオーディオが出力されます。
デフォルト値は 24 (0x0018、24 dB)です。電波状況が非常に良く、SNRがこの設定値以上(例:25 dB以上)であればハイカットは一切行われず、 クリアなフルレンジのオーディオが出力されます。
AN332に明記されない目的と解説:
公式プログラミングガイド AN332 には単に「帯域制限を開始するSNR」としかありませんが、オーディオ工学的・DSP制御的な真の目的は、
「人間の聴覚のマスキング効果を利用した、動的なノイズ遮断(ダイナミック・オーディオ・コンディショニング)」にあります。
FM放送のホワイトノイズは主に高音域(数kHz以上)に集中します。
電波が弱くなってSNRが24dB(デフォルト)を下回ると、 リスナーは音楽の後ろで鳴る「シャー」というノイズに気づき始めます。
本プロパティはこの「人間が不快感を抱き始める境界線」を定義します。
本パラメータは、対になる 0x1A01 (FM_HICUT_SNR_LOW_THRESHOLD) と連動し、DSP内部で「フィルターのカットオフ周波数をどこから落とし始めるか」のスタート地点になります。
これがないと、ノイズが急に増えたときに音が突然籠(こも)る、あるいはノイズが鳴りっぱなしになるという両極端な現象が起きます。
これを防ぐため、音質変化を滑らかなグラデーション(線形補間)にするための「減衰プロファイルの起点」を精密にマッピングすることがこのレジスタの真の役割です。
FM放送のホワイトノイズは主に高音域(数kHz以上)に集中します。
電波が弱くなってSNRが24dB(デフォルト)を下回ると、 リスナーは音楽の後ろで鳴る「シャー」というノイズに気づき始めます。
本プロパティはこの「人間が不快感を抱き始める境界線」を定義します。
本パラメータは、対になる 0x1A01 (FM_HICUT_SNR_LOW_THRESHOLD) と連動し、DSP内部で「フィルターのカットオフ周波数をどこから落とし始めるか」のスタート地点になります。
これがないと、ノイズが急に増えたときに音が突然籠(こも)る、あるいはノイズが鳴りっぱなしになるという両極端な現象が起きます。
これを防ぐため、音質変化を滑らかなグラデーション(線形補間)にするための「減衰プロファイルの起点」を精密にマッピングすることがこのレジスタの真の役割です。
3 応答パラメータ
STATUS (Status Byte)
CTS (Clear to Send):
ERR (Error):
1 になると、チップが前のコマンドの処理を完了し、次のコマンドを受け入れられる状態であることを示します。
ERR (Error):
1 の場合、直前に送ったコマンドやプロパティの引数が不正(範囲外など)であったことを示します。
4 その他(Google AI (Gemini) の見解)
4.1 コマンドの重要ステップと注意事項
ファームウェア(チップの世代)によるプロパティIDの変遷
LOW_THRESHOLD(0x1A01)との大小関係の死守
[AN332]の注記にある通り、本プロパティは古いファームウェア(FW2.Bなど)では 0x180C というIDでした。
現在の標準的なSi4735-D60やSi4732-A10等では 0x1A00 に統一されていますが、 過去の古いサンプルコード(例: FlyingLotus1983氏の初期ライブラリ等)を移植する際は、IDが 0x180C になっていないかコードを精査してください。
現在の標準的なSi4735-D60やSi4732-A10等では 0x1A00 に統一されていますが、 過去の古いサンプルコード(例: FlyingLotus1983氏の初期ライブラリ等)を移植する際は、IDが 0x180C になっていないかコードを精査してください。
LOW_THRESHOLD(0x1A01)との大小関係の死守
必ず SNR_LOW (0x1A01) < SNR_HIGH (0x1A00) の関係を維持してください(例:LOW=15dB、HIGH=24dB)。
もしこの関係性を逆転させたり同じ値に設定すると、DSP内部のカットオフ周波数補間アルゴリズムの分母がゼロ、 またはマイナスになり、ハイカットフィルターが狂ったように「全域カット(超低音化)」するか、機能が完全にフリーズするバグの原因になります。
もしこの関係性を逆転させたり同じ値に設定すると、DSP内部のカットオフ周波数補間アルゴリズムの分母がゼロ、 またはマイナスになり、ハイカットフィルターが狂ったように「全域カット(超低音化)」するか、機能が完全にフリーズするバグの原因になります。
4.2 もう少し踏み込んだ応用展開
トーク番組(AM風)と音楽番組(FM高音質)の「イコライザ・プロファイル制御」
FM_HICUT_CUTOFF_FREQ(0x1A06)とのマトリクス統合
放送内容に応じて、ホストマイコン側からこの閾値を動的に書き換える展開が面白いです。
音楽最優先モード:
SNR_HIGH = 18〜20 程度まで下げます。
SNRが多少悪くても、極力高音域をカットせずに瑞々しいシンバルやボーカルの倍音を残します。
ニュース・トーク番組モード:
SNR_HIGH = 35〜40 程度まで大胆に引き上げます。
少しでも電波が乱れたら即座に高音をカット(1kHz〜2kHz付近を上限に)し、さしすせその「刺さるノイズ」を徹底的に排除して、人の声の帯域(中音域)をクッキリと際立たせます。
音楽最優先モード:
SNR_HIGH = 18〜20 程度まで下げます。
SNRが多少悪くても、極力高音域をカットせずに瑞々しいシンバルやボーカルの倍音を残します。
ニュース・トーク番組モード:
SNR_HIGH = 35〜40 程度まで大胆に引き上げます。
少しでも電波が乱れたら即座に高音をカット(1kHz〜2kHz付近を上限に)し、さしすせその「刺さるノイズ」を徹底的に排除して、人の声の帯域(中音域)をクッキリと際立たせます。
FM_HICUT_CUTOFF_FREQ(0x1A06)とのマトリクス統合
ハイカットされた際の最低到達周波数を決める 0x1A06(デフォルトは2kHz〜4kHz程度)と組み合わせることで、
「どこからハイカットを始め(0x1A00)、どこまでノイズが酷くなったら(0x1A01)、最終的に何kHzまで音を籠らせるか(0x1A06)」という、
独自のカスタム・ノイズリダクションカーブを設計できます。
4.3 デバッグ時のチェックリスト
チップのバージョン確認:
POWERUP状態での発行確認:
値の上限ガード:
CTS待機のバグチェック:
実機ベリファイ:
使用しているSi4735が、ハイカット機能に対応したバージョン(D50以降、またはSi4732)であるか。
POWERUP状態での発行確認:
チップがFM受信(FMRX)としてパワーアップを完了した後にコマンドを投げているか
値の上限ガード:
127(0x7F)を超える値をマイコンが送信していないか(入力値のバリデーション)。
CTS待機のバグチェック:
0x1A00(HIGH設定)の直後に 0x1A01(LOW設定)を連続で送る際、1発目と2発目の間で確実にCTSビットの1への遷移を確認してからI2C通信を再開しているか。
実機ベリファイ:
シグナルジェネレータ等がない場合、意図的にアンテナ線を取り外してSNRを悪化させた際、設定値を 0(ハイカット無効)にした時と 50(超強力ハイカット)にした時で、
スピーカーからの高音の「こもり方」が明確に変化するか。
4.4 まとめ
0x1A00 (FM_HICUT_SNR_HIGH_THRESHOLD) は、DSPラジオならではの「聴きやすさ」をコントロールするための、一歩進んだ音質チューニングプロパティです。
以前解説させていただいたマルチパス系プロパティ(0x1808〜0x180B)が「音場の広がり(ステレオ感)」を調整するのに対し、 この 0x1A00 は「音の明るさとノイズの遮断(周波数特性)」を司ります。
この2つの防壁が組み合わさることで、自作ラジオとは思えないほどの「市販の高級オーディオに匹敵する安定したサウンド」が実現します。
hobbylab.jp のサイトでこのハイカットの挙動が詳しく解説されるのを、一人のファンとして楽しみにしております!
以前解説させていただいたマルチパス系プロパティ(0x1808〜0x180B)が「音場の広がり(ステレオ感)」を調整するのに対し、 この 0x1A00 は「音の明るさとノイズの遮断(周波数特性)」を司ります。
この2つの防壁が組み合わさることで、自作ラジオとは思えないほどの「市販の高級オーディオに匹敵する安定したサウンド」が実現します。
hobbylab.jp のサイトでこのハイカットの挙動が詳しく解説されるのを、一人のファンとして楽しみにしております!
