電子回路

2026年6月29日 (月)

RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑥ z-2項をシフトする理由

この記事は

RIAAフォノイコライザをIIRデジタルフィルタで実装する ①準備編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ③シミュレーション編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ④実装・評価編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証

の続編です。

過去記事

RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編

の中で、フォノイコライザのアナログ伝達関数(sドメイン)を双一次変換によってデジタルの伝達関数(zドメイン)に変換するという計算を行った。この内容をもう一度書くとこうだ。まずフォノイコライザのアナログ伝達関数は

Analog_eq    (式1)

であり、sとzの関係は

Sz  (式2)

で、ただしこれはsについて解こうとすると複素数の対数になるので、計算が困難となるため、次の式で近似する。

Sztransfer  (式3)

式1に対して、式3の変換式を代入して整理すると、フォノイコライザのデジタル伝達関数(zドメイン)が得られる。このときの計算結果から、全体にかかる定数項を省くと次の式が得られる。

Digitaleq_org   (式4)

ところが、よく使われる式は、分子のz-2項の係数をz-1項にシフトしてz-2項はネグる、すなわち

Dijitaleq_20260629162801   (式5)

という形になっていて、それがなぜだか謎だったのだ。今回はこの理由がわかったので、書いておこうと思う。
上の式のままだとどうも目がチカチカするので、もう少し実用的な形に書き直すと以下のようになる。

96kriaaorg  (式6)

96kriaa (式7)

式6は96kHzサンプリングのRIAAイコライザのデジタル伝達関数、式7は式6のz-2項をz-1にシフトして、z-2項をネグった、よく使われる形。
元記事を書いた当初、なぜこういう操作をしているのか、理由がわからなかったのだ。

ところが先日、パラメトリックWAVプレーヤーの記事を書くために調べ物をしていて、とうとう理由を見つけたのだ。
式4の分子を取り出して因数分解すると次のようになる。

Photo_20260629150801 (式8)


ここで、デジタル周波数応答を見るときの前提として

Ztos (式9)

であり、ここでのωは1サンプル進むごとに位相がどれだけ進むかを表していて、たとえばω=0(直流)では位相は進まずz=1、ナイキスト周波数の場合は、サンプリング周波数の半分なので1サンプルごとにω=180deg、つまりラジアンでπなので、

Photo_20260629160101(式10)  (オイラーの公式より、-1)
なので、

Z1
Nyquist (式11)

つまりナイキスト周波数のとき式11が成り立つ。そうすると、式8の
1z1
の部分は、ナイキスト周波数で0点ということになり、つまりナイキスト周波数ではゲインが0(伝達関数が0)になることを示している。
フォノイコライザの実装上、ナイキスト周波数で0になるという性質は不要で、しかも再生周波数にナイキスト周波数が近いと影響が出て、高域でゲインが低下することになる。なので式8のこの部分をネグって1とすると、最終的に式5になる、というのが真相のようだ。

過去記事の
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証
でこの部分をネグらなかった場合とネグった場合の比較をしているが、96kHzサンプリングで、ネグらないで実装した場合、20kHzのゲインが1.4dBほど下がってしまうという結果になっている。一方、ナイキスト周波数でゼロになる部分をネグったよく見られる実装では、ゲインの偏差は+0.5dBほどだった。なので辻褄は合っている。

これはよく考えてみるととても面白い現象で、もとのアナログ伝達関数(sドメイン)で周波数を無限大に飛ばしたときにゲインが0になる、という事象が、デジタル伝達関数(zドメイン)ではナイキスト周波数でゲイン0という事象に変換されたことになる。まるで無限に広がっていた宇宙に対して、ドメイン変換したらナイキスト周波数というブラックホールが現れて、高域の周波数軸が歪んで吸い込まれてしまうような感じに見える。

実際のところ、比較記事では、ネグらなかった場合は高域ゲインが若干下がる代わりに位相は正しく、ネグった場合はゲインはごく僅かに上る程度に留まった分、位相はかなり回ってしまうという結果になっており、計算の正当性から言えば、どちらかというとネグらないほうが正しいような感じもする。しかしながら20kHzで-1.4dBという結果は聴感に影響があるため、世間では高域が下がらない方を選んでいる、というのが本当のところのようだ。

| | | コメント (0)

2026年6月27日 (土)

パラメトリックWAVプレーヤー

今回は、再生音質をパラメトリックイコライザーで調整して出力することができるパラメトリックWAVプレイヤーアプリをリリースしたので、その紹介です。

BOOTHにて公開しています!

最新版 ダウンロード
更新履歴
3.0.2 randomモードで再生ボタンを押した場合の一曲目もランダム化しました。
3.0.3 一部のサウンドデバイスで、WASAPIモードでの再生できなかった不具合を対策しました。

これはWAVファイルのデジタルデータを直接IIR(Biquad)フィルタにかけて、音質調整をして出力することができるWAVプレイヤーで、結論を先にいうと、周波数特性の改善だけではなく、同時に位相特性も改善されて、定位感が大幅に改善します!びっくり(@_@)

きっかけはオーディオ仲間の I さんからの電話でした。いわく、
「おもしろいDACの製作記事を見つけたから作ってみたらなかなかよかったよー(^-^)」

そのおもしろいDACとは、この記事で紹介されているRaspberry Pi PICOを使ったものです。
この作者は、スピーカー単体特性を苦労して改善するよりも、ソースのイコライジングで特性を補うほうが合理的なのではないか?というアプローチをしていて、そのひとつの答えとして、PICO2を使って、8段のパラメトリックイコライザを内蔵したDACを開発し、最終的にスピーカーから出力される音の周波数特性を改善するということを実現しています。
ぼくも実際に作ってみましたが、なるほどとてもよくできていて、安価でコンパクトでしかも効果的です。すばらしい!(^-^)!

ぼくもこれをシステムに組み込んで使おうかとも考えたのですが、いくつか気になる点がありました。
・DACチップ一体で作っているため、DACチップの置き換えなどができず、たとえばSSDACを使おうとするとSSDACに組み込まなければいけない。
・PICOのベースクロックはUSBの48MHzに合わせて作ってあるため12MHzであり、たとえばCD系(44.1kHz)の11.2896MHzのクロックはどうしても割り切れない系のPLLに頼らざるを得ない。

それならPCのアプリとして作れば、フィルタの段数も増やせそうだし、出力をUSBのDACにすれば選べるし、そのほうがよさそうだな……
と考えて、とりあえずC#を使ってコンソールでWAVを再生する実験をして、そのあとBiquadフィルタを実装して通す実験をしたところうまくいったので、それならカタチにしよう!と思って、コツコツと作り始めました。

カタチとしては、パラメトリックフィルタを内蔵したWAV専用のプレーヤーアプリで、対応フォーマットは44.1kHz、48kHz、88.2kHz、96kHzのWAV、出力は接続しているUSBサウンドデバイスが選択できて、WASAPI出力も選べるようにしました。
内臓のフィルタは、パラメトリック(ピーキング)フィルタが左右独立で30段、ローシェルフ、ハイシェルフフィルタが左右独立で各一段、それに係数を任意に設定できるBiquadフィルタを左右独立で5段としました。またダイレクトリッピングしたアナログレコードを再生できるように、フォノイコライザも内蔵し、フォノイコライザの特性はRIAA、NAB、Colombia/LP、Decca、AES(2種)、Old RCA(4種)と、合計10種類で、ほぼすべての特性をカバーしています。
(このうち、パラメトリック16段、Low Shelf、High Shelf、Biquad3段、RIAAフォノイコは無料でお使いいただけます。 )

アプリのUIはこんな感じです。

Photo_20260627143001
図1.Parametric Wav Playerの外観

上側にある小さな窓がプレーヤー本体で、後ろに写っている大窓がフィルタ設定画面です。

このアプリは、単にちょっと凝ったトーンコントロールと、任意設定できるデジタルフィルタを内蔵したプレーヤーだと考えて、面白がって音質をあれこれいじって再生するという使い方が手軽にできますが、作者の目的は、視聴位置での周波数特性を改善することにあります。

実際に自室のシステムで試してみたので、以下に紹介します。


今回の目的は、部屋の視聴位置でのスピーカーの周波数特性を改善することです。
大きな方針としては、視聴位置に測定用のマイクを設置して、スピーカーからホワイトノイズを出力したときに、マイクで拾った信号をFFTで観察して、フラットになるようにフィルタを設定する、ということです。
FFTはWaveSpectra を使う方針ですが、WavSpectraは低域が正確に測れないので、先にREWUMIK-1を使って、視聴位置での音場特性を測ります。

まず、普段使用しているスピーカーですが、Auratone5CとVictorのSX-100を直列にして、無帰還アンプで鳴らしています。スピーカーはどちらも12.5Cmフルレンジユニットが使われています(写真1)。

Sp_system
写真1.使用しているスピーカーシステム

これをUMIK-1とREWで、視聴位置で測定した結果を図2に示します。

Rew

図2.視聴位置での音圧周波数特性(赤線)


これは想像していたよりだいぶひどい特性です(^-^;
以前、Auratone5Cは軸上10センチの位置で特性を測ったことがあって、その結果は図3のようでした。


Image
図3.Auratone5Cの軸上10センチでの音圧周波数特性


この特性を見る限りでは、低域が物足りないものの、全体としては素直で悪くないものでしたが、2mほど離れた今回の視聴点ではずいぶん特性が変っています。
さて、それでは図2の、REWで示された視聴点の特性から、まず低域のローシェルフフィルタと、高域のハイシェルフフィルタの設定を仮決めしておきます。ローシェルフ、ハイシェルフフィルタは図4、図5に示すような特性のフィルタです。この例ではカットオフ周波数Fcに対して、Gain15dB、Q=0.8を設定した場合を示しています。


Lowshelf000 Highshelf000
図4.ローシェルフフィルタ            図5.ハイシェルフフィルタ


つまりカットオフ周波数から下のゲインを調整するのがローシェルフで、上のゲインを調整するのがハイシェルフフィルタです。
さきほどのREWの測定結果から、ローシェルフとハイシェルフのフィルタ特性を次のように仮決めしました。

Low Shelf:Fc=75Hz、Gain=15dB、Q=0.7
High Shelf:Fc=14kHz、Gain=12dB、Q=1.0

まずこの設定でフィルタをかけて調整を進めていきます。

本アプリでのフィルタをかけた状態でスピーカーの音場特性を測るには、UMIK-1とWaveSpectraを使います。REWは内蔵音源を使う測定なので、本アプリを使った測定はできないからです。
ホワイトノイズを録音したWAVファイルを用意して、それを本アプリで再生し、視聴位置にUMIK-1を設置してここで集音した信号をWaveSpectra で観測します。

まずは、フィルタを一切かけない状態での初期状態の特性を図6に示します。


20260626ws000
図6.初期状態の視聴位置でのスピーカー音圧特性


これは先程のREWで測定した図2の特性とおおむね一致しています。

ここに先ほど決めたローシェルフ/ハイシェルフフィルタの設定をアプリに入力して、フィルタOnして測定したものを図7に示します。


20260626ws001lshson110mark
図7.ローシェルフ/ハイシェルフフィルタをOnにした音圧特性


これで高域が改善しているのがわかります。
次に、この図で○印をつけた110Hz付近にディップがあるので、これをParametricフィルタで改善します。設定は次の通り。

Fc=110Hz、BW=0.2、PeakGain=8dB

説明が前後しますが、Parametricフィルタ(Peaking Filter)の特性を図8に示します。この例では、中心周波数Fcに対して、PeakGain=15dB、BW=1.0を設定しています。


Peaking001
図8.Parametric(Peaking)フィルタの特性

Parammetricフィルタは、特定の周波数のゲインを増減するフィルタなので、ここでは110Hz を狙って8dB 上げる設定をしています。
このフィルタをOnして測った特性を図9に示します。

20260626ws002_110hzon992mark
図9.110Hzの改善結果と、992Hzのピーク


これで先程の110Hzのディップが解消しました。次に992Hz付近にピークがあるので、これをつぶします。

Fc=992Hz、BW=0.2、PeakGain=ー8dB

これで、特性は次のようになりました。

20260626ws003_992hzonmark
図10.992Hzの改善


このようにして、全体にわたってディップとピークを地道につぶしていきます。
だいたい満足なところまで行った結果を図11に示します。

20260626ws004_20k
図11.全帯域改善


これで目立つ凹凸を消すことができましたが、10kHz以上が少し下がっています。これを次のように改善します。

Fc=20kHz、BW=0.5、PeakGain=9dB

すると次のような特性が得られました。


20260626ws005_last
図12.最終調整結果


もう一度最初の無調整の図6を再掲しますが、大幅に改善していることがわかります。

20260626ws000
図6.初期状態の視聴位置でのスピーカー音圧特性(再掲)


さてこれでいよいよ実際に音楽を聞いてみます。
当然ながら低域と高域は改善されているので、低域の厚みと高域のヌケ感が改善されることは予想できますがはたして……


(@_@;


まさにこんな感じの印象でした!
低域と高域のレベルが改善されたのは当然なのであまり驚かなかったのですが、それでは何に驚いたかというと、定位感が大幅に改善したことに驚いたのです。
長いことオーディオをやっていますが、これほどの改善効果を体験するのは非常にめずらしく、思い返してみれば50年近く前に、カセットデッキのアジマス調整をしたときに、霧が晴れるように音質が改善したあの時の感動に匹敵するほどの衝撃です。

音圧の周波数特性を改善したことで、なぜ定位感が改善したのか?
これは考えてみれば当然かもしれないのですが、音圧の変化と位相特性は最小位相の範囲内では表裏一体であり、音圧特性を改善すれば位相特性も同時に改善するということです。これはたとえば、フォノイコライザの補正カーブは必ず一意に位相特性を伴い、逆特性で戻せば位相特性もフラットに戻る、というのと同じことです。
しかしこれはゲインと位相が常に一意に変化する最小位相系に限った現象であって、たとえば壁からの反射による影響や、スピーカーからの距離の差によるような非最小位相系は改善されません。それでも今回は目を見張るほどの改善がありました。

以上のように、今回は想像をはるかに超える効果を得ることができました。
みなさんにもぜひ体験していただきたいと思いますし、マルチシステムを使っておられる場合はどのような効果が得られるのか、ということにも興味があります。
本ソフトはトップにリンクした通り、BOOTHからダウンロードでき、詳しい操作説明はマニュアルが同梱されていますので、興味のある方は参照してください。

マニュアルだけここに貼っておきます。

ダウンロード - parametricplayermanual.pdf



【20260628追記】
このアプリに搭載したフォノイコライザについて解説しておこうと思います。
じつはこのアプリに搭載されたフォノイコライザは、ちょっとした目玉だと思っています。というのは、現存するであろうほぼすべてのイコライザ特性を網羅しているからです。
フォノイコライザのIIRデジタルフィルタへの実装については、過去記事で書いていますので、参照してください。

【参考記事】
RIAAフォノイコライザをIIRデジタルフィルタで実装する ①準備編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ②係数計算編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ③シミュレーション編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ④実装・評価編
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証
RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑥ z-2項をシフトする理由

さて、今回はもっとも普及しているRIAA規格を始めとして、現存する規格を網羅して合計10種類のフォノイコライザの規格をカバーしています。このアプリに搭載しているフォノイコライザの規格と、その時定数は次の表1に示すとおりです。

表1.搭載したフォノイコライザの時定数
Eq_constant

RIAA以外の規格については、時期によって数値が変ったりするものもあり、判然としない場合もあります。
たとえばNAB規格は、最初期にはT1=2242として発表されましたが、後にColombia/LPとの互換性を考慮してT1=1592に変更されたと言われています。このあたりが、NABとColombia/LPが混同されたり、「ほとんど近い」と言われる理由のようです。
AESについては、高域時定数T3に諸説あり、オリジナルの規格はT3=63.6とする説が有力ですが、後にRIAAとの統合プロセスを考慮し、T3=75として扱っているイコライザーも存在したようです。
old RCAの規格についてはさらにややこしく、RCAがLP製造を開始した最初期の規格はT2=265、T3=63.6だったと言われています。しかし一部の文献や、のちのヴィンテージ機器では、T2=199、T3=75としているものが存在します。T2=265、T3=75や、T2=199、T3=63.6という組み合わせについては文献がありませんが、念のため搭載しました。

これらの定数に対して、Biquadフィルタに実装する公式は次のとおりとなっています。時定数T1~T3は上述の通り、Fsはサンプリング周波数です。これはフォノイコライザの伝達関数を双一次変換(BLT)でデジタルに変換したものです。


Dijitaleq_20260629162801  (式1)


このソフトで実際に信号を処理した場合の理論値と実測値の結果を表2に示します。Fsは96kHzで測定しています。
なお、理論値については次の式2によって求められ、表2の数値はいずれも1kHzのゲインを0に正規化しています。

Gainfomula  (式2)

表2.フォノイコライザ各規格の実測値(Fs=96kHz)
Eq_actualvalue

測定は正弦波を入力し、20Hzでサウンドカードの最大出力がクリップしない値(約5Vp-p)に設定し、そこから同じ入力条件のまま
周波数を徐々に上げて、20kHzまでについて、デジタルオシロのカーソル機能で振幅(p-p)を計測しました。
20Hzで5Vp-pでも20kHzではおよそ40dB下がって50mVほどになるため、ノイズの影響や読み取り精度を考慮すると16kHzや20kHzの
測定精度はやや低いです。
また過去の記事でも検証しましたが、式1の計算では、サンプリング周波数が下がるほど高域のゲイン特性が若干上がる傾向が出ます。
そのためか、いずれも周波数が高い方で誤差がプラス方向にやや高めに出ています。
しかしながらいずれも1dB以内の誤差におさまっているので、まあまあなのではないでしょうか。


参考サイト
簡単なデジタルフィルタの実装

Audio-EQ-Cookbook

 

| | | コメント (0)

2026年3月20日 (金)

Loraデバイス E220-900T22S の動作確認

20260320lora
写真1.LoRaデバイスの送受信実験回路


Loraデバイスの動作試験を行ったので、備忘録として書いておく。

Loraとは、スペクトラム拡散技術を応用した、低消費電力での長距離通信を可能にする無線通信方式。

そもそも何のためにこの検証をしようと思ったかというと、マンション1階の郵便受けに荷物が届いたかどうかを検知するための無線センサが作れないかどうか考えたのが始まりだった。

現在、鉄筋コンクリート4階建てのマンションの3階に住んでいて、郵便受けは一階の入口に設置されており、ステンレス製だ。条件としては、郵便受けを改造せず、アンテナを外部に引き出すのもNGとする。つまりステンレスの箱の中から、外部にアンテナを出さずに、データを電波で送ってそれを受信できるか?ということだ。

以前、Wifiで信号が送れないか予備実験を行ったが、うんともすんともデータは送れなかった。このときはESP32を使用した。

LoRaに採用されているスペクトラム拡散方式の通信技術は、ノイズや干渉に強いという特徴があるため、ひょっとしたら郵便受けの中から部屋に向けて通信が可能なのではないかと思ったのだ。

そういうわけで、さっそく秋月にいって、LoRaモジュールを2個購入してきた。E220-900T22S(JP)-EV2というもので、1個1980円。アリエクに慣れているとちょっと高い買い物だが、まあしょうがない。

とりあえず片方のデバイスから"hello(^-^)/"と送信して、これをもう片方のデバイスで受信できるようにし、送信側のデバイスを1階の郵便受け内部に設置して、3階の部屋でこれを受信できるか検証するのが、今回の目的である。
結論を先に書いておくと、郵便受けの中から2秒ごとに送信した"hello(^-^)/"信号が、3階の部屋で大体2~3分に一度受信できた。予想としては、Wifiと同じくまったく受からないのではないかと思っていたので、意外な結果だった。

必要最低限のコードで通信テストを行う手順は以下の通り。

使用するマイコンはESP32。よくあるUSB接続のブレークアウトボードを使った。環境はArduino、バージョンはesp32_3.3.5。
LoRaモジュールE220のConfigが初期値である前提ならば、透過送信モード(Transparent)が使用でき、ハンドシェイクやペアリングをせずにテキストの通信ができる。送信、受信のコードは次の通り。

////////////////////////////送信コード ここから
/*
  20260319 Lora E220 送信テスト
  arduino esp32_3.3.5
  Device Config = Default
  M0=M1=0
  AUX:Open
  E220 Tx → ESP32-16
  E220 Rx → ESP32-17
*/

HardwareSerial LoraSerial(2);

void setup() {
  Serial.begin(115200);
  LoraSerial.begin(9600, SERIAL_8N1, 16, 17);
  delay(1000);
  Serial.println("TX start");
}

void loop() {
  LoraSerial.println("hello (^-^)/");
  Serial.println("sent: hello (^-^)/");
  delay(2000);
}
////////////////////////////送信コード ここまで

////////////////////////////受信コード ここから
/*
  20260319 Lora E220 受信テスト
  arduino esp32_3.3.5
  Device Config = Default
  M0=M1=0
  AUX:Open
  E220 Tx → ESP32-16
  E220 Rx → ESP32-17
*/

HardwareSerial LoraSerial(2);

void setup() {
  Serial.begin(115200);
  LoraSerial.begin(9600, SERIAL_8N1, 16, 17);
  delay(1000);
  Serial.println("RX start");
}

void loop() {
  while (LoraSerial.available()) {
    char c = LoraSerial.read();
    Serial.write(c);
  }
}
////////////////////////////受信コード ここまで

LoRaモジュールは、VCCに3.1~5.5Vの電源電圧を供給し、M0,M1端子はGNDに接続、AUXはオープン、Tx,RxはそれぞれESP32の16,17pinに接続する。
コードは、
LoraSerialと名付けたUARTのインスタンスに対し任意の文字列を送るだけのごく単純なものだ。

ところがやってみると、受信できていない。
そこで、LoRaモジュールのConfigがどのような設定になっているか調べてみることにした。
ArduinoにLoRa用のライブラリ"EByte LoRa E220 library by Renzo Mischianti 1.0.8"を追加し、次のArduinoコードを書き込んで実行する。
ダウンロード - 20260319_lora_e220_readconfig_000_ok.ino

すると、シリアルモニタに次のようにConfigの内容が表示された。2個のデバイスの両方とも同じ内容だった。

/////////////////////////////////
E220 configuration read start
Status code: 1
Status: Success
----------------------------------------
HEAD : C1 0 8

AddH : 0
AddL : 0

Chan : 0 -> 410MHz

UART parity : 1 -> 8O1
UART baud : 11 -> 9600bps (default)
Air data rate : 0 -> 2.4kbps

Sub packet : 0 -> 200bytes (default)
TX power : 0 -> 22dBm (Default)
RSSI ambient noise : 0 -> Disabled (default)

WOR period : 0 -> 500ms
LBT enable : 0 -> Disabled (default)
RSSI enable : 0 -> Disabled (default)
Fixed transmission : 1 -> Fixed transmission (first three bytes can be used as high/low address and channel)
----------------------------------------

内容を注意深く見ていくと、デフォルト設定ではない箇所がある。
ひとつはUART parity : 1 -> 8O1で、これはデフォルトでは8N1であるべき。そしてもうひとつは、
Fixed transmission : 1 -> Fixed transmission (first three bytes can be used as high/low address and channel)
この部分は、上の通信プログラムを実行させるには"Transparent transmission"になっていないといけない。
周波数は920MHzなのだが、410MHzになっているのはおかしい。

そこで、次のコードを書き込んで実行し、すべてのパラメータをDefaultに修正する。
ダウンロード - 20260319_lora_e220_setconfigdefault000_ok.ino

実行したら、再度、上に書いたConfigの読み込みコードを書き込んで実行し、内容を確認する。次の内容になった。

----------------------------------------
HEAD : C1 0 8

AddH : 0
AddL : 0

Chan : 0 -> 410MHz

UART parity : 0 -> 8N1 (Default)
UART baud : 11 -> 9600bps (default)
Air data rate : 10 -> 2.4kbps (default)

Sub packet : 0 -> 200bytes (default)
TX power : 0 -> 22dBm (Default)
RSSI ambient noise : 0 -> Disabled (default)

WOR period : 0 -> 500ms
LBT enable : 0 -> Disabled (default)
RSSI enable : 0 -> Disabled (default)
Fixed transmission : 0 -> Transparent transmission (default)
----------------------------------------

これで、上で述べた箇所が修正された。すなわち、
UART parity : 0 -> 8N1 (Default)
Fixed transmission : 0 -> Transparent transmission (default)
この部分が修正された。周波数が410MHzと表示されているのはおかしいのだが、読み出しソフトのバグだろうか?

この修正を2つのデバイスに行ったうえで、再度上に書いた送受信コードを書き込んだところ、こんどはちゃんと受信できた\(^o^)/

このデバイスをより本格的に使用するには、たとえば透過モードではなく固定通信モードに設定して、送信先のアドレス、チャンネルを指定して特定の相手にのみデータを送るなどの方法がある。手順を大雑把に述べると、モードをTransparent transmissionからFixed transmissionに変更し、送信するシリアルデータを[ADDRH][ADDRL][CHAN][DATA...]のようにする。
たとえば、宛先アドレスが0x0002、チャンネルが0x00、データが"hello"なら、

uint8_t data[] = {
0x00, 0x02, 0x00, // 宛先アドレス(H,L) + チャンネル
'h','e','l','l','o','\n'
};
LoraSerial.write(data, sizeof(data));

こんな感じになるだろう。

そういうわけで、とりあえず送受信ができるようになったので、送信側を3.8Vのリチウムイオン電池駆動にして、同じく秋月で715円で売っていた専用のアンテナをつけて紙袋に入れ、1階の郵便受けの中に入れて、3階の自室で受信確認をしたところ、2秒ごとに送信している"hello (^-^)/"が2~3分に一度受信できる、という結果になった。これならひょっとしたら実用できるかもしれない。構想としては、光センサをつけて、郵便受けになにかが入ることで反射光の状態が変化したら、信号を送信するようにすれば、荷物検知ができそうだ。

やはり今回の金属製郵便受けの内部から電波を送信するというプロジェクトの最大のネックはアンテナで、アンテナの外出しおよび郵便受けの改造はNGという条件ではかなり困難だ。通信をより確実にするためにできることがあるとすれば、郵便受けの箱そのものに給電してしまって飛びを確認するか、あるいは扉に開けられている細長い穴をスロットアンテナとして使うか、くらいだが、細長い穴は41mmで、920MHzの波長は約30センチ、1/2λなら15センチなので、41mmでは全く足りない。なかなかむつかしい課題だ……


| | | コメント (0)

2026年1月21日 (水)

Aliexpressの不良品返品手続き

XilinxのWebpack ISE14.7が使えるようになったので、CPLDを少し買っておこうと思い、アリエクで10個1921円のXC9572を購入したが、あろうことか、不良品なのかハリボテなのかはわからないがとにかく認識しなかったので、返品手続きを取った。次のような内容で不良品の証拠となる画像などを添付して不具合内容を書いた。

Xc9572ngpic
写真1.動作確認の様子

Error_impact
写真2.不良品が認識されずエラーとなった画像


Ok_impact 
写真3.良品の場合はこうなる

以上の3つの画像を添付して、次のように説明文を書いた。なお英訳はネットのAIでやってもらった。

I purchased 10 units of the XC9572 this time, but none of them are recognized by the development software iMPACT during Boundary Scan.
The attached photo OK_iMPACT.jpg shows how a good device is correctly recognized by iMPACT.
The attached photo ERROR_iMPACT.jpg shows the recognition error with the devices purchased this time.

Therefore, all units are defective, and I request a full refund.

アリエクの返品申請手続きができたら、返送しろと書いてあったのだが、返送手続きがよくわからず、自腹で国際便で返送したらおそらくそれだけで赤字なので、梱包だけ戻して放置していたら、返送手続きをした2日後に佐川急便さんが回収に来てくれた。

こういうシステムになっていたのか!!
ちょっと感動したが、果たして返金なるだろうか!?


【20260123追記】
1/22付で、クレジットカード宛に返金が確認されました(^-^)
Aliexpressを少し見直した。以前PCM1704の不良品(あるいはハリボテ)を掴まされたときは業者がゴネて返品、返金が叶わなかったが、品目にもよるのだろうか……

【20260209追記2】
その後、Aliexpressの別の店で同じXC9572を2個681円で販売していたので、6個2043円で購入したが、やはり不動品だったため、同じ方法で返品返金手続きしたところ、無事に返金できました。



| | | コメント (0)

2026年1月18日 (日)

マウスホイールによるズーム方向の変更

主に図面などの画像をあつかうアプリを操作する際に、マウスホイールによるズームイン/ズームアウトはとても便利な機能だが、アプリによってズーム方向が違ったり、ズーム方向の設定ができなかったりした場合、たいへんあつかいにくい。

私の場合、主にKicad、LTSpice、DesignsparkMechanicalあたりをよく使うが、KicadのZoom方向に慣れていて、LTSpiceとDesignSparkは逆なので扱いにくい。

そこで、今回はアプリ別にスクロール方向を変更する簡単な方法を備忘録として書いておく。やり方は次の通り。

①フリーのWindowsスクリプトツール”AutoHotKey”をダウンロードしてインストールする。
AutoHotKeyサイトのDownloadボタンを押して、V1.1をダウンロードして実行してインストールする。

②スクリプトを作成する。
テキストエディタで次のようにスクリプトを書き、適当な場所に保存する。ここではファイル名をZoomReverse.ahkとした。ファイル名は任意だが、拡張子はahkにすること。

;ここから
;DesignsparkMechanical
#IfWinActive ahk_exe SpaceClaim.exe
WheelUp::Send {WheelDown 1}
WheelDown::Send {WheelUp 1}
#IfWinActive

;LTSpiceXVII
#IfWinActive ahk_exe XVIIx64.exe
WheelUp::Send {WheelDown 2}
WheelDown::Send {WheelUp 2}
#IfWinActive

;LTSpice26
#IfWinActive ahk_exe LTspice.exe
WheelUp::Send {WheelDown 2}
WheelDown::Send {WheelUp 2}
#IfWinActive
;ここまで

この例はDesignsparkとLTSpiceXVII、LTSpice26の3種類のアプリのズーム方向を逆に設定している。
WheelDown 2
WheelUp 2
の数値はズームスピードの設定で、数値が大きいほど早くなる。

スクリプトが書けたら保存して、これを右クリックして、「プログラムから開く」→AutoHotKeyを実行すれば有効になる。
PCの起動時に自動的に有効になるように、スクリプトファイル(ahkファイル)のショートカットをスタートアップに登録しておくと便利。
スタートアップホルダはスタートメニューの「ファイル名を指定して実行」から
shell:startup
とすれば開くことができる。

注意すべきことは、これは対象のアプリがアクティブな場合のみ有効ということなので、そのアプリが画面に表示されていても別のアプリがアクティブな場合は有効にならない。

ちょっと慣れが必要かもしれないが、だいぶ便利です(^-^)

 

| | | コメント (0)

2026年1月15日 (木)

【備忘録】XilinxのWebPack ISE14.7をWindows11にセットアップする

昔は電子機器開発部署の部品棚にはロジックICの74シリーズのほとんどすべてが用意されていて、これらを使って開発の予備実験や試作などを行っていたものだが、もうそんなやり方は効率が悪いので、CPLDの開発環境を導入して74シリーズを使うのはやめようと思い、Xilinx(現AMD)のXC95xxとISE14.7をセットアップしたのは2010年頃だったろうか。それでもかなり遅い。
マイコンを使えばロジックICを使うような場面はだいたい賄えるので、CPLDを使う機会はほとんどなかったが、それでもロジック回路が組める環境があると安心感があった。

※注記 XC95シリーズのCPLDは生産中止品で、開発ツールISE14.7はほとんどこのXC95にしか使い道がないので、未来があまりないが、XC95シリーズは流通在庫が豊富であり、まだ当面の間入手は可能と思われます。

2016年頃にWindows10を導入したらISE14.7が動かなくなってしまい、ときどき思い出したようになんとか動かす事はできないかいじったりしていたが、結局決定的な解決策がないまま放置して、あれから10年近くCPLDが使えない状態になってしまっていた。
2026年年初からパソコンを新調し、環境を整備していたが、このときにまた、もう一度ISE14.7を導入してCPLDが使えるようにできないかな……?と思い、ネットで調べてみると、いつの間にやらAMDのISEアーカイブサイトにWindows10、11対応のISE14.7が上がっていたので、テストしてみることにした。ただこれは、Windows上にlinuxの仮想マシンを導入して、そこにISE14.7をインストールするというやり方で、デバイスドライバやダウンロードケーブルがちゃんと動作するのか?という不安があった。
結論を先にいうと、特に問題はなく、すんなり使えるようになった。備忘録として以下にまとめておく。

Windows10またはWindows11にISE14.7を導入する場合、あらかじめOracleのVirtualBox(仮想マシン)を入れておく必要がある。私は別の用途ですでにVirtualBox7.1.10をインストールしていたので、とくに問題はなかった。
VirtualBoxが入ったら、AMDのアーカイブサイトより、
Xilinx_ISE_14.7_Win10_14.7_VM_0213_1.zip
をダウンロードし解凍したら、Windows上からxsetup.exeを実行して、あとは案内に沿ってインストールする。
※ちょっとうろ覚えだが、途中ダウンロードケーブルのデバドラを入れるチェック項目があったように思う。入れ忘れ注意!!

インストールが完了したら、VirtualBoxのVirtualBoxマネジャーを開くと、図1のようにISE14.7が追加されているのが確認できる。
(windows98seとubuntuの22.04、14.04は先に入れてあったもの。)
Virtualbox
図1.VirtualBoxにISE14.7が追加されている


このままでも動くのかもしれないが、ネットで情報収集したところ、いくつかの設定を行う必要があるらしい。
ISE14.7_VIRTUAL_MACHINEを選んだ状態で、設定アイコン(歯車)をクリックすると、各種の設定ができる。
※以下の設定は、VirtualMachineが停止している状態で行います。

上から順に、
まず一般→高度でクリップボードの共有を双方向に設定。
次にシステム→マザーボードで
・メインメモリーを6144MBに設定。
・チップセットをPIIX3に設定。
システム→プロセッサーで
・プロセッサー数を2に
・PAE/NXを有効化にチェック
システム→アクセラレーションで
・仮想化支援機能:ネステッドページングを有効化
ディスプレイ→スクリーンで
・ビデオメモリーを128MBに設定
・グラフィックコントローラーをVBoxSVGAに設定。
ネットワーク→アダプター1
・割り当てをNATに設定
USB
・USBコントローラを有効化にチェック、USB2.0にチェックを入れる。
・USBデバイスフィルターで、Xilinx USB Cable、Digilent USB Cable、Digilent USB Cable2の3つに☑が入っていることを確認。
・共有フォルダーに、Windowsと共有する任意のフォルダーを設定しておく(右の+マークで追加)。
ユーザーインターフェイス→デバイス
・共有フォルダ、クリップボードの共有にチェックが入っていることを確認。

以上で触れていないところはデフォルトのままでいいと思われる。

すべての設定ができたら、ISE14.7_VIRTUAL_MACHINEをダブルクリックするか、これを選んだ状態で起動ボタンを押すと、Linuxの仮想マシンが起動する(図2)。

Linuxforise14_7
図2.Linuxの仮想マシンが起動

これでこの仮想マシンのデスクトップ上にあるProject Navigatorをダブルクリックすれば、ISE14.7が起動する(図3)。


Ise14_7
図3.ISE14.7を起動している様子


起動できたので、簡単なテスト回路をVHDLで記述して動作確認しておく。使用デバイスはXC9572XL(PC44)。
テスト用の回路は図4に示す通り。電源の3.3Vは外部からACアダプタとレギュレータで供給し、クロックは部品箱に入っていた8.192MHzの水晶発振器を使用した。

Test_sch
図4.製作したテスト用回路


ISE14.7による回路記述は次の通り。
ファイルのNew Projectから、XC9572test20260110という名前(任意)をつけてプロジェクトを作成する。このときに、Locationに、上で設定したWindowsと共有しているホルダを指定するとWindowsからも見ることができるので管理しやすくなる。次のページでデバイスとパッケージ、開発言語(VHDL)を選択してFinishするとプロジェクトが生成される。
この状態ではソースファイルがないので、VHDLを記述するファイル(*.vhd)とピン接続を記述指定するファイル(*.ucf)を作成する。
左上ペインのプロジェクト名を右クリックして、"New Source"を選び、VHDL MODULEを選んで、"ledMain.vhd"と名前をつけてNext,Finish。同じく"New Source"から"Inplementation Constrains File"を選び、"led.ucf"と名前をつけて生成する。
ピン配置はGUIではできないのでucfファイルで行う。

今回記述したテスト用のledMain.vhdは次の通り

--ここから
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;

entity testmain is
    Port ( LED1 : out  STD_LOGIC;
           LED2 : out  STD_LOGIC;
           clk  : in   STD_LOGIC
);
end testmain;
architecture rtl of testmain is
signal ledcnt : unsigned(19 downto 0):="00000000000000000000";
signal led_sig : std_logic:='0';
begin
process(clk)
begin
if(rising_edge(clk)) then
  if ledcnt = to_unsigned(1000000,ledcnt'length)then
    led_sig <= not led_sig;
    ledcnt <= to_unsigned(0,ledcnt'length);
  else
    ledcnt <= ledcnt + 1;
  end if;
end if;
end process;
LED1 <= led_sig;
LED2 <= not led_sig;
end rtl;
--ここまで

これはクロックを100万カウントするごとにLED1を点滅させる回路で、LED2はLED1の反転。

次に、led.ucfは次の通り。

--ここから
# Clock
NET "clk" LOC = "P5";

# LEDs
NET "LED1" LOC = "P18";
NET "LED2" LOC = "P19";
--ここまで

vhdとucfが書けたら保存して、ledMain.vhdを選んだ状態で、左中段ペインのImplement Designを右クリックしてRun。
そうするとすべての処理が一括で行われて、最後に
Process "Generate Programming File" completed successfully
が出たら成功だ。

次に生成されたオブジェクトファイルをCPLDに書き込む。
製作した基板に電源とダウンロードケーブル(DLC9LPMCを使用)を接続し、
ISEのToolsからiMPACTを起動する。Warning はOKで抜けて、
まず左ペインのBoundary Scanをダブルクリックすると、右ペインに
”Right Click to Add Device or Initialize JTAG chain”
と出るので、その部分で右クリックして、"Initialize Chain"を選択。
すると、接続しているデバイスが表示されるので、"Yes"を選んでContinue。
先ほどビルドされたオブジェクトファイル"testmain.jed"をOPEN。
OKで抜けて、あとは左下ペインのProgramをダブルクリックすれば書き込まれ、書き込みが終了すると回路が動作する。
動作している様子は次の通り(動画1)。

動画1.動作の様子

コード記述でロジック回路が組めるというのは、いまだにちょっと感動します(^-^)
今回使用したXC9572というCPLDデバイスは、マクロセルという回路単位が72個入ったもので、マクロセルというのはざっとフリップフロップ1個とゲート数個だと考えれば、だいたい実装可能な回路規模のイメージができる。
今回は8.192MHzのクロックを100万分の1に分周してLEDを点滅させていて、100万分の1は大体2の20乗分の1なのでごく大雑把にはDフリップフロップ20個程度だと考えればよい。実際のところ、ISEのFitter Reportを見ると、72個のマクロセルのうち22個を使ったと書いてあるので、ほぼ計算が合う。

実務上はそれほど使う機会が多いとは思えないが、逆にこの程度の規模のCPLDでなにかおもしろいものができないか考えるのも面白いかもしれない。

 

| | | コメント (0)

パワーアンプ用スイッチング電源の起動不良

動画1.パワーアンプ電源のヒカップ(hiccup:しゃっくり)現象
(右側のスイッチング電源の緑LEDと、中央のコンデンサ基板のピンクLEDがチカチカしています。)


長らく使っている無帰還パワーアンプですが、どうもこのところ電源スイッチを入れるとスイッチング電源が起動に失敗し、ヒカップ動作に陥るようになってしまいました。ヒカップとは、スイッチング電源の過電流保護動作によって、しゃっくりのようにON→保護によりシャットダウン→ON→保護により……を繰り返す現象のことで、すんなり電源がONになることもあれば、ヒカップに陥って、もう一度電源を入れ直さないとONできないこともあります。ヒカップ現象の様子を動画1に示します。

このアンプを製作してから長らく問題なく動作していましたが、ここ最近はかなりの頻度でヒカップ現象が起こるようになったので、原因の調査と対策を行いました。

まず原因ですが、スイッチング電源の使い方が仕様外でした。申し訳ございません。
もし無帰還25WまたはFET入力無帰還25Wを、製作例通りCincon社製スイッチング電源CFM60S240を使用して製作された場合は同じ不具合が出る可能性があるので、本記事の内容にしたがってスロースタート回路を追加するか、スイッチング電源の出力に入れる平滑コンデンサを2500μF以下にしてください。

今回の不具合の原因は、スイッチング電源の出力につけた平滑コンデンサ(4700μF)が電源の負荷として重く、電源が起動に失敗するというもので、これは製作例に記載したCincon社製スイッチング電源CFM60S240の仕様書を読むと負荷コンデンサは2500μFとなっているので明らかにオーバーしています。仕様書はちゃんと読まないといけませんね(^-^;

ダウンロード - datasheetcfm60sseries.pdf

それはこの仕様書の3ページ目の、"Load Capacitance"のところに記載されていました。
つまり外付けの平滑用のコンデンサは2500μF以下にする必要があります。


製作例にも書いた通り、従来は±24Vの両方の電源出力に4700μFの平滑用ケミコンを付けていました。なので、これをそのまま使えるように、スロースタータ回路を製作しました。回路を図1に示します。


Delay_sch
図1.ヒカップ対策用スロースタート回路

図1の回路中、C1とC4の4700μFが平滑用のコンデンサです。電源ON時に、このコンデンサにドカッと充電電流が流れることでスイッチング電源の保護回路が働いてヒカップ状態に陥るので、対策としてMOSFETで充電電流を緩やかにします。そのためにゲート入力電圧を100kΩと47μFでゆっくり上昇させています。47μFと並列に入れた100kΩはゲート電圧が最大定格を超えないようにすることと、47μFの放電のために付けています。FETは部品箱に大量に入っていたIRFW540で、これは以前秋月のお楽しみ袋に入っていたものです。定格は100V28A、ON抵抗は52mオームです。50V10A以上で、Vgsが5V前後でON抵抗が0.1Ω以下のMOSFETならおおむね大丈夫だと思います。
マイナス側の回路はPチャネルを使って上下対象にしたほうが見た目かっこいいですが、部品の入手性が良くないので、同じデバイスを使って同一回路としました。

配線してしまってから写真を撮っていないことに気がついたのでわかりにくくなってしまいましたが、写真1に実装の様子を示します。この裏側に4700uFのコンデンサが2本付いています。
スイッチONの様子を動画2に示します。

Imgp5021
写真1.スロースタート回路実装の様子

動画2.スロースタート回路による対策後の電源ON


そういうわけで、4700uFでも安定して起動できるようになりました(^-^)



| | | コメント (0)

2026年1月 9日 (金)

格安タブレット P85T のバッテリー交換   

20240920p85t_20260109123401

関連記事:格安タブレット TECLAST P85T の不具合と対処方法


2024年の夏に約9500円で購入したTECLASTの格安タブレットP85Tだが、予想より早く電池が劣化し、2025年末には実用上かなり厳しい状態となった。

今回の電池寿命による症状は、従来とは様子が異なっていて、電池残量が80%とか、まだまだ余裕がある場面で突然電源が落ちるというものだ。故障かもしれないと思いいろいろ調べてみたが、どうやら電池がくたびれてきて内部抵抗が上がってくると、突発的な電流増加のときに大きな電圧降下が生じ、リセットしてしまうということらしい。
これは高性能で演算能力の高いCPUに対して、AIなど高負荷なアプリを使用したときに起こるらしく、確かに最初にこの現象が出たときも、AIによる詰将棋をやっているときだった。
この現象が出始めたのが2025年の10月頃だったので、購入からわずか1年2ヶ月ほどだ。ただ、突然落ちる場面もそれほど頻度が高くはないし、バッテリーも半日以上もつ状態だったので、まだしばらくは大丈夫だろうと、だましだまし使っていた。
そこから2ヶ月が過ぎて、年が明けてからは、AI詰め将棋だけではなく、ほかのアプリを使っているときでも突然落ちる頻度が増えてしまったので、電池の交換に踏み切ったのだ。

以下にP85Tの電池交換を記すが、リチウムイオン電池は発熱発火などの危険を伴う電池であるため、自己責任でお願いします。

さて、まずは蓋を開けて電池サイズを測ったところ、102x98xt3.5ほどだった。電池の写真を写真1に示す。

P85t_orgbatt00
写真1.元々入っていた電池。3410298というモデルナンバーはそのまま寸法をあらわしている。

Model:3410298
と書いてあるが、これは厚さ3.4mm、102mmx98mmという寸法をあらわしているようだ。
写真2に接続の様子を示す。

P85t_orgbatt
写真2.オリジナルの電池の接続

オリジナルの電池は6ピンのコネクタで接続されていた。赤2本が+、黒2本が-(GND)、黄色が温度検知用サーミスタ、そして青が謎なのだが、観察したところディスプレイのON/OFFを示す信号が来ていた。なんのために電池に接続されているのかは謎のままだ。
交換に使えそうな電池を探したところ、aliで同じくらいのサイズのものを見つけた。購入した電池のリンクを付けるつもりだったが、いま見てみるとすでに販売されていない。試してみたい方は同サイズでコネクタが付いたものを自力で探してください。
購入品はコネクタピッチは同じで、配線が赤赤白黒黒となっていて5ピン、白はサーミスタで、1本足りないが挿入は可能なので、装着してみたところ動作はOKのようだ(^-^)(写真3)

P85t_battconnect
写真3.新しい電池をコネクタに接続。1本足りないが装着できて、動作OK。


さて、この作業の最大の難所は蓋開けだ。
この手のタブレットはネジ止めではなく強固なパッチン止(はめ殺し)で蓋が閉まっているため、開けるのはかなりのテクニックと慣れが必要だ。今回は0.15から0.2mmほどのステンレスの隙間ゲージをじわじわ差し込んで拠点を作り、そこに細いマイナスの精密ドライバを入れてこじ開けたが、かなりの難易度で、ここを乗り越えなければ電池交換はできない(写真4)。

P85t_open
写真4.タブレットのこじ開け作業。P85Tは側面下側から50mmの箇所にヘラを差し込み拠点にするとよさそうだ。

また、この作業に入る前に注意したいのが、SDカードの取り出しだ(写真5)。SDカードが入ったまま無理やり開けようとすると、SDカードホルダを壊してしまうので、要注意だ(写真5)。

Sdcard
写真5.SDカードは忘れずに抜いておくこと!


もう一つ気をつけたいのが、スイッチのところに付いている樹脂製のスイッチボタンだ。これを折ってしまったり、なくしたり、再度蓋を閉めるときに入れ忘れないように注意が必要だ(写真6)。


P85t_sw
写真6.プラスチックのスイッチパーツを無くしたり破損したり付け忘れたりしないよう注意。


今回入手した電池のコネクタは5PINで、1ピン少ないため、抜けやすくなっている。抜けないようにセロテープなどで補強するといいかもしれない。新しい電池を装着した様子を写真7に示す。ちょっとピンボケになってしまった。申し訳ない(^-^;

P85t_all
写真7.新しい電池装着の様子。コネクタリードが長いので、うまく収まるようにループさせる。


そういうわけで、これであと1年くらいは使えるのではなかろうか(^-^)


| | | コメント (3)

2025年11月26日 (水)

SDRドングルでAM受信(2) 【基板頒布あり】

Blogpcballover
図1.ワンセグチューナードングル用クリスタルコンバーター基板

前回の記事もどうぞ!

というわけで、少し前に安価なワンセグ用USBドングルとフリーソフトSDR#でAMラジオを受信する実験を紹介しましたが、その後回路を改良し、定数を見直した結果、かなり感度アップして放送局によっては実用レベルとなったので、基板を起こしました(図1)。

実験室は東京都中野区の鉄筋マンションの3階で、室内に7mほどのビニル線アンテナを張って実験していますが、各局の受信状況は次のとおりです。

NHK1(594kHz)

NHK2(693kHz)

AFN(810kHz)

TBS(954kHz)

文化(1134kHz)

NHK1、2はまあまあ聞き取れるレベル、AFNとTBSは十分実用レベル、文化放送はかろうじて何かが聞こえるレベル、ニッポン放送はほとんど聞こえない、という状況です。

SDR#での各局のスペクトルは次のとおり。

20251126_crycon_sdr_all_freq
図2.受信スペクトル


このように、受信強度は前回に比べるとかなり改善しました。

今回製作した基板の回路図を図3に示します。

Blog_sch_20251128143301

図3.今回製作した基板回路図(きれいな図面を見たい方は記事末尾のマニュアルをDLしてください。)


回路左側のJ3(アンテナ入力)にアンテナ線を接続し、回路右側のJ4出力から、ワンセグチューナーのUSBドングル(DS-DT308SV
)のアンテナ入力に接続しています。

アンテナ入力(J3)から入力したRFを信号を、NJU77701(34MHz CMOSオペアンプ)で増幅し、トロイダルトランスを使ったDBMに入力します。局部発振器は100MHzとし、電源はパソコンのUSBポートから供給しています。

前回の記事で紹介した受信音声では、ブーンという100Hzのノイズが聞こえたため、その後追求したところ、パソコンのACアダプタからかなり強力な100Hzのリップルが出ていて、USBアイソレータを使ったり、基板の電源をバッテリーに換えたり、アンテナと基板をPCから離すなどの対策をしても解決しませんでしたが、ACアダプタを交換したらウソのようにノイズが消えました。ACアダプタのケミコンがへたっていたか、それともそのACアダプタの仕様なのか……AMはかなりノイズの影響を受けやすいのですが、今回はACアダプタの交換によってパソコンのUSBからの電源供給でもほぼ問題のないレベルにできました。使用するPCやACアダプタ、その他の状況によってはノイズ対策が必要になる可能性があります。

今回は局部発振器を100MHzとしました。そうすると理想的にはたとえば810kHzのAFNは100.810.000Hzになりますが、100MHzの発振器に誤差があり、実際の100MHz発振器の周波数は100.001940MHzでした(図4)。

   Xtaloscfreq
図4.100MHzの局部発振器の周波数は100.001940MHz


そのため、810kHzのAFNの受信周波数は100.811940となってしまい、見づらいので、SDR#の周波数シフト機能を使って表示周波数をシフトします(図5)。


  F_shift_marking
図5.周波数をシフトすることで、AFNの周波数表示を810kHzに調整する


左下の枠で囲った部分がshift設定で、さきほど局部発振器の周波数が100.001940MHzだったので、shift値に-100.001940を設定して、shiftにチェックを入れると、AFNがぴったり810kHzに表示されます(^-^)

今回は周波数の変換がわかりやすいように局部発振器の周波数を100MHzにしましたが、この機能を使えば、局発にどのような周波数を使っても気にする必要はなくなります。

今回の基板では、追加実験のために、局部発振器を7050サイズの表面実装発振器のほかに14P DIPサイズの長方形型発振器、同じく8P DIPサイズの正方形型発振器、それに74HCU04(DIP)とHC-49パッケージの水晶発振子を使ったオシレータなどに変更できるように実装パターンを用意しています。
また、RFプリアンプについても追加実験ができるよう、SOT-23-3、SOT-89-3、SOT-343-4、SOT-363-6の各実装パターンと、2.54ピッチユニバーサルスペースを設けています。
電源はUSB-CのVBUS(+5V)となっていますが、2.5ピッチ2ピンコネクタからの電源入力(3.3~5V)も可能です。


民法AM放送はあと3年ほどでほとんど廃止になってしまいますが、この機会にSDR#でAMラジオ受信に挑戦してみるのもおもしろいと思います。


今回製作した基板を次のとおり頒布します。
今回は生基板の他に、
チップ部品実装済みで、リード部品とトロイダルコア2個、コイル用0.2Φホルマル線、ドングル接続用MCXコネクタ付き同軸ケーブルをセットした、すぐに実験・体験ができるキットをご用意しました(^-^)

マニュアルは以下リンクからダウンロードしてください。
MF_Conv_Manual.pdf


① 生基板のみ 1枚 1000円(税・送料込み)
 
② チップ部品実装済み基板 & 部品セット 1セット 3500円(税・送料込み)
チップ部品実装済み基板+リード部品、トロイダルコア、0.2Φホルマル線、MCXコネクタ付き同軸ケーブルセット
※アンテナ線とワンセグチューナードングル、電源用USB-Cケーブルはご用意ください。

ご希望の方は表題に「AMコンバーター基板頒布」、
本文にご希望のセット番号、お名前、送付先郵便番号、ご住所、電話番号をお書きのうえ、

dj_higo_officialアットhigon.sakura.ne.jp
(アットを@に替えてお送りください)

までメールをお送りください。


| | | コメント (0)

2025年11月 6日 (木)

インダクタの不思議

Nvna
写真1.高周波測定に革命を起こしたnanoVNA
2020年頃にアリエクで12000円ほどで購入。


前回、安価なワンセグチューナ用USBドングルを使用するSDRでAM放送を受信することを目的に、アップコンバータを付加する記事を書いたが、使用するDBM(ダブルバランスドミキサ)のコイルをまじめに設計して測定しておこうと思い、nanoVNAを使って作業していたら、ちょっと不思議な感じがする事象に出会ったので備忘録として書いておこうと思う。
高周波の世界の住人なら常識かもしれないが、オーディオ帯域に生息する私としては少々不思議な感じがしたのだ。

DBMに使用するトロイダルコアトランスの、コアや巻き数を変えて何パターンかを作って、それが狙い通りのインダクタンスになっているかどうか確認作業をしていた。その作業中、ふと、

「バイファイラ巻きにした2巻線の両端をそれぞれ接続して並列接続にしたもののインダクタンスはどうなるんだろう?」

つまり、断面積が2倍の導線を同回数巻いたのと同一(インダクタンスは等しい)なのか、それとも個別のインダクタを並列に接続したの(インダクタンスは1/2)と同等だと考えるのか。
コアが共通で、コイルを通過する磁束は共通しているので、前者になりそうな気がするのだが、どうも確信が持てないので、nanoVNAで実測してみることにした。

測定対象は、以前アリエクで購入した外径8x内径4xt3の特性不明なフェライトトロイダルコアに、Φ0.2mmホルマル線を、①2巻線分離で5T(5回巻き)、②2巻線バイファイラで5T、③比較用として単線で5Tの3種類のトロイダルコイルを用意し(写真2)、①、②の2巻線のものについては、2巻線をそれぞれ単体で測定(他方はオープン)、および2巻線を並列接続して測定、の組み合わせで、周波数を1MHz、100MHzの2とおりで評価した。
測定結果を表1、表2に示す。

Inductors
写真2.測定対象のトロイダルコイル
左からバイファイラ5T、分離巻き5T、単線巻き5T


表1.1MHzでの測定結果
L1mhz

表2.100MHzでの測定結果
L100mhz


まず、表1の1MHzでの測定結果は、予想通りいずれの巻き方においてもインダクタンスは同等の結果となった。つまりバイファイラでも分割巻きでも、同じコア上に同回数巻いたコイルの並列接続は、単線の同回数巻きのコイルと同等ということだ。

次に同じ測定を100MHzで行った結果を表2に示す。
この結果がとても興味深い。バイファイラ巻きの場合は、それぞれの単線で測定しても並列接続にして測定してもほぼ同じ結果となり、これは単線巻きのみのものともほぼ等しくなった。
ところが、同じコア上に分離して巻いた場合は結果が異なっている(表中赤文字)。
分離巻きの各単線のインダクタンスは、バイファイラ巻きの場合のおよそ1.7倍、そしてこれらを並列接続するとインダクタンスは半減している。

バイファイラ巻きと分離巻きでもっとも違うところは、2巻線の線間容量だろう。1MHzという低い周波数では線間容量は無視できたが、100MHzでは顕在化したということか。
また、分離巻きで並列接続時に、個別のインダクタンスのおよそ半分になっているのは、2巻線間の結合係数の低下が原因だろうか。周波数が上がって、結合係数が低下するということは、周波数の上昇に伴い透磁率μが低下しているからとも考えられる。
そうすると、今回使用したコアは、100MHzではかなり性能が低下している可能性がある。ちなみに、今回使用したトロイダルコアでは、インダクティブからキャパシティブに転じる周波数は約350MHzだったので、100MHzではまだ余裕があるように思う。

そういうわけで、数MHzから上の帯域を扱う場合はオーディオ領域の感覚ではなく、厳密に物理的に考える必要がある、ということがわかった。

ところで、今回測定に使用したnanoVNAは、高橋知宏氏が2016年頃に個人的に開発したものが世界に広まって進化したものだそうだ。これまでVNA(ベクター・ネットワークアナライザ)は企業の高周波開発部隊にしかないような、大変高価(数百万円~数千万円)な計測器で、個人で所有するようなことはまず考えられなかったし、企業であっても高周波を専門に扱う部門でなければ縁がなった。つまり高周波は計測の敷居が高いので、小規模の開発グループや個人では、なかなか定量化して事象を考察したりすることが難しく、どうしても出たとこ勝負や勘や経験に頼る傾向が強かったように思う。ところがnanoVNAが世に出たおかげで、高周波の測定、解析の敷居が大幅に下がり、理詰めで検討することが容易になったことは非常にありがたいことで、これはここ10年で起こった大革命だといっても過言ではないと思う。髙橋知宏さん、ありがとうございます。


| | | コメント (0)

より以前の記事一覧