2025年2月20日木曜日

Σsinkx/k の求め方で苦戦

 ルベーグ積分 理論と計算手法 P183 例8.9(1)で、


Σsinkx/k=(π-x)/2  (2π>x>0)になる理由がわからず、苦戦。

log(1-z)を微分し -1/(1-z) = Σz^n なので

積分して  log(1-z)=-∫Σz^n dz =-Σ∫z^n dz  = - Σ z^(n+1)/(n+z) 

 = - Σ z^n/n  (Σが n=0からとなっていたのをn=1からとすることで変形)

これを使うと

Im(log(1-e^ix))=-ΣIm(e^ixk)/k   = -Σ sin kx /k

これは arg(1-e^ix)=-(π-x)/2 (0<x<2π) でもある

∵)log(re^ix)=logr+log(e^ix)=logr+ix

∵) 1-e^ix=(1-cosx)-isinx      r=√((1-cosx)^2+sin^2x =2sin(x/2)

 -sinx / 2sin(x/2)=sinΘ なら Θ=-(π-x)/2になる。

∵) 2sin(x/2)sin((π-x)/2) = sinx  このへんは地道に三角関数の計算を確認すると

  確かにそうなる。それにしても計算が大変だった。

フーリエ級数使うともう少し楽に計算する方法もありそうなので、そちらも試してみたい。

追記(2/22):その後、ディリクレージョルダンの定理(P182)を使うと、計算できることが確認できた。

f(x)=-x/(2π)+1/2*sgn(x) として bk=1/kとできるので、これを定理に適用するといいようだ。最初うまくいかなかったのは、ちょっとした計算ミスのためだった。だいぶ遠回りしてしまった。

ついでに、(2)も解いていみた。

x∈(-2π,2π)を x'=x/2∈(-π,π)とすると  2Σsin2kx'/2k=Σsin2kx'/k=-x'+π/2*sgnx'

(1)より 2(-x/2+π/2*sgnx)=2Σsinkx/k=2( Σsink2x/2k   + Σsin(2k-1)x/(2k-1) )

=-x+π/2*sgnx  + 2*(求めたい式)となるが、これを整理すると

 求めたい式= Σsin(2k-1)x/(2k-1)=π/4*sgnxとなる。

PC用CW発振器(ツインT型)作成

 peanutでは、PCでCW交信ができるようになっているが、そのための発振器を作ってみた。最初、2SC1815と2SA1015を組み合わせた簡易的なものを試したが、周波数がうまく変えられなかったので、ツインT型を試したらうまくいった。入力はUSBへの変換アダプタを使うことにしている。

以前作成したPICによるキーヤーのコレクタ部分に上記回路のアースを接続することで、うまく動作させることができた。

追記:送信練習用に、以前作ったモールスデコーダにもつなげるようにしてみた。ただ、音量が不足していたので、こちらのサイトを参考させていただき、一石のアンプを追加した。マイクを通さず、デコーダにつなぐと、雑音の影響がなくなり、ほぼ100%の認識率になるようです。送信練習にはとても役立ちます。


2025年2月10日月曜日

圏論の「積の定義」について考える

 Youtubeの圏論勉強会1回目で対(積)の定義が最初に出てくる。正しいのかどうか、いまいち自信はないが、自分なりに少し考えてみた。

 型A,Bの対とは、型P , 関数first:P→A , second:P→B からなり、任意の型Xと任意の関数f:X→A , g:X→B に対して , 以下の図式が可換となるような u:X→Pが 唯一つ存在するものである。 というのが定義らしい。

             X
                       f↙        ↓ u       ↘ g
        A  ←   P →   B
                           first         second

public class Pair<T, U>
{
    public T First { get; set; }
    public U Second { get; set; }
 
    public Pair(T first, U second) {
        this.First = first;
        this.Second = second;
    }
.............   こんな感じで、プログラミング言語でP(x,y)などpairはよく使うが。

 単に、1つめか、2つめか指定すればそれを取り出せるような仕組みのことだけれど、それを圏論的に定義すると上記のようなことになるらしい。

PはA,B型のデータを得る特定の関数を備えていて 図式で表現すると(中身を詳しく説明せず、矢印と対象だけで表現するのが圏論)
        A  ←   P →   B
                           first         second
しかし、これだけでは、A,B型への関数をもつデータ型は、Pair以外にもいろいろある(何らかの計算や処理が入っている場合もこの定義を満たす)ので、十分とはいえない。関数もいろいろある。

そこで、上記のような可換図式を使う。
 合成関数で考えると frist 〇 u = f       second 〇 u = g ① だが、定義がこれだけでは不足している。uの唯一性というのがポイントらしい。

 例えば、uが余分なデータを付け足してfirst,secondがそれを捨てる場合などでも、可換にできるが、それでは、first,secondの働きを正しく表していない。(あくまで、first,secondの働きはただ取り出すだけ、というふうに定義したいわけなので)

  余分なデータをつけたす(first,secondがそれを捨てる)→uは唯一に定まらない
対偶は  uが唯一 → 余分なデータはつけたさない(first,secondはただ取り出すのみ)
 ということで、uの唯一性があると、うまくPairを定義できたことになるということらしい。 こういうのを、普遍性による定義というらしい。

 ここのところが、非常にわかりにくい。uが一意に定まると、自動的に射影しかありえなくなるのはなぜか?  射影だと、どんなX,f,gであっても、唯一u(x)=(f(x),g(x))というものさえあればいいわけだから、これでいいような気はする。
 どんなX,f,gであっても、唯一決まるパターンとは、first,secondが射影の場合とu(x)=(f(x),g(x))の組み合わせしかないということ?だろうか。射影のところになんらかの別の射の要素が入り込むと、u(x)=(f(x),g(x))とは違うものが必要になってくる。定義の文章をよく読むと、u(x)は任意のX,f,gに対してきまるとしており、first,secondからも影響を受けることは想定してないということなのかもしれない。

2025年1月28日火曜日

JMoocに少し挑戦してみた

  無料の大学講座JMoocに興味を持ち、少し勉強してみた。修了証もらうまで行く人が1割ということらしい(無料ということとも影響している?)。単元テストは計算力を必要とされる問題が多く時間がかかった。

 抵抗2つ、コンデンサ2つを並列や直列組み合わせた回路で、抵抗値が流れる電流に影響しなくなる条件を求めよという問題や、交流回路の複素計算など、ちょっとしたミスがあるとなかなか解けなかったりする。久しぶりに、繁分数の式を変数に置き換えたり、〇.〇×10^△の形にして、少しでも計算が楽にならないか考えたり、LTSPiceなどPCの便利な計算に慣れてしまった昨今、逆に脳にはいい刺激になるかもしれないと思った。後半の三相交流の話になってくると、電力なども含めて考えると複雑になってきた。

 電気回路に続いて、電子回路も受講、電気回路が物理に近い内容で計算中心だったが、電子回路のほうほ工学的内容だった。後半は集積回路に組み込むために容量の大きなコンデンサを使わない回路の工夫について説明があった。MosFETなどHFリニアアンプの製作にもいろいろと役立つ情報があった。とりあえず、2つの講座ともなんとか修了できた。

2025年1月26日日曜日

中足骨骨頭痛

  以前から、歩くと靴の中に小石があるような痛みがあり、でも確かめると何もないという症状ががあり気になっていたが、よく調べると中足骨骨頭痛という症状らしい。足のアーチが弱くなるのが原因らしい。歩き方も踵に重心が来るように歩くといいらしい(足を前に出そうとするのでなく、上にあげてそのまま真下に落とすという感覚)。この症状が出ているときは、ウオーキングもほどほどにしたほうがいいようだ。

2025年1月25日土曜日

USB電力不足

  以前から気になっていたけれど、デスクトップPCのバスパワーUSBハブが電力不足のためか、マウス以外つなげない状態。試しに、ケーブルの途中に三又状態にして、余ったUSB充電アダプタとUSBプラグを使って5Vを追加できるようにしてみたらうまくいった(若干コネクタ部分の接触が気になる感じはあったが、PCからの経路すべてに接点復活材をスプレーしたらだいぶ改善された)。

 本来であれば、セルフパワーのUSBハブを購入すればいいのだろうけど、数千円はするので、余り物でなんとかできたので、少し節約はできたかもしれません。(というか、これ以上、5V電源アダプタは増やしたくなかったというのもありますが)

2025年1月24日金曜日

ChatGPTは計算が苦手?

 ルベーグ積分理論と計算手法P159の計算をChatGPTに聞いてみたが、書籍の答えと一致しない。

∫(0,+∞) (y/(y^x+1) - y/(y+1)^2) λ(dy) が確かlog2と答えた。

正しくは、たぶん

[ log(y^2+1) /2 -  (  y/(y+1)  -  ∫1/(y+1)λ(dy) ) ] (0,∞)  かと思う。

                                ↑部分積分

上記で計算すると確かに1になるので。

ChatGPTも、人間と同じようにまだ間違うこともあるようだ。

ChatGPTはLLMなので、どちらかというと帰納的推論?なのかもしれない。対して、wolframなどは、演繹的推論らしいけれど。。

それにしても、AIで、プログラミングもそうですが、いろんな独学もだいぶやりやすくなったと思う。

2025年1月19日日曜日

PIC12F1822(CPS)の実装

 ブレッドボードでの実験はなんとかうまくいきそうなので、実装してみた。これからケースに収める予定。静電容量計測のケーブルもコネクタで取り外しできるようにしてみた。

 前回、arduinoで灯油残量センサを作ったときは、誘導雷で壊れたこともあるので、灯油タンクまでの配線が長くなるので、サージアブソーバのようなものもつけないとだめかもしれない。
追記:CPSを測定しているが、灯油タンクに、導線2本入れて試しているものの、なぜか、測定値が安定しない。原因はまだ不明。

2025年1月18日土曜日

PIC12F1822でCPSの実験(AQM1602Aを使用)

  静電容量の変化をCPSという機能で確認できるらしいので、実験してみた。以前、灯油タンクの残量検知を超音波センサとarduinoで試したがうまくいかなかったので、静電容量を使ってできないか、そのうち試してみたいという目的もあります。

・カウントのオーバーフローするとマイナス表示になるようなので、delay関数の値を調整する必要があった。

・RA3を入力で使えるようにしたかったので、#pragma config MCLRE = OFF  #pragma config LVP = OFF とするとよいという情報がネット上にあった。(LVPの必要性はよくわからない?が)

・RA5のLED出力とRA3のスイッチ入力は、とくに機能は実装していないけれど、今後の何らかの機能が必要になったときのために、コードで反応を確認してみた。

・少しわかりにくかったのは、秋月電子のLCD(AQM1602A)のコントラストがコードで設定するようになっていたこと。以下の(1)は72の2の部分が4bitで (2)は0101の4bitで5で 0100が4ですが、その下位2bitのみ関係しているので、00→01→10→11 で54~57の範囲になります。
  LCD_cmd(0x72);  //Contrast set                 下位4bits...(1)
    LCD_cmd(0x54);  //Power/ICON/Contrast Control  下位2bits...(2)  
   (2)と(1)あわせて 2^6=64 stepの範囲から指定するという意味だった。((2)のほうが上位)   ※5Vだと上記ぐらいの値だけれど、3.6v(ニッケル水素充電池3本)だと、(1)0x73 (2)0x55ぐらいが必要だった。



2025年1月17日金曜日

デスクトップPCをraspi経由で電源On

 PCの電源Onは、USB、内部タイマー、キーボード等々いろいろあるけれど、スリープ状態にするため、夜間勝手にアップデートなどでOnなるのも気になるので、完全にraspiで操作できるようにしてみた。

 PCの電源は、導通でOnなので、例によってトランジスタ2sc1815を使った。raspiのGPIOは出力が3.3Vで、前回ブルーレイな場合と同じ回路(raspiのGPIOからトランジスタ経由でPCスイッチへ)にしてみたらうまくいった。最初、マザボピンの分岐コネクタに手持ちのピンでつないだが、接触不良起こしやすいようだったので、はんだ付けにする。PCの余分な穴にDC電源用のソケットをグルーガンで固定して、raspiとの接続ケーブルを取り外しできるようにした。(raspi側にも同様にソケットをつける。)

2025年1月14日火曜日

極限の計算のコツ

ルベーグ積分理論と計算手法P152 あたりで、ちょっとした極限の計算が分からない。最近は、どうにも解決できそうにないときChatGPTに聞くことにしている。

 1<α<3   lim x→0   (sinyx-yx/(1+x^2))/αx^α が、さらっと0になることが書いてあるが、理由がわからなかった。

 こういうときは、いろいろ展開を使うといいらしい。

   sin yx = sin0 +yx*cos0 -(yx)^2*sin0/2! -(yx)^3*cos0/3!.....

        =yx-(yx)^3/6   ①

       1/(1+x^2)=1+(-x^2)+(-x^2)^2+(-x^2)^3+.....

        なので  yx/(1+x^2)=yx(1-x^2+x^4...)=yx-yx^3+yx^5.....  ②

   与式=(①-②)/αx^α=(y-y^3/6)x^3... /αx^α だが

     α<3より  3-α>0 で x→0なら  確かに x^(3-α) → 0がいえるようだ。(最初、ChatGPTも途中の計算間違っていたので、再度、確認したら正しい説明をしてくれた。やはり、ChatGPTにとっても少し難しくなるとミスもしやすくなるんだろうか?)

 学生時代にこういった勉強も多少はやったはずだけど、ほとんど記憶に残っていない、やはり使わないと忘れてしまうようです。


2025年1月13日月曜日

raspiで秋月のSSR操作

 raspiにSSRを組み合わせてタイムスイッチつくってみた。

秋月電子のSSRキット(ゼロクロス、25A)を使った。100Vなので絶縁には細心の注意が必要。たまたま、先日、分解廃棄したDVDレコーダの中からヒートシンクを取り出していたので、早速活用。

フォトカプラを使っているようで、入力で15mmA消費とあったので、raspiのGPIOでも許容範囲であり、そのままつなげている。

ChatGPTに助けてもらい、以下のようなスクリプトを使ってうまく動作させることができた。(rapiでは、OSの中にすでに以下のようなスクリプトが使える環境がある)

*****ssr_control.sh**********
#!/bin/bash
GPIO_PIN=3  # GPIO3
if [ ! -d /sys/class/gpio/gpio$GPIO_PIN ]; then
    echo "$GPIO_PIN" > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio$GPIO_PIN/direction
fi
if [ "$1" == "on" ]; then
    echo "1" > /sys/class/gpio/gpio$GPIO_PIN/value
elif [ "$1" == "off" ]; then
    echo "0" > /sys/class/gpio/gpio$GPIO_PIN/value
else
    echo "Usage: $0 {on|off}"
    exit 1
fi

cronを設定すれば、タイムスイッチとして使える
30 5 * * * cd /home/pi && ./ssr_control.sh on
30 6 * * * cd /home/pi && ./ssr_control.sh off

2025年1月11日土曜日

PIC16F628AでUART for Dfplayer(備忘録)

古い型のPICはDfplayerとのUART通信の資料が少なく苦労した。
arduino系と違ってPICはよりハードに近いため、通信のタイミングなどより細かい調整が必要だとわかった。外部発振子が必要だという情報もあったが、内部発振でも可能なような気もしたので、少し頑張ってみた。

確認したこと:各ポートの入力、出力の設定(TRISA,TRISB)、 内蔵発振4MHzが使えること(#define _XTAL_FREQ 4000000と PCON   = 0b00001000)、UART関連設定(TXSTA,RCSTA) Config系(FOSC = INTOSCCLKで内蔵発振を指定) SPBRG=25(4MHzと9600Bps、非同期、ハイスピードなどの条件から計算できることが、データシートに書かれている)
ここまでは、自力でなんとかできたが、問題は、UARTの送信関数

最初は
void dfply(char cmd, char parameter) {
    while (TXIF == 0);
    TXREG = 0x7E;
  ...........
としたが、これだと、データが完全に送信しないうちに次を送ろうとしてだめらしい。ChatGPTから、以下の方法を教えてもらい、試したらうまくいった。
void dfply(char cmd, char parameter) {
     while (!TXIF); 
    TXREG = 0x7E;  
    while (!TRMT);
  ....    
   
 以下のようなコードでフォルダ、ファイル番号をスイッチ長押しでカウントして取得し、Mp3を指定して再生することはうまくできた。確認のため、フォルダやファイル番号をモールス信号をLEDで表示するようにした。 

2025年1月8日水曜日

ルベーグ積分 理論と計算手法 P150

 P150で「  t ∈ R|Z で、Γ(t)Γ(1-t)sinπtが周期1である」の理由が省略されていたので、気になり、考えてみた。
Γ(n+t)=(n-1+t)Γ(n-1+t)=.....=(n-1+t).....tΓ(t)    ①
{1-(n+t)}Γ(1-(n+t)) = Γ(1- {(n-1)+t})
[1-{(n-1)+t}]Γ(1-{(n-1)+t}) =  Γ(1- {(n-2)+t})
......
{1-(1+t)}Γ(1-(1+t)) = Γ(1-t)     
これより、 Γ(1-t)={1-(n+t)}.....{1-(1+t)}Γ(1-(n+t)) ②
①、②より
Γ(n+t)Γ(1-(n+t))=(n-1+t).....tΓ(t)×Γ(1-t)/{(1-(n+t)).....(1-(1+t))}
=(-1)^n  Γ(t)Γ(1-t)
ここで  sinπ(n+t)=(-1)^n sin πtなので
Γ(n+t)Γ(1-(n+t))sinπ(n+t)=(-1)^n  Γ(t)Γ(1-t)  (-1)^n sinπt
=(-1)^2n  Γ(t)Γ(1-t) sin πt = Γ(t)Γ(1-t) sin πt  n∈Zなら これより、周期1を示しているだろうと、考えた。

2025年1月7日火曜日

室内室外温度計修理

 長く使っていた温度計が突然壊れた。最初表示されないので、電池接触かと思い、確認したら液漏れしかけた電池があったので、交換。それでもだめなので、接点復活材を使う。今度は表示されたが、操作ボタンが反応しない。操作ボタンの接触不良を疑い、裏ブタを外して、接点復活材を使う。これで、ようやく使えるようになった。電池で使うようなものは、ほとんど酸化被膜が原因の接触不良が多いので、部品交換せずに修理できるようだ。

 便利なものがあれば、それなりに故障もあるので、メンテナンスで手間はかかる。買い替えよりは、修理のほうが、環境にもやさしいかもしれない。



2025年1月6日月曜日

IRF510リニアアンプ回路をLTSpiceで解析(備忘録)

 これまで、回路はQucsを使ってきたが、少し部品数が多くなると計算に時間がかかるので、LTspiceにしてみたら、使いやすくしかも速度もだいぶ早くなった。

<使い方>
・トランスはコイルをL1 L2を2つ並べ、インダクタンスを設定したら、テキストでK1 L1 L2 1のようにL1 L2の関連にK1等のラベルをつけて、関連づける。
・回路内で変数を使いたいときも .param r=3Kなどのように設定ができる。{}で囲んだ中に式を入れる。

2025年1月3日金曜日

Qucsで電流制限回路をシミュレートしてみた

 1Aに電流を制限する回路を、書籍を参考にシミュレートしてみた。最初、うまくいかなかったが、電圧を1 0Vと数値と数値の間に空白を入れてご入力したのが原因だった。エラーをもとに、line番号から設定ファイルをよくチェックするといいようだ。

負荷の抵抗が正常だとI=E/Rで計算した電流が流れるが、数Ω程度にすると、オームの法則で計算した値より抑えられほぼ1A程度に制限されることが確かめられた。


2025年1月2日木曜日

QucsのDCバイアス計算(備忘録)

 QucsでDC回路のシミュレーションできないか試してみた。

・電流計は、すでに導線がつながっているところに、電流計をのせるようにしておかないとだめだった。実物では、いったん線をはずして、電流計につなぐので、ここを勘違いして、最初はなぜだろうと不思議に思ったが、何のことはない、はずさないとうまくいった。

・シミュレーションとして「DCシミュレーション」を回路図上にもってくる。

・メニューのシミュレーション>DCバイアス計算 とすることで、回路図上に各点の電位や電流計の電流が表示された。

 実際に回路を配線しなくても、事前にいろいろ試せるので便利である。