PRIMO信号処理研究所 / Synchro PRIMO Lab.

周波数測定、位相差測定に関する新しい数理。
Please contact to snishie@mac.com.

ピカチュウ by ピカチュウ関数 (pythonでお絵描き)

2023-01-02 19:22:41 | 信号処理

以前「ピカチュウ関数によるピカチュウ描画」という発表をさせていただきました。

YouTube 公開 https://www.youtube.com/watch?v=nqbXjTOgC-g

元ネタ Wollframalpha.com: https://www.wolframalpha.com/input/?i=ピカチュウのような曲線&assumption=%22ClashPrefs%22+-%3E+%7B%22PopularCurve%22%2C+%22PikachuCurve%22%7D&lang=ja

YouTube のものは、1360 Hz の音響信号に「振幅・位相変調」を施した音をマイクロフォンで拾い、Synchro PRIMO 法にて復調、得られた(X,Y)座標をリアルタイムにプロットするものでした。しかし、発表した当初(2015年)、オーディオデバイスの読み込みのコーディングがヘボで性能が悪く、1秒くらい遅れて描画していました。

今回、同じことをpythonに移植したく、第1段階として 「ピカチュウ関数」の制作とデバッグです。まだ荒っぽいソースですが公開します。実行すると、ピカチュウが登場します。当時はCでゴリゴリ描きましたがpython はライブラリが整っており楽そうです。

ブログ上ソースを貼り付けるとpythonのインデントが上手くいかない(私がやり方を知らない)ので、リンク先にソースを置いておきます。適当にアレンジして楽しんでいただけたらと思います。

・ ソースは ここです.   (Scatterを使って描画しています。ちょっと無理をしているので速度が低下します)

・ こんな画像がでてきます。

ピカチュウも・・・25年間、サトシと苦楽を共にし、2022年「ポケモンワールドチャンピオン シップス」にて世界チャンピオンとなりました。(拍手)

10万Vの技を使うには・・・電験2種などの資格が必要だと思ったのですが、必要はないみたいですね (笑)

https://libertablog.com/pikacyu

 


5点の値から周波数を求める方法 ・・・ Synchro PRIMO法 <Pythonサンプル公開>

2022-12-31 01:57:44 | 信号処理

「5点の直から周波数を求める計算式」を以前から紹介しております。

この方法は Synchro PRIMO法と、筆者は呼んでおります。

今回、python によるデモを公開します。波形を作成し、Synchro PRIMOで周波数を計算、その結果をグラフ表示するだけのものです。計算プロセスをソースから読み取っていただければ幸いです。

計算結果がグラフに表示されますが、非常に小さな「演算のゆらぎ」が見えますが、これは浮動小数点計算で誤差が蓄積した結果です。サンプルでは、周波数= 50.123456789 Hz  と設定していますが、計算結果をみると小数点以下9桁までぎりぎり正しいようです。

67行目の interval を小さくすると、計算するデータ幅は小さくなりますが、精度は落ちます。

ソース中の、 freq = 50.123456789    # Hz  を修正し、他の周波数も試してください。周波数が低い時のみ、interval 値は高めにセットし、結果がどうなるか試してみください。

実行すると、波形が表示されます。このウィンドウを閉じると計算を再開し、次に計算結果を表示します。

#========================
import numpy as np
import random
from matplotlib import pyplot as plt

PI2 = np.pi * 2.0

#
# Generate Wave
#

fs = 44100 # sampling freq.

freq = 50.123456789 # Hz
init_phase = 10 # deg.

NumSample = 1000
N = range(0,NumSample)

FREQ = freq / fs
Omega = PI2 * FREQ
Phi = init_phase/ 180.0 * np.pi

# amplitude
Amp_sin = 1.0

# sinusoid
sineWave = np.array( [Amp_sin * np.sin(Omega * n - Phi) for n in N ])

# show wave
waveForm = sineWave
plt.plot(waveForm)
plt.show()

#
# Synchro PRIMO
#

def synchro_primo(x, pos, k=1):
    # samples
    x0 = x[pos - 2*k]
    x1 = x[pos - 1*k]
    x2 = x[pos]
    x3 = x[pos + 1*k]
    x4 = x[pos + 2*k]
 
    # Lissajous Products
    Ls1 = x2 * x2 - x1 * x3
    Ls3 = x1 * x3 - x0 * x4
 
    R = Ls3 / Ls1
 
    sinOmega = 0.5 * np.sqrt( 3 - R )
    Omega = np.arcsin( sinOmega )
    FREQ = Omega / PI2 / k
    freq = FREQ * fs
 
    return  freq
 
#
# calculate Instantaneous frequency
#

Num = 500
Interval = 21     # sampling interval

# output array
calc_freq = []
calc_amp = []

for pos in range(2 * Interval, Num - 4 * Interval):
 
    freq = synchro_primo(waveForm, pos, Interval)
    calc_freq.append(freq)
 
# show Average
print( np.average(calc_freq))

# graph (freq)
plt.plot(calc_freq)
plt.show()



40年前の卒論の課題をPythonでやってみた

2022-10-18 00:40:18 | 信号処理

「1/f ノイズの数値解析」 というテーマだったと思います。

 ある時系列データ x[n] を与え、そのパワースペクトルが「1/f 特性」を示すことを数値計算によって示すものです。着手した1984年当時、PCは9801が使えましたが、言語はBASICのみ。その数年後にはCが普通に使えるようになるのですが、まだBASIC時代に取り組んだ課題です。

 与える時系列データは、"高橋陽一郎先生"(当時東大)が発表されたもので、そのパワースペクトルは1/f 特性を示すことが証明された論文を指導官からもらったのですが学部4年の私にはチンプンカンプン。当時読んだ論文(報告)を入手したいのですが見つかっておりません。すべて手書きで書かれていました。

 その「1/f ゆらぎを生成する、ある関数 f(x) 」は克明に記憶しており、以下のとおりです

      f(x) = x  + 2 * x*x ;  (0< x < 0.5),   = 2 *(1 - x ) ;  0.5 ≦ x < 1

       x[1] = f (x[0] )  ......   x[n+1] = f (x[n] )  のようにして波形を生成します。

このx[n] を時系列波形とみると、そのパワースペクトルが1/f になるというのです。波形を描くとわかるのですが、しばらくゼロに張り付く区間があり時間をかけて漸増し再度動きが始まり・・・を不規則に繰り返します。波形は、「ある初期値」から始まりますが、初期値がわずかでも変化すると波形はまったく別物になります。カオスに見られる性質です。

(まずプログラム制作)

 当時はFFTは簡単にできるものではなく、まず、FFTのアルゴリズム(FORTAN)をBASICで忠実に移植しました。計算時間は、512サンプルで 1分弱だった記憶。しかし試行錯誤をしているとこれでは仕事にならないと思い、ASMで書き換えることにしました。使ったのはPC-9801F2

 当時、PC98のインタプリタ内の「浮動小数点四則演算」のエントリアドレスと使用法が公開されており、その仕様に基づいてASM化。しかし、8086 アセンブラなど手元になく、コーディングシートでプログラムし、ハンドアセンブル、そのコードを N88-BASIC(86) でDATA文として並べ、poke文でダイレクトにメモリに書き込み、それをBASICからコールする形。たすき掛け演算で使う「関数表」は事前にテーブルを作成しておく方式としました。

 デバッグは・・・MON コマンドなるものが使用できました。原始的なデバッガが装備されています。STEP実行・BREAK・レジスタ表示/変更・メモリダンプ・簡易逆アセンブラ など。・・・いろいろ苦労したですが、終わりごろはメモリに16進値で直接パッチをあてたり、HEXダンプを見て「脳内逆アセンブル」の域に達したですが。。。

 なんだかんだで、一連のプログラム制作は秋頃までかかり、それから、課題の本計算にはいります。 1000万サンプルを超えるデータを平均化しながら進めるのですが、巨大な配列をつくるにはメモリが足らず、一時的にBASICからデータをFDDに吐き出したこともありました。

 さて計算時間ですが、1つのパラメータセットの計算が大体一昼夜くらい、夜RUNして翌朝に結果がでているくらいの時間感覚です。バグっていたらやり直し orz。これの繰り返し。

 ・・・バグもとれて、順調にデータ量産にはいったのが1月。卒論提出が2月中旬で、当然ながら連日徹夜。出力のパワースペクトルグラフは、初期は数値から手書きでグラフを作成していましたが、PC9801のグラフィック&ハードコピーを作り、最後はひたすら走らす・・・作業にはいっていました。

 記憶は定かでないのですが、CRTに描画さえたグラフを、プリンタにハードコピーする処理も制作したかもしれません。当時のプリンタは「ドット・インパクト方式」で、縦16ドット・横120文字分を一気に印刷でき、専用の制御シーケンスがあった記憶があります。

(今回の検証)

 昭和59年・60年ごろは、そんな苦労があったですが、今回、Python 3.9 を使って同じことを再現してみました。

 経過は省略しますが、プログラミングは3時間、実行は20秒ほどで目的グラフが出力できました。当時使えた主記憶は64kBくらいでしたが、今回は4G実装。CPUクロックに至っては、当時8MHz, 現在1.6GHz という超贅沢。当然現在は、すべてONメモリで計算できます。

(考察) 

 こうやって進化した技術・環境がまた次の成果につながるのだと実感。当時苦労したFFTも、現在ではimport 文にて即利用可能です。私の数年上の先輩は、IBMの大型機で出力した数値が羅列された「ストックフォーム」と格闘しデータをグラフ化していました。

 私の課題では、出たばかりのPC98が使え先輩たちの苦労からみると、まだまだましな方でした。数年後はLatice Cコンパイラが使えるようになり実行速度は飛躍的に恒常。後輩たちはさらにデータを量産しています。私たちはそんな隙間にいた世代でした。

(Pythonプログラム)

今回の試作を公開します。Pythonは得意でないので細部は勘弁してください。

  • 実行前に soundfile を pip にてインストールしておいてください。あとは標準で動作します
  • FFTは1024 sampleで処理、10000回実行し「平均スペクトル」を求めます。
  • 結果は log-log グラフで表示され、傾きは(ほぼ)−1 となっており、1/f 特性が計算されました。
  • 音として聴くため、WAVファイルを生成します。関数の性質上「無音区間」が結構あります。

#
# 1-dim 1/f Noise by Takahashi-Map (1984)
#

import soundfile as sf
import numpy as np 
from  matplotlib import pyplot as plt

# Execution
N = 1024        # FFT sample number
Exec = 10000

# Width 
RANGE = range(0, N)
RANGE_s = range(0, int(N/2))

# initital value 
xtmp = 0.10

# Wave array
Wave=[]
Audio =[]

# Spectrum  powerSpectra[n][f_bin]
powerSpectra = []

def saveWave():
    sr = 44100
    filepath = "Takahashi.wav" 
    sf.write(filepath, Audio, sr)

def takahashi(x):
    if (x < 0.5):
        return x + 2 * x * x 
    else:
        return (1-x)*2.0

def GenWave(x0):
    x = x0
    for i in RANGE:
        x = takahashi(x)
        Wave.append(x)  # cleared on each exec.
        Audio.append(x) # add all the samples.
        
    return x
        


# === MAIN =====

for n in range(0,Exec):
    
    print( "- executing {}/{}.".format(n,Exec) )
    
    Wave = []
    xtmp = GenWave( xtmp )

    if False:
        # Graph #
        fig, ax = plt.subplots()

        ax.plot(RANGE, Wave)

        ax.set_xlabel("Time [s]")
        ax.set_ylabel("Signal")
        ax.grid()
        plt.show()

    #
    #  FFT    numpy.fft.fft(a, n=None, axis=-1, norm=None)
    #

    Sp = np.fft.fft( Wave, n=N, axis=-1, norm=None)

    power = (np.abs(Sp))**2 / N 
    powerSpectra.append(power)

    if False:
        plt.plot(power)
        plt.show()

#
# Averaging
#

print( "- averaging.")
aveSpectra = []
for bin in RANGE_s:
    p = 0
    for n in range(0,Exec):
        p = p + powerSpectra[n][bin]
    
    p = p / Exec
    aveSpectra.append(p)
#

# create WAV
saveWave()

# averaged spectrum
if True:
    
    plt.figure(figsize=(6,4))
    plt.title("1/f spectrum by Takahashi-map")
    plt.xscale('log')
    plt.yscale('log')
    
    plt.grid(which='major',color='black',linestyle='-')
    plt.grid(which='minor',color='gray',linestyle='--')
 
    plt.plot(aveSpectra[0: int(N/2)])
    plt.show()


 


電力系統の慣性力

2022-09-28 03:14:15 | 信号処理

電力系統において、事故などで一部の電源が脱落すると、需給バランスが崩れ周波数は低下します。

しかし、周波数が低下した際、発電機は「よりがんばってくれる」ガバナーという仕組みがあり、周波数低下を食い止めようとします。数秒たつと、近隣の発電所もパワーアップし、周波数低下は止まり、あとは少しずつ周波数を回復させます。

この様子2015年に測定することができていました。YouTube下記リンクをご覧ください。当時は系統側の安定性の議論がはじまったばかりだったでしょうか。 いずれにせよ、「慣性力」は、電力系統工学では重要なキーワードです。

https://www.youtube.com/watch?v=ejQsBP8EW80

近年、再エネの比率が増し、機械的な慣性力をもつ同期発電機の数が相対的に減少傾向となっています。よりいっそうの慣性力を確保する必要が生じ、「同期発電機」と同じ特性で動作する装置の開発が行われているようです。

NEDOでの取り組み

https://www.nedo.go.jp/news/press/AA5_101139.html

詳しい解説

https://www.econ.kyoto-u.ac.jp/renewable_energy/stage2/contents/column0275.html

 

 

 


電力系統 50/60 Hz の「分界点」 in 新潟 / 長野

2020-12-11 09:46:09 | 信号処理

 日本の電力系統は, 50 Hz/60 Hz に分かれているのは周知のとおりですが、実際に現地におもむき、「ここで分かれている」という分界点を探しにいってきました。

 中部電力からは「混在地域」として公表されていますが、その中から長野県北部の「栄村」に着目しました。隣接するのは新潟県中魚沼郡の津南町(つなんまち)で東北電力(50Hz)の管轄です。 知りたかったのは「混在」がどのような形態で残っているかです。可能性のひとつとして、長野県松本地区(特に梓川上流エリア)のように、50Hzの発電所がありそこから供給されているのかとも。別の情報で、電柱ごとに 50Hz, 60Hz の表示がされているとのWeb情報もありました。

 現地訪問の1回目。 電柱ごとの区別は発見できず。村内(千曲川の南エリア)にある「志久見川第一・第二発電所」の音を聞いたところ、60Hzでした。もしかしたら村内は60Hz に統一されたのでは?と想像。 しかし6.6kV 系統の配電を追いかけると信濃川・千曲川方面から供給されている感が大きく、もしこれが正しいなら、近隣の配電変電所は、志久見川をわたった「宮野原発電所」しか考えられない。もしそうなら 50Hzとなる。

 さらに、志久見川の発電所は「中部電力」となっており送電線の行き先は「新・北信変電所」(長野市)でトランスの「音」はやはり 60Hz .途中の北竜変電所では周囲に 6.6kV を多数配電しておりました。

 現地訪問2回目。 奥志賀林道からアクセスし、「切明発電所(中津川系)」(ここは栄村、東京電力)に到着。ここから先の高圧線をおいかけると、中津川を経由し信濃発電所方面へ。 林道をくまなく見たところ、切明発電所から下ったところに、東京電力の電柱を発見・・・追跡すると津南町の境で、電柱は東北電力に。結局、この配電用 6.6 kV , 津南から来ているのか、切明からのお裾分けなのかは判別できずでした。とりあえず、ここは50Hzで確定です。

 ここまでの情報から、まだ検証はできていないのですが、 村内は東北電力からの 50Hz と考え、歴史的にはさまざまな変遷があったはずと考えました。そんな痕跡は無いかと探したら・・・ 

 小水力の発電小屋みたいな建物を発見。電力メータが二つあり、はっきりと 50Hz と書かれていました。そこからは 4線式3相で近くの集落にきていたのですが、ある電柱で切り離され、そこから先には中部電力の配線がきていたのです。また・・・謎。

 次の仮説を思いついたのですが、村内を一部地域をのぞき60Hz で配電していたが、60Hz の一番近い変電所が、(おそらく)飯山変電所。 栄村までの距離がながすぎるため実際のところは不明。対岸の津南町は、ふもとの50Hz を中津川沿いに供給しているが、中津川沿いの栄村は元々 50Hz のようですが、何せ山が深く、どのようなルートで 6.6kV を配っているか不明。

 栄村役場のあるエリアは、千曲川沿い・国道沿いに比較的太い 6.6 kV が2回線みえています。なのでここは 60Hz ではないかと思いますが自信なし。しかし千曲川から信濃川に変わる場所を、長野県から新潟県に移動しても、配電線はシームレス・・・ならば、栄村役場付近は50Hzということに。

 さらに調査していて・・・停電時、東北電力の発電車が電力供給、という記事があり。発電車を配置したのが、宮野原発電所のすぐそばのコンビニ。ここにも 6.6 kV が走っているのは知っていたので、この情報が正しいなら、この回線が栄村中心部・南部に供給されていることになります。

 あと、東北電力・東京電力・JR東日本の発電所が入り乱れていて、こちらも少々混乱中です。東京電力中津川水系での発電は15.4 kV のラインが存在するようですが、群馬県を越える前に「常時OFF」となっていました。この理由はおそらく、繋いでしまうと「ループ」が発生してしまうから? 新信濃発電所の周囲の配線がよくわからないのですが、JRからの送電は別の大容量幹線経由で送っていると考えると納得です。

訪問3回目。 泊まった宿の方から情報をいただきました。

 川沿い(北野川・志久見川の支流)の地区はほとんど50Hz です。しかし宿であった「北野天満温泉」は 60Hz でした。測定すると非常に綺麗な波形。先般の大停電の時も、周囲の60Hzエリアは関係なかったそうです。とするならば、配電元は、志久見川のどちらかに違いありません。宿の方がおっしゃるには、下流側の発電所から・・・だそうです。言われてみればそのあたりの配電線は太いものが敷設されています。

 やっとのおもいで、50Hz地区の詳細情報をみつけました。その直前ですが、村内の送電線を追いかけ回し、所々に見つける携帯電話の中継局などの受電設備から周波数を実地で調べたものとほぼぴたりでした。ここまで分かったあと、国土地理院の地図を丁寧に読むと・・・栄村は、電力系統的には、お隣の新潟県津南町と、川沿いに接続されています。住所は長野県でも東北電力からの供給になっています。先ほど説明した 60Hz エリアは、村内の発電所が 中部電力 60Hz のものなので、近隣には 60Hz を配電したみたいです。 しかし、国道117号沿いには、6.6kVラインが場所によっては4系統みえています。おそらく飯山変電所から川沿いに供給しているのでしょうが、栄村の県境付近では、東北電力からの50Hzは根をはっていた・・・というわけなのでしょう。

・・・ここで、当初の狙いが的中しました。実は 60Hz エリアの「末端」の波形をとってみたかったのです。

 今回訪れた「北野天満温泉」が条件ぴたりでした。まず、近くに大口需要家が少なく電圧が安定。周波数変化で、負荷変動による微細な振動がすくない。送電線は、野沢温泉・飯山市を経由し、長野市内へ。このあたりになると、多数の電力源がミックスされてきます。 結果・・・北野温泉では60Hz エリア全体の「周波数動揺」が綺麗に観測できました。

 

 

 

 


日本各地で電力波形のモニター

2020-12-04 05:43:11 | 信号処理

(2022.10.4 更新)

 本年6月に九州電力での波形を観測する機会があったので、情報を更新します。

 興味をひいたのは九州電力系統の中、ある意味「ど真ん中」に位置する、宮崎県高千穂町での波形。波形も綺麗で電圧も安定しており、夜間の波形では60Hz系統でみられる電圧・周波数が一定のパターンで揺れる動きが鮮明に観測でき・・・一種の「神々しさ」がありました。

 帰路はフェリーにて帰還。前からやってみたかった閉鎖系統での挙動観測。九州東京フェリー「それいゆ」船内の電力波形を観測しました。

100V, 60Hzで、オシロスコープ的には安定にみえますが、細部の周波数変化・電圧の変動は大きく、興味あるデータです。発電機は独立した内燃機関をエネルギー源としていると思いますが(船の動力構造は詳しくない。。。)、周波数・電圧調整は制御されており、興味ある挙動でした。おそらく単独で電力を供給している離島でも同様な動きがみえるのかもしれません。(大島・佐渡島を測ってみたいです)

ーーー

日本各地を訪問し、現地での電力波形を収集してきました。

判明したことは、波形の地域差が微妙に存在すること。50/60Hz を「録音」し、基本波のみをカットした波形を「音」として聞くと違いが顕著なことがわかるでしょう。

この高調波の違いのほとんどは「整流器負荷」の影響で、sin波の上部が押しつぶされていたり、ピークの左右に「波形の微細な欠け、微笑なバウンド」があり、これが原因でろうと思われます。共通していえることは、ほとんどが奇数次高調波ですが、下記の収集データで、糸魚川だけが偶数高調波が非常に強かったです。

電力系統側(主に発電所からの電力を長距離で送る)の傾向を見たいときは、1)できるだけ幹線(27.5kV以上)に近い位置から供給されている地区を探す。2)近隣に太陽光・風力発電など、インバータ出力のないエリア という条件で訪問地を選定しました。そのエリア宿をとり、夕方から翌朝までの深夜の電力波形を収集します。宿はできるだけ「太い回線」で受電している施設が好ましいです。

下記は本日現在、取得できた場所です。それぞれ測定データの狙い、ざっとした解析結果があります。機会あれば紹介します。

北海道電力

・ まだ行ったことがない。

 

東北電力 (50Hz)

・秋田県 大仙市 (JR大曲駅近く)

・山形県 鶴岡市 (湯野浜温泉)

・福島県 会津市 (新鶴温泉)

・福島県 郡山市 (市内国道沿い)

・新潟県 胎内市 (R113近く,風力発電所近隣)

・新潟県 糸魚川市 (R8沿い、富山県境ちかく)

 

東京電力 (50Hz)

・ 神奈川県 藤沢市 (市内南東部)

・ 神奈川県 湯河原町 (湯河原温泉)

・ 群馬県 渋川市 (伊香保温泉)

 

中部電力 (60Hz)

・ 長野県 下水内郡 栄村 北野(50/60 混在地区, 60Hzエリア)

・ 長野県 上高井郡 高山村 (山田牧場)

・ 長野県 飯山市 斑尾高原 (長野県側)

・ 静岡県 榛原郡川根本町千頭 (寸又峡温泉)

・ 静岡県 富士宮市 (市内 R139沿い)

・ 愛知県 新城市 笠岩 (豊川沿い)

・ 岐阜県 岐阜県可児市 (R41沿い)

 

北陸電力 (60Hz)

・ 富山県 高岡市 (JR高岡駅前)

・富山県 富山市 (駅前、北部、R41沿いなど数カ所)

・石川県 七尾市 (海岸近く, 近隣に大田火力発電所)

・石川県 小松市 小島町(小松IC近く)

 

関西電力 (60Hz)

・大阪市 梅田 (駅前)

 

中国電力 (60Hz)

・ 広島市 東区 (JR広島駅近く)

・ 岡山市 北区厚生町

・倉敷市 中庄駅ちかく

・鳥取県 倉吉市 関金温泉

 

四国電力(60Hz)

・ 徳島市  (JR徳島駅近く)

 

九州電力(60Hz)

・福岡県 別府市 北浜 (別府温泉, ビーコンプラザ)

・熊本県菊池郡菊陽町

・熊本県山鹿市大橋通

・宮崎県西臼杵郡 高千穂町

・宮崎県延岡市(市内中心部)

・宮崎県児湯郡高鍋町

・宮崎県宮崎市青島

閉鎖系統

・東京九州フェリー「それいゆ」船内 100V (60Hz) (新門司->横須賀)  https://tqf.co.jp/ship/

海外

・ フランス Nice 郊外の住宅地

・ ドイツ/オーストリア国境の町 (Simbach) 

・ オーストリア フィラッハ(Villach)

・ オーストリア ウィーン郊外 (Wienner Neustadt)

・ ドイツ アーヘン郊外 (Herzogenrath)

・ ベルギー  Dinant 郊外 

NG例

・ モロッコ マラケシュ市内ホテル ・・・ 電力波形は「矩形波」。つまりDCからインバータを介して室内に交流を供給していました。市内はDCで配電されているのか、ホテル固有の事象だったのか。この謎は未調査。

 

 

 


(雑学) コヒーラ検波器

2020-09-09 19:04:26 | 信号処理

大昔・・・真空管すら実用化されていないときの無線通信ですが、送信機は「火花」+同調回路で比較的容易に実現できました。今から見ると雑音だらけの電波だったでしょう。

受信機はどうやったか。「コヒーラ」という謎の検波器が存在していました。電波をうけると、両端の端子が導通するような素子です。

https://www.youtube.com/watch?v=qrRzQt1jPgQ

https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%92%E3%83%BC%E3%83%A9%E6%A4%9C%E6%B3%A2%E5%99%A8

やっと最近になって、メカニズムが解明されたみたいです。

 

 

 

 


5点の値から周波数を求めるExcel計算式(別法)

2020-07-10 22:37:22 | 信号処理

 最近は、数式いじりが趣味みたいなこともあり、本ブログで好評をいただいている「5点の値から周波数を求める計算式」の別法を考えています。

 以前から気づいていた方法が1つあり、公表しようか論文で発表しようか迷っていたのですが、ブログで発表することにしました。 今回お話する方法は、Synchro PRIMO 法が基本演算とする「リサージュ外積」に「差分項」を代入するものです。

・ 元の信号波形を X[n] とします。 X[n]= A*sin(Ωn) のような形を考えてください。

・ Y[n] =  1/2 * ( X[n+1] - X[n-1] ) と差分 Yn を作ります。

リサージュ外積を求めます。(Ls1形式を使います)  下記 Ls_y, Ls_x は、リサージュ外積の性質により、定数となります。

 Ls_x = X[n]^2 - X[n+1]*X[n-1] ,  Ls_y = Y[n]^2 - Y[n+1]*Y[n-1] 

瞬時周波数 F (相対周波数形式)は次のようにシンプルな形となります。

 sin (2πF) = sqrt{ Ls_y / Ls_x )      

この方法は、5点を使うだけなら、オリジナルのSynchro PRIMO法よりも、少しノイズに強い挙動を示します。しかし弱点があって、「指数減衰」する正弦波に対しては正しい値とはなりません。かたや、オリジナル Synchro PRIMO 法は PRONY法の性質を受け継いでおり、指数減衰する波形に対しても正しい周波数を示します。

 指数関数形式に限定とはいえ、周波数一定のまま振幅が減衰する波形に対し、正しい周波数が計算できるのは、Synchro PRIMO 法の強みでもあります。今回説明した方法は「遅延」+「差分」を使用しています。まだ外乱・ノイズに対する挙動は調べていません。興味あるかたはシミュレーションしてみてください。

・・・ こんな形で、基本的な関数を「部品」にして、新しい方法を考えるのも面白いものです。

 

 

 


任意の波形の瞬時周波数定義

2020-07-06 23:24:00 | 信号処理

最近、脳内思考を楽しんでいるのですが、ノイズもあり・周期関数もあり・調波もあり・・・の波形の「瞬時周波数」をどう定義するかを考えています。

すでに判明している数理からも、調波が含まれる波形は、瞬時周波数はきわめて複雑な挙動を示すが、「基本周波数」が分かっていれば、1周期での平均周波数は一定。 となっています。

瞬時といっても、1サイクル未満の波形の瞬時が問題となる事例は少ないと思われますが、本ブログであつかう、PMUでは、1/2 , 1/4 サイクル単位で瞬時周波数が求められると「保安装置」の性能を一気に向上させることが可能と考えています。 Synchro PRIMO を使うと実現できそうなのですが、実際には、前処理のためのLPFや、部分的に使用する平均処理によって、「測定時間窓」と「レイテンシ」にどうしても制約がでてしまうのです。

・・・ こんな事を考えながら、次期バージョンの Synchro PRIMO PMU の基本設計をしています。

余談ですが:

 ・・・GPSで「時刻標準」を取り出す・・・これは、ほとんどの文献であたりまえのように書かれていますが、肝心な、「ADCサンプリング」クロックの精度・安定度に触れている文献は少数です。たとえば1ヶ月程度の長期運用をしていると、 周波数1ppm のずれがデータサンプル数で2.6サンプルのずれとなり、DFT方式PMUでは、TVEを明らかに悪化させるでしょう。運用でカバーできるといえばそれまでですが。しかし、装置コスト・校正コスト・メンテナンスコストなどを考えると、一般的な精度のクロックを、GPS からくる 1pps を上手に利用すれば、低コストなハードが利用可能になるでしょう。

 RoCof。系統運用の第一線では、この「周波数変化率」が重宝されており、障害発生時にはこのRoCof がいち早く反応します。次期Synchro PRIMO PMUでは、障害検の即時検知についても取り組んでみたいと思います。

 

 


周波数項が複素数になったら

2019-09-24 01:57:18 | 信号処理

交流波形には、振幅・周波数・初期位相がパラメータとして存在します。

Synchro PRIMO では、リサージュ外積比の平方根の 1/2 を計算し、その値をもとに逆sin を用いて周波数Ω(=相対角周波)を計算しますが、逆 sin の引数が虚数になった場合、どうするか。

公式ででは、 sin ( j x ) = j * sinh( x ) とされています。

Synchro PRIMO(3倍角法)では、 実は双曲線関数も、計算ができてしまいます。 ただし、3-Ls3/Ls1 < 0  となり開平ができないので、 上の変換を使いarcsin の代わりに asrsinh を使用することになります。 

ほかに、Gauss関数、振幅が指数的に増減する信号も、挙動は異なりますが、周波数(一定値)が計算されます。

 

 どの場合でも、周波数=0に近づけるとその極限値として考えられる波形は、値が一定(電気信号ならDC) となります。ここを共通点として、パルス、双曲線関数、三角関数、指数関数を・・・「解析接続」して、統一的に扱えないものでしょうか・・・ 周波数が存在するなら、基底関数を cos, sin ではなく、cosh, sinh などで構築する「双曲線フーリエ変換」や、ガウス関数を基底とするものが可能なのかもしれません。

 

別のケースとして、 | sin Ω ] > 1 となるケース:  3-Ls3/Ls1  > 4  つまり、 Ls3/Ls1 < -1 で発生します。これも「解析接続」という方法を用いると sin z > 1 のようなケースで、複素数 z を求めることができます。 ちなみに arcsin(2) = は・・・ https://www.wolframalpha.com/input/?i=asin+%282%29&lang=ja  ←こんな答えだそうです。 sinh をベースとする曲線に、振動項が加わるようですが、今の私には解釈不能・・・です。