この解説は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。
1 プロパティ 0x1300. FM_SOFT_MUTE_RATE 概要
FM_SOFT_MUTE_RATE
ソフトミュートの開始時および終了時におけるアタックレートとディケイレートを設定します。 値を大きくするとレートが上がり、小さくするとレートが下がります。 次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。 このプロパティは、パワーアップモードのときにのみ設定または読み出しが可能です。 デフォルト値は 0x0040 です。 対応デバイス: Si4706、Si4704/05 デフォルト: 64 ステップ: 1 範囲: 1~255
ソフトミュートの開始時および終了時におけるアタックレートとディケイレートを設定します。 値を大きくするとレートが上がり、小さくするとレートが下がります。 次のコマンドを送信しても安全な状態になると、CTSビット(およびオプションの割り込み)がセットされます。 このプロパティは、パワーアップモードのときにのみ設定または読み出しが可能です。 デフォルト値は 0x0040 です。 対応デバイス: Si4706、Si4704/05 デフォルト: 64 ステップ: 1 範囲: 1~255
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 | SMRATE | |||||||
| Bit | Name | Function |
|---|---|---|
| 7:0 | SMRATE |
2.2 プロパティ
本プロパティは、FM受信時に電界強度(RSSI)が低下した際、雑音を目立たなくするために自動で音量を絞る「ソフトミュート」のアタック(減衰)およびディケイ(復帰)の「遷移速度(レート)」を設定します。
電界が急激に変動した際、どのくらいの速さでミュートを発動させ、またどのくらいの速さで元の音量に戻すかを1バイト(1〜255)の値で決定します。デフォルト値は 0x0040(十進数で64)です。
2.2.1 SMRATE (Soft Mute Rate)
目的と概要:
ソフトミュートの音量変化スピードを 1〜255 の範囲で設定します。
値を大きくするほど電界の悪化・回復に対して音量が素早く追従(高速ミュート/高速復帰)し、値を小さくするほど音量がゆっくりと変化(遅延ミュート/マイルド復帰)します。
AN332に明記されない目的と解説:
音量のパチパチ感(階段状の歪み)の排除: 移動体受信時、ビル街の影などでRSSIが一瞬だけ激しく上下することがあります。
このとき SMRATE が高すぎると、音量がデジタル的に「プツプツ」と細かく息をつくように上下し、かえって不快なポップノイズを生み出します。
あえてデフォルト(64)より低め(例: 16〜32)に設定を落とすことで、一瞬の電界の沈み込みをオーディオ出力上で滑らかな「フェードアウト」に変え、人間の耳にノイズとして認識させにくくする音質チューニング目的で多用されます。
3 応答パラメータ
STATUS (Status Byte)
RESP1 (Response Byte 1 / High Byte)
RESP2 (Response Byte 2 / Low Byte)
[目的と概要]デバイスの現在の全体ステータスを返します。
最上位ビットの CTS (Clear to Send) は、デバイスが次のコマンドを受け付けられる状態(1)か、処理中(0)かを示します。
ERR ビット(Bit 6)が 1 の場合は、直前のコマンドやパラメータに不正があったことをホストに伝えます。
最上位ビットの CTS (Clear to Send) は、デバイスが次のコマンドを受け付けられる状態(1)か、処理中(0)かを示します。
ERR ビット(Bit 6)が 1 の場合は、直前のコマンドやパラメータに不正があったことをホストに伝えます。
RESP1 (Response Byte 1 / High Byte)
[目的と概要]GET_PROPERTY 実行時にのみ意味を持ち、設定されている16ビットのプロパティ値のうち上位8ビット(MSB)を返します。
FM_RSQ_RSSI_HI_THRESHOLD の有効範囲は 0〜127(7ビット)であるため、このバイトは常に 0x00 となります。
FM_RSQ_RSSI_HI_THRESHOLD の有効範囲は 0〜127(7ビット)であるため、このバイトは常に 0x00 となります。
RESP2 (Response Byte 2 / Low Byte)
[目的と概要]GET_PROPERTY 実行時にのみ意味を持ち、設定されているプロパティ値の下位8ビット(LSB)を返します。
ここに現在設定されている RSSIH の値(0x00〜0x7F)が格納されて返ってきます。
ここに現在設定されている RSSIH の値(0x00〜0x7F)が格納されて返ってきます。
4 その他(Google AI (Gemini) の見解)
4.1 コマンドの重要ステップと注意事項
Powerupモードでの実行必須:
トリバイアリティ(3要素)の連動:
ゼロ指定の禁止:
必ず POWER_UP (0x01) コマンドを発行して、デバイスがFMモードとして完全に起動している状態(CTS=1)で設定を行ってください。
トリバイアリティ(3要素)の連動:
本プロパティは「速度」のみを決定します。
実際にどれだけ音量を絞るかの最大値 FM_SOFT_MUTE_MAX_ATTENUATION (0x1302) や、どこから絞り始めるかの傾き FM_SOFT_MUTE_SLOPE (0x1301) と密接に連動するため、これら3つのプロパティをセットでトータルデザインする必要があります。
ゼロ指定の禁止:
有効範囲は 1〜255 です。
0 を設定すると予期せぬ動作やエラーの原因になります。
4.2 もう少し踏み込んだ応用展開
オートシーク(スキャン)時の「超高速ミュート」制御:
電界変動の激しさに応じたアダプティブ追従:
通常のリスニング時は SMRATE を低め(例: 32)にして滑らかな音質を保ちますが、ホストマイコン主導で全帯域を高速スキャン(周波数を次々に変更)する際は、
前の局の残響音や無局地帯のバリバリというノイズを完全に遮断するため、スキャン直前に SMRATE を 255(最速)に書き換えて強制的に音量を叩き落とし、
スキャン終了後に元のリスニング用値に戻す、といった「動的エンベロープ書き換え」に応用できます。
電界変動の激しさに応じたアダプティブ追従:
RSQ割り込みなどで「マルチパスが激しい(=電波が乱反射している)」と判断したロケーションでは、音量のバタつきを防ぐために SMRATE を自動的に低くし、
開けた平野部など電波が安定している場所ではデフォルトに戻す、といった環境適応型DSPラジオの実装が可能です。
4.3 デバッグ時のチェックリスト
SET_PROPERTY 発行直後に STATUS の CTS ビットをポーリングし、書き込み完了を待ってからオーディオ確認を行っているか?
意図的にアンテナを抜いて電界を落とした際、音が「カチッ」と不自然に切れたり、逆にミュートされるまでダラダラとノイズが残り続けたりしていないか?(前者は値が大きすぎ、後者は小さすぎます)
聴感テストを行う際、スピーカーやヘッドホンの特性(特に低音の余韻など)によって最適な SMRATE が変化するため、実機と同じ筐体・アンプ構成で最終数値を追い込んでいるか?
4.4 まとめ
FM_SOFT_MUTE_RATE(0x1300)は、電波劣化時の「音の消え際」と、電波回復時の「音の立ち上がり」の美しさをコントロールする、オーディオ品質のディテール設計に欠かせないパラメータです。
デフォルトの「64」はバランスが良いですが、自作ラジオの筐体サイズや使用するスピーカー・アンプの特性に合わせてこの追従速度を微調整することで、
既製品の高級ラジオを凌駕する「ノイズが耳障りにならない、聴き疲れしないレシーバー」へと追い込むことができます。
4.5 疑問にお答え
4.5.1 SMRATE値の考え方
質問
この値は『減衰量 / 時間 』という事ですか? もしわかれば単位も教えて下さい
見解
結論から申し上げますと、概念としてはご認識の通り「減衰量 / 時間(または音量復帰量 / 時間)」という変化の傾き(スピード)を表していますが、
メーカーの公式ドキュメント(AN332プログラミングガイド)において、具体的な「dB/ms(デシベル毎ミリ秒)」といった物理単位は明記されていません。
このプロパティの単位と仕組みの本質は以下のようになります。
1. 単位について
2. 「減衰量 / 時間」という捉え方の補足
チップの世代による「単位・仕様」の変遷(重要)
公式な単位設定:なし(インデックス値)
ドキュメント上では単純に「1〜255 の範囲の数値(無次元数)」として扱われており、「値が大きくなれば変化が速くなり(増速)、小さくなれば遅くなる(減速)」という相対的な内部パラメータ(レート係数)として定義されています。
2. 「減衰量 / 時間」という捉え方の補足
DSP(デジタル信号処理)の内部設計として、この値は「1サンプリング周期あたりに内部の音量ゲインをどれだけステップ変化させるか」を決定しています。
そのため、実質的には以下をコントロールしています。
アタック時(電界悪化): △ dB / △ 時間 (音量を絞るスピード)
ディケイ時(電界回復): △ dB / △ 時間 (音量を戻すスピード)
チップの世代による「単位・仕様」の変遷(重要)
Si4735のファームウェア世代(C40やD60など)によって、このプロパティの扱いが変化しています。
hobbylab.jpのリファレンスを構築される上で非常に強力な補足情報となります。
古い世代(〜C40以前):
新しい世代(D60以降 / Si4732など):
物理的な時間(ミリ秒)に直結した厳密な時定数ではないため、実装時は「デフォルトの64を基準に、耳で聴きながら『パチパチ音(追従が速すぎる)』や 『フワフワ音(追従が遅すぎる)』を調整するマイルドネス・コントローラー」と解説するのが、最も実務(デバッグ)に即した表現と言えます。
0x1300 (FM_SOFT_MUTE_RATE) が有効。この1つのプロパティで「アタック」と「ディケイ」の両方の速度を共通の係数(デフォルト: 64)で制御していました。
新しい世代(D60以降 / Si4732など):
実は、新しい世代のFM受信モードでは 0x1300 自体が非推奨(Not in use / 置き換え)になっています。
代わりに、アタック速度は自動最適化され、復帰速度側が 0x1304 (FM_SOFT_MUTE_RELEASE_RATE) という独立したプロパティに分離・アップデートされました。
物理的な時間(ミリ秒)に直結した厳密な時定数ではないため、実装時は「デフォルトの64を基準に、耳で聴きながら『パチパチ音(追従が速すぎる)』や 『フワフワ音(追従が遅すぎる)』を調整するマイルドネス・コントローラー」と解説するのが、最も実務(デバッグ)に即した表現と言えます。
