日々ブログ

日々ブログ

当サイトは、アフィリエイトプログラムにより商品をご紹介しています

正の周波数と負の周波数とはなにか

久しぶりのお勉強の話です。
学生時代にざっくりと理解していたものを改めてブログに書き起こすことで自分なりの理解を深めようと思います。

↓数式が嫌いだけど物理的な意味合いとして理解したいときの本

周波数とは

周波数とは、1秒間に振動する波の数を指します。
中学校とか高校とかで学ぶものですね。
たとえば、下の図なんかでは周波数は2となります。

ここまではおそらく高校の内容なので受け入れやすいです。
ただ大学になると、周波数を求めるフーリエ変換というものを学び、sin2t の周波数をフーリエ変換したものは+2と-2であると学びます。

結果、1秒間あたりの波の数がマイナスってどういうこと?ってなるのがよくあるつまりポイントです。
というより自分も詰まりました。
今回は、周波数がマイナスになることをできるだけ数式を使わず意味合いから考えて行きたいと思います。

単振動について考える

そもそも、周波数についてしっかりと学ぶのは高校の物理の単振動だと思います。
単振動とは何だったかについて考えると、単振動の前座として学ぶのが円運動が基礎となっており、円運動を一方向から照らしたときの影の動きだと説明されます。
たとえば、1秒間かけて1周する円運動の影は下の図のようになります。
左側からライトを当てたときの影の様子が右図でいい感じの正弦波になっていて、周波数が1であるのがわかりやすいですね!

円運動の向きを逆向きにしてみる

次に、円運動の動きを逆向きにしてみます。
円運動の向きは時計回りになっていますが、その影は同じく正弦波です。
周波数を1秒間あたりの波の数とするならこちらも上の例と同じく周波数1となります。
円運動のときには区別できていた回転の向きが、単振動に置き換えられることで区別がつかなくなっています。 これがフーリエ変換との相性が悪い正体です。

結論:正の周波数は反時計周りの円運動で負の周波数は時計回りの円運動に対応

回転運動を区別できないと不便なので、周波数に正と負の概念を付け足しましょうというのが大学の内容となります。
つまり、反時計周りの円運動が正の周波数で時計回りの円運動が負の周波数に対応することになります。

数式で表すのが分かりやすいので、数式を使うと反時計周りの円運動は下の式になります。

 \displaystyle
\left\{ \,
    \begin{aligned}
    & x_{反時計回り} = \mathrm{cos} (\omega t) \\
    & y_{反時計回り} = \mathrm{sin} ({\omega t}) \\
    \end{aligned}
\right.

時計まわりの円運動は上の式のyを-yに置き換えればよいので、下式のようになります。

 \displaystyle
\left\{ \,
    \begin{aligned}
    & x_{時計回り} = x_{反時計回り} =  \mathrm{cos} (\omega t) = \mathrm{cos} (-\omega t) \\
    & y_{時計回り} = -y_{反時計回り} = -\mathrm{sin} ({\omega t})=-\mathrm{sin} ({-\omega t}) \\
    \end{aligned}
\right.

とちょうど、周波数にマイナス符号をつけたものとなります。

話をフーリエ変換に戻します。
フーリエ変換はこうした回転運動の向きを加味した波の数を導き出す処理なので、回転の向きを考慮しない単振動に由来する正弦波をフーリエ変換すると、時計回りの円運動と反時計周りの円運動が区別できなくて両方出てくるわけですね。

おまけ1:高校で習った周波数は波数という考え方に置き換わる

高校までにならった単位時間のあたりの波の個数という考え方は、大学などでは波数という考え方に変わります。
波数の定義は、単位長さあたりの波の数でしたの式で表されることが多いです。

 \displaystyle
k=\frac{1}{\lambda}

回転の向きを考慮して単位時間あたりの波の数を表しているものが周波数、回転の向きは考えず単に単位長さあたりの波の数を表しているのが波数となります。

おまけ2:正の周波数と負の周波数を区別できて単振動を表すのがオイラーの公式

若干語弊があるかもですが、正の周波数と負の周波数を区別して表すことができる単振動の式がオイラーの式に該当します。
より正確に言うと、実数と虚数を上手く使ってやることで円運動を表しています。

 \displaystyle
e^{i \theta}=\mathrm{cos} \theta + i \mathrm{sin} \theta

【暮らしのお話】Nitendo Switchのファンがシャカシャカうるさいので自分で分解・交換した

購入してからおそらく5年くらい経つNintendo Switchですが、最近ファンがすぐに回転するようになった挙げ区、シャカシャカと異音がするようになってました。
うるさいくらいなら我慢すればいいか~と思ってましたが、モンハンをやっているとついに温度が上がりすぎて止まってしまいました。
Nintendo Switch2も発表されたところで、今から新しいものを買うのは少々気が引けるので自分でファンを交換してみました。
分解するとメーカーのサポートも受けられなくなるでしょうが、まあ失敗したらNintendo Switch2を買えばいいという覚悟でやってみました。
時間はかかりますが、自分で交換できない!ってほどではありませんでした。

交換部品

交換部品は通販で購入できます。
ファン単体なら1000円程度なのでリーズナブルです。


ドライバーがプラスではなくY字のものが必要なので、交換に必要なものがすべて揃った交換キットにしました。


さっそく分解する

さっそく分解します。
届いた部品と本体はこんな感じです。

実際の分解は下記のサイトがかなり丁寧で分かりやすかったです。
ネジを20本くらい取り外すので、また同じような種類のネジも多いので、分けながら分解した方が良いです。

jp.ifixit.com

まずは、Y字ドライバーで背面のネジを4つ取り外します。
これ以降は、基本的にプラスドライバーとなります。

次は、上面と底面のネジを取り外します。

底面側のネジが自分のSwitchでは噛み合わなくなったみたいで、回しても引っかかて外れませんでした。
前面と背面を押したり緩めたりして何とか取れました。

横(左右)面の真ん中のネジだけを取り外します。

microSDの差し込み口のネジも取り外します。

ここまでくれば背面が取り外せます。

密閉されてるはずですが、めちゃくちゃゴミが溜まってます。
ファンの故障もホコリが原因そう。

次にmicro SDのネジを取り外します。
このネジだけ3.1mmでほかは3.0mm なので確保するのがおすすめです。
プレートを外します。


ここからが小さなパーツが多くてややこしいです。
右下のバッテリーパックは電源が通ってるので先に外しましょう!
感電はシャレにならないですから!

スポンジで止められてるやつを取ります。
ただ、めちゃくちゃやぶれやすいです。
自分はもう気にせずビリビリにしました!。
ファンに黒いのがこびりついてます。


結線を外します。

ネジも外します

次にファンの線を外し、ネジも外します。

最後にファンの残り2つのネジを外せばファンを取り出すことができます。
もう、ファンからホコリが見えてますね!

結構ホコリが入り込んでます。

取り出したファンはこんな感じです

あとは、ファンを交換して逆の手順で部品を取り付ければ完了です。

【暮らしのお話】Amazonセールの前にkeepaとサクラチェッカーでチェックするのが便利

Amazonを最近良く使うのですが、primedayやらblack Fridayやらセールが最近やたら多いです。
で、同じ商品であっても価格変動がかなり大きいです。
逆にセールであっても、ポイントが多くもらえるだけで値段は別に安くなかったり、何だったら高いものもあります。
最近は、Keepaで価格を確認してから買うようにしてます。
セールだと思って買ったのに実は損してるってなったら嫌ですもんね。

keepa.com

上の検索コマンドから商品名を検索すると価格の履歴が見れます。
Ankerの充電器ですが、セールのたびに値段が下がってますね。
ただ今回のスマイるSALEは最安値では無いです。
買ったあとで最安値じゃないとわかったときはめちゃくちゃく損した気分になるので、購入前に調べるようにしてます。
Amazonには、定価が調べても出てこないようなマイナーな商品も多いので、これを使えば高値づかみも防げます。

Chrome拡張機能をインストールしておけば、Amazonのページに価格履歴が表示されるようになります。

ついでに、バッタモンを掴まされないようにサクラチェッカーも便利ですね。
Amazonのレビューはサクラが多くて信用ならないですし。

sakura-checker.jp

正直、Amazon楽天市場化してる感が否めない。
こういう、買い時を考えなくてよいのが個人的にAmazonの強みだったのにな~。

【暮らしのお話】何だかんだ卵の値段って元戻ったよね

物価上昇が続いていますね。
ガソリン、インスタントラーメン、お米に数え始めたらキリが無い。。
よくよく考えると、一連の物価上昇に先駆けて上がったのが卵だと思ってるので たしか、一時期300円くらいでも品薄になっていたような。
自分が住んでいるところについては、ほとんど上昇前の値段と変わらなくなってきてる。
さすがに、卵1パック100円!なんてセールは少なくなってきましたが、200円台前半で購入できます。 気になったので調べてみると、確かに下がってきているようですね。

www.jz-tamago.co.jp

値上げしたけどなんだかんだ値上げ後の値段が受け入れられず値段が下がった感じでしょうか。
それにしても卵の値段って結構浮き沈み激しいんだなと改めて思う。
スーパーに売られるときは上下はしなかったですし。
他の物価も同じように供給が落ち着いたら値段が元に戻ってくれないかな~。

www.maff.go.jp

ついでに調べてみると、鳥インフルエンザが関東中心に流行っているみたい。
また、品薄にならないうちに

【プログラミングのお話】kivyとopencvを使ってカメラアプリを作る

pythonopencvは画像処理を試すのに非常に便利なのですが、たまにUIが欲しくなります。
なので、今回はkivyで映像の表示と画像の保存まで行おうと思います。

kivyとopencvのインストール

pip からインストールします。

pip install kivy

次にopencvのインストールです。

pip install opencv-python

opencvと連携して映像を表示する

基本的にkivyはアプリの内容を初回実行時に画面部品をビルドしたあとは再度実行されません。
そこで、ビルド時に画面部品の枠組みを作って、画面部品のテクスチャデータだけを更新することで、動画を表示させたいと思います。
作成したコードは下記のようになりました。

from logging import getLogger,StreamHandler, DEBUG

logger=getLogger(__name__)
handler=StreamHandler()
handler.setLevel(DEBUG)
logger.setLevel(DEBUG)
logger.addHandler(handler)
logger.propagate=False

import cv2

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.widget import Widget
from kivy.graphics.texture import Texture
from kivy.graphics import Rectangle
from kivy.clock import Clock
from kivy.core.window import Window


# デバイスIDは0
cap_camera = cv2.VideoCapture(0)
Window.size=(1920,1080)


class CameraApp(App):
    def __init__(self,):
        super().__init__()
        self.widget_camera=[]
        Clock.schedule_interval(self.update,0.01)

    def build(self,):
        app_layout=BoxLayout(orientation="vertical")
        self.widget_camera=Widget()
        app_layout.add_widget(self.widget_camera)
        with self.widget_camera.canvas:
            self.camera_rectangle=Rectangle(pos=(200,200),size=(640,480))
        return app_layout
    
    def update(self,dt):
        try:
            ret,frame=cap_camera.read()
            if ret:
                frame_resize=cv2.resize(cv2.flip(frame,0),(640,480))

                camera_texture = Texture.create(size=(640,480),colorfmt='bgr',bufferfmt='ubyte')
                camera_texture.blit_buffer(frame_resize.tobytes(),colorfmt='bgr',bufferfmt='ubyte')
                self.camera_rectangle.texture=camera_texture
        except KeyboardInterrupt:
            logger.info("Keyboard interrupt")
        pass


if __name__=="__main__":
    CameraApp().run()
    cap_camera.release()

実行すると、下記のような映像が表示されます。
遅延時間は少々あるけどフレームレートは落ちておらず、全然使えるレベル。

あとは画面上にパーツを付け足して関数と関連付けるだけ

あとは画面上にパーツを付け加えていきます。 kivyの仕様上、build関数内で定義していきます。

button_save=Button(on_press=self.save_frame,text="save",size=(100,50),size_hint=(None,None),pos=(300,300))
app_layout.add_widget(self.widget_camera)

save_frame関数はしたのように記述しました。

   def save_frame(self,btn):
        try:
            logger.info("save latest frame")
            cv2.imwrite("sample.png",self.latest_frame)
        except Exception as e:
            logger.error(e)
        return

ちなみに、ボタンサイズの変更はsize だけでなくsize_hintも合わせて指定しないと、sizeの指定が有効にならないので注意が必要です。
このあたり、htmlとかに親しみがあると口説い感じがする。
htmlが画面設計に適した言語であること実感します。

kivyのパッケージ方法

kivyで作成したアプリケーションは基本的にPyinstallerで行います。
プラットフォームによってはそもそもパッケージできないものもあるので、クロスプラットフォームを実現するのは難しいかも。

pip install pyinstaller

パッケージのコマンドは下記です。

python -m PyInstaller --name package_name app_path/main.py

プラットフォームごとの詳細は下記の公式サイトにまとめてありました。

kivy.org

【暮らしのお話】ルンバのAero Vacフィルターやらブラシやらを交換した

自動掃除機って便利ですよね。
ホコリを自動的に取ってくれますし、完全には無くならないにしても掃除機をかける回数が圧倒的に減ります。
私も安いモデルのルンバを使用しているのですが、最近ホコリの収集能力が落ちてるので、部品を交換することにしました。

Aero vac フィルターとは

ルンバは一般的に掃除機と同じく、わずかながら外に排気します。
ホコリを吸い取るので当然といえば当然ですよね。
その排気にホコリが含まれないようにするのがAero vacフィルターのようです。
名前の割に役割がショボい。
ティッシュで事足りそう笑
とはいえ、このフィルターが詰まってしまうと吸引力が落ちてしまうので、今回交換してみました。

水洗いだめらしい

Aero vacフィルターを水洗いしてはだめらしいです
やっぱり電気製品なのでしっかり乾かさないと、水分が本体に入ってしまって故障の原因になるんですかね。
それでも一般の掃除機と同じならしっかり乾かせば問題無いのでは?と思いつつ今回は大人しく交換しました。

store.irobot-jp.com

早速交換

今回は、正規品では無く3rdパーティ製のものを使用しました。
やっぱり正規品は高いですからね。
消耗品はできるだけ安く抑えたいですし。
正規品は1枚あたり1000円します。


今回購入したのは交換部品をひとまとめにしたものです。


Aerovacフィルターだけだとこちらです。
大体1000円なのでお買い物マラソンの対象製品にちょうどいいですね。


取り外す

今回交換するルンバは3年くらい前に購入した692シリーズです。
ほとんどメンテナンスしてないのでなかなか汚い。
周りに購入した交換部品も置いてみました。

回転ブラシに至っては3本のうち1本が取れてますね。
回転ブラシはドライバーでネジを緩めれば取り出せます。
せっかくなので、5本ブラシにしました。

さっそく、メインのブラシを取り替えます。
黄色の部分を押せばフタが開きます。

フタを開いたらブラシを直接取り出して、新しいのに取り替えます。

最後にAero Vacフィルターですが、ダストボックスを取り出して赤色の部分を手前に引っ張れば取れます。

最終的には数のようになりました。
パーツを取り替えるだけで、かなりきれいになった印象。
意外と簡単にパーツ交換できました。

アプリのデータも更新

非公式な交換部品なので、少し心配しましたが、アプリの部品寿命についても問題無く更新されてました。
非公式なパーツだと更新されないメーカーも多いので、このあたりはiRobot社は良心的な気がします。

【プログラミングのお話】Atomエディタの開発が終了していた

ずっとvscodeを使用していたので気づかなかったのですが、Atomエディタの開発が終了していました。
終了の経緯をまとめつつ2024年時点のエディタについて、まとめたいと思います。
テキストエディタは色々ありますが、今から使い始めるならvscode一択ですね。

対抗馬であるvscodeの台頭による活動終了

一番の理由としては対抗馬であるvscodeの勢いがすごかったことでしょうね。
加えて、Atomの開発元がMicrosoft社に買収されたこともあって、同一社内で同じような役割のソフト開発を続けるよりは、vscodeに集中させたほうが良いというところでしょうか。
機能的にもvscodeのほうが拡張機能が多く高機能なのでプログラミングに使用したいというニーズに合致しています。
カスタマイズ可能なテキストエディタというコンセプトで実用化されたという功績はかなり大きかったかと。
プラグインを自分で作れば自分好みのテキストエディタを作成できるし、MacでもwindowsでもOS問わず使えるのでユーザーがかなり多かったです。

atom-editor.cc

公式サイトでもレポジトリはすべて共有されたと宣言しているので、これ以降の開発続行はなさそうです。

vscode

Microsoft社が開発しているエディタです。
プラグインが豊富なので、大体のプログラミング言語でも扱いやすくカスタマイズできるのが強いですよね。
プログラミングに使うなら正直これ一択でいいと思います。
コンパイラなどは搭載していないので比較的軽量ですし、webの技術を流用しているのでデザインの拡張性も高いです。
一方で、拡張機能ありきなのでどの拡張機能を使えばよいかや拡張機能の管理など使い方にノウハウが必要とも言えるので、何も知らない状態で使いこなすのは結構難しい印象です。
かくいう自分も使っている機能しか知らず、 他の人が使っている設定などを見るとそんな使い方あるのかと目からウロコ状態になるときがあります。

azure.microsoft.com

eclipse

テキストエディタというよりは統合開発環境ですが、プログラミングをする人にとってはこれも馴染みやすいかと。
コンパイラの設定を自分でカスタマイズできたりと、visualstudioでは開発しづらい組み込み機器の開発などには特に重宝します。
逆にいうと、こうしたカスタマイズをできるくらいの知識が無いと、ビルドするだけで一苦労なので、ある程度慣れて来た人向けですね。
Javaアプリとかに使うイメージ

www.eclipse.org

pulsar Edit

Atom が開発終了したあとの後継のエディタです。
「Hackable Editor」と謳っているのでカスタマイズ性の高さを売りにしていそうですね
ただ知名度がどうにも低いのでカスタマイズするにしても選択肢が限られそうです。
自分で拡張機能を作れる!くらいになれば、選択肢としては入りそうです。

サクラエディタ

国産のエディタです。
長く親しまれているので使っている人も多いハズ。
自分もときおり使用しますが、歴史が深い分動作が安定してますし、拡張機能をいれる必要もないので非常にシンプルです。
単にテキストファイルなどをへんしゅうするのであれば高機能なものよりも手軽に使えてよいかもしれません。
こちらは、ソースコードが公開されているので、安心して利用できます。

Sublime Text

シンプルに使えるテキストエディタとしてこちらも有名です。
ショートカットキーなどを自由に割り当てることができるので、シンプルなテキストエディタだと物足りないけど操作感はカスタマイズしたいという場合に便利です。
一点継続利用はライセンス上禁止されているので、会社などで使用する際にはご注意ください。
また、継続利用でのライセンス購入が少なかったためか、sublime Text4からは3年以上使い続けた場合は、個人でも商用利用でもライセンス購入が必要となりました。
ちなみに私が初めて触れたテキストエディタでもあり、ソフトウェアライセンスを意識しはじめたきっかけでもあります。

秀丸エディタ

こちらも国産の老舗エディタですね。
自分は使ってっはいませんが、ベテランの人はたまに使ってたりします。
エディタなんて機能より使い慣れているかどうかでなんでしょうね。
制作者も機能追加を目指すというよりは、惰性で続けていると言い切っちゃってますし。 試用版もありますが、ライセンスが用意されているので継続利用される方は、購入しないとだめですね。

coralcap.co