はじめに
はじめまして。日本の50Hzエリアのどこかで電気保安の現場を走り回っている実務技術者です(電験三種・エネ管保持)。
インフラの老朽化と保安人材の不足が叫ばれる中、「高圧受変電設備(キュービクル)の絶縁破壊を、事故が起きる前にIoTで予知できないか?」と考え、現場での泥臭いフィールドワークとPythonでの検証を続けています。
今回は、これまでの検証の過程と「次にやりたいこと(だけど手が足りていないこと)」をまとめました。情報系やAIに強い学生さん、エンジニアの皆さん、ぜひ知恵を貸してください。
1. 電気設備の音を見える化するコードを作成
高圧設備の絶縁劣化が進むと、微小な「部分放電」が発生します。可聴域から超音波帯域にかけて発生するこの音(ジリジリ、チリチリ)を捉えられれば、抵抗値を測る前の初期段階で異常を検知できるはずです。
そこで、現場の音を録音し、商用周波数(50Hz)の位相に合わせて放電発生タイミングを可視化するPRPD(Phase Resolved Partial Discharge)解析のPythonコードを作成しました。
↓フーリエ変換部を抜粋。
def ffttest(fp):
filepath = fp
data, fs = sf.read(filepath)
N = 128 # サンプル数 この数字を試したい①
window = signal.windows.hann(N) # ハニング窓関数
# 高速フーリエ変換
st = 0
shift = N // 4 #シフト幅 この数字を試したい②
spec = np.zeros([len(data) // shift - (N // shift - 1), N // 2])
for i in range(len(data) // shift - (N // shift - 1)):
st = i * shift
x = data[st:st + N] * window
F = np.fft.fft(x)
freq = np.fft.fftfreq(N, d=1 / fs) # 周波数スケール
# フーリエ変換の結果を正規化
F = F / (N / 2)
F = F * (N / sum(window))
Amp = np.abs(F)
# パワースペクトルの計算(振幅スペクトルの二乗)
Pow = Amp ** 2
# デシベル変換
Pow = 20 * np.log10(Pow / (20 * 10 ** (-6)))
spec[i,:] = Pow[:N // 2]
y_max = 10000
fig, ax = plt.subplots()
im = ax.imshow(spec.T, origin='lower',
extent=(0, (st + N) / fs, 0, freq[N // 2 - 1]),
aspect = ((st + N) / fs) / y_max,
vmin=0, vmax=100)
ax.set_ylim([0, y_max])
ax.set_title('Power Spectrogram')
ax.set_xlabel('time [s]')
ax.set_ylabel('Frequency [Hz]')
plt.tight_layout()
plt.colorbar(im)
#plt.show()
savefile = timest.ymdhm(".jpg")
plt.savefig(savefile) # スペクトルグラフ保存
2. 現場で使用したらいろんなパターンが見えた
コードをスマホに入れて、自分が担当している温浴施設や工場など、実際の現場のキュービクルで音を録って解析してみました。
すると、現場ごとに全く違う複雑なスペクトログラムパターンが浮かび上がってきました。
3. 絶縁抵抗値とデータを比較して近似式を導く
画像を見ると分かるとおり、音の振幅と位相に明らかな偏りが出ています。
私は「音の振幅(大きさ)や特定の周波数のエネルギー量」と、実際の定期点検で測った「絶縁抵抗値(MΩ)」の間に相関があると考えました。そこで、現場のデータをかき集め、振幅と抵抗値を結びつける近似式(単回帰モデル)を自作し、予測値を出すシステムを作ってみました。
4. 近似式では絶縁抵抗値を導けないことを悟る
しかし、現場はそんなに甘くありませんでした。
結論から言うと、単純な数式による近似では、正確な絶縁抵抗値を導くことは不可能でした。
理由は「ノイズの非線形性」です。
マイクの反響、気温や湿度による音の減衰、突発的な機械音。これらが絡み合う現場では、「音がある閾値を超えたら異常」という単純な計算式は全く通用せず、誤報の嵐になってしまうことをフィールドワークを通して痛感しました。
5. データを5万件ほど集めて機械学習にかけてみたいな~ ← 今ここ
単純な数式がダメなら、AI(ディープラーニング)にこの波形パターン全体を画像として覚えさせるしかありません。
CNNなどのモデルを使えば、人間の目や単純な数式では見抜けない「本物の放電兆候」と「ただのノイズ」を分離できるはずです。
【実現したいゴール】
全国の現場から5万件の生データ(音声と抵抗値)を集め、高精度なAIモデルを構築。それを1万円台のRaspberry Piに組み込み、全国のキュービクルにばら撒いて「事故の2時間前」にアラートを出すシステムを作りたい。
2時間あれば現場に急行して処置できるのでね。
【絶賛、仲間を募集中です】
現場のドメイン知識(電気工学)と、テストフィールド、そして生データは私が用意できます。
しかし、この大量のデータを処理するMLOps基盤の構築や、Raspberry Piでサクサク動くようにAIモデルを軽量化(TensorFlow Liteなど)する技術において、圧倒的に手が足りていません。
「社会インフラを救うAI開発」を卒論や修論のテーマにしたい情報系・AI専攻の学生さん(高専生なども大歓迎!)
泥臭いエッジAIの実装に興味があるエンジニアの方
