日々の記録

ほどよく書いてきます。

メモ ステンレス包丁の組成

2024年06月30日 09時27分48秒 | AVR

ステンレスの包丁を選ぼうと思っているが、組成が気になった。
だいたい炭素1%の材料で、炭化物吐き出しで固くなる類のものを使っているようだ。

  C Mn Si Cr Mo V Co Ni Cu
V10 0.95-1.05 0.3-0.5 <0.35 14.5-15.5 0.8-1.2 0.25-0.35 1.3-1.8 <0.25 <0.25
銀3 0.95-1.1 0.6-1.0 <0.35 13.0-14.5          
V1 0.95-1.05 <0.5 <0.5 13.0-15.0 0.3-0.5     <0.25 <0.25
AUS10 0.95-1.1 <1.0 <1.0 13.0-14.5 0.1-0.3 0.1-0.25   <0.50  
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

IIRフィルタの位相

2024年06月22日 23時13分03秒 | プログラム

FFTフィルタではなく、IIRフィルタを使った場合のLPFを試してみた。

次数が大きくなるほど位相遅れが大きくなり、下記では12次までやってみたが、14次は計算が破綻した(位相が1周ひっくり返るからかな)

 

例えば2次だと普通に2次のLPFですね(下はFFT後の縦軸がdBになってないです)

8次のフィルタだと位相は反転しているくらいの遅れが見られますね。ふむふむ。

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

FFTフィルタの位相シフト

2024年06月16日 22時49分10秒 | プログラム

FFTして周波数帯域をカットしてからの逆FFTで信号を戻す作戦。

単純な波形においては問題がなさそうである。

3倍高調波である75Hzまで入れると・・・(カットは100Hzで)
25Hzも75Hzも大丈夫そうな感じではある。

コメント (4)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Pythonで三角波

2024年06月16日 21時01分39秒 | プログラム

pythonは配列の要素にアクセスせず、配列のまま計算できるのが良い所である。

import numpy as np
import matplotlib.pyplot as plt

freq = 1.0 #周波数として
 
time=np.arange(0.000,0.001*2**10,0.001) #時間の配列を作る
Signal = np.sin(2 * np.pi * freq * time) #正弦波を作る
 
plt.plot(time,Signal)
plt.show()
 
次のような配列要素ごとの計算をしなくて良いので、記述がやや楽。
for i = 0 to Ubound(time())
    Signal(i) = sin(2 * pi() * freq * time(i))
next i
 
 
正弦波は単一周波数しか含まれないので、矩形波や三角波を作ろうと思うと・・・・
 
import numpy as np
import matplotlib.pyplot as plt

freq = 2.0 #周波数として
time=np.arange(0.000,0.001*2**10,0.001) #時間の配列を作る

Signal = (time * freq) % 1  #余りを求める
 
plt.plot(time,Signal)  
plt.show()
 
これを0.5ずらして絶対値とったら三角波ですかね。
 
import numpy as np
import matplotlib.pyplot as plt

freq = 2.0 #周波数として
time=np.arange(0.000,0.001*2**11,0.001) #時間の配列を作る

Signal = 1-np.abs((time * freq/2) % 1-0.5)*2

plt.plot(time,Signal)
plt.show()
 
 
のこぎり波など不連続データが多いと周波数帯域が非常に高い所まで必要になるので、一旦三角波を使ってフィルタ特性を見てみようか、な。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

デジタル処理によるLPFその後

2024年06月09日 22時00分11秒 | プログラム

検証はFFTをするためにデータサイズを2のべき乗の数にしているが、実際の信号はそんなに都合よくデータ数がないので、最後はFIRフィルタとかIIRフィルタとかを作って連続信号に対して処理できればいいかな、なんて思い始めている。

 

入力信号は25Hzで振幅1の正弦波に60Hzで振幅0.5の正弦波を加算したものである。

SignalF = 25.0
SignalA = 1.0
NoiseF = 60.0
NoiseA = 0.5
time=np.arange(0.000,0.001*2**12,0.001)
SignalSUM = SignalA * np.sin(2*np.pi*SignalF*time) + NoiseA * np.sin(2*np.pi*NoiseF*time)
 

左上の入力信号をFFTして、左下のようなグラフを得る。
左下のグラフの60Hzの山をカットして右下の周波数特性を得る。
その信号を逆FFTして、波形に戻すとローパスされた信号が得られる。

 

ノイズの信号を大きくしていったらどうなるのかなと思って信号振幅を変えてみた。

 

信号:ノイズ=1:1

信号:ノイズ=1:10、なんとかなる。

 

信号:ノイズ=1:100 FFTで一律ゼロにする部分がうまく行かないので信号が歪んでくる。
40Hzでスパッと切っているのだが、40Hzの階段が40Hzのノイズを与えてしまうので、しょうがない。

 

 

import numpy as np
import matplotlib.pyplot as plt
#from scipy import signal
import csv
SignalF = 25.0
SignalA = 1.0
NoiseF = 60.0
NoiseA = 100.0
GAmp = SignalA+ NoiseA
time=np.arange(0.000,0.001*2**12,0.001)
SignalSUM = SignalA * np.sin(2*np.pi*SignalF*time) + NoiseA * np.sin(2*np.pi*NoiseF*time)
#plt.plot(time,SignalSUM, '-')

F=np.fft.fft(SignalSUM)
freq = np.linspace(0, 1000, len(time))

Fc= int(40 * len(time)/1000)
Fmod = F.copy()
Fmod[Fc:(len(time)-Fc)]=0+0j

#plt.plot(freq,F)
#plt.xlim(0,80)

G=np.fft.ifft(Fmod)

ax1 = plt.subplot(2,2,1)
ax1.plot(time, SignalSUM, "-")
ax2 = plt.subplot(2,2,2)
ax2.plot(time, G , "-")
ax1.set_xlim(0,0.5)
ax2.set_xlim(0,0.5)
ax1.set_ylim(-GAmp,GAmp)
ax2.set_ylim(-GAmp/10,GAmp/10)

ax3=plt.subplot(2,2,3)
ax3.plot(freq, F)
ax3.set_xlim(0,100)
#ax3.set_ylim(-100,100)
ax4=plt.subplot(2,2,4)
ax4.plot(freq, Fmod)
ax4.set_xlim(0,100)
#ax4.set_ylim(-10,10)


print(len(time))

plt.show()
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ハムノイズ

2024年06月06日 00時57分57秒 | その他雑記

1kHzで取得したデータを見ていると正弦波に隠れて別の信号が入っているようだ。これはハムノイズではないかな?

ということで、除去の方法を考えてみた。

試験周波数は25Hzでハムノイズは60Hzなので約2倍の周波数の隔たりが有る。

一次のLPFでカットオフ周波数を25Hzにすると、25Hzでは-3dBで60Hzでは-8dBくらい。うーん。一次のLPFではちょっと厳しいな。

 

などと思っているときに気がついた。デジタルデータなんだから、デジタル処理しちゃえばいいじゃないかと。FFTして高周波カットしてから逆FFTなどやり方はいくつかありそうだな。

ためしてみよう。

 

試すためにももとデータがないので、一旦ダミーでデータを作ってみようとなった。
25Hzの信号に60Hzのハムノイズが重畳している状態を作ってみる。
最近流行っているPythonなるものに手をだしてみた。

 

 

上のグラフだとわかりにくいが、時間を伸ばしていくと、測定したい25Hzの信号に60Hzの信号が乗ることで各サイクルのピークトップがぶれている。これが今データ処理で問題なのでダミー信号の再現はうまく言っている。

 

データ数を4096個にしてからFFTをかけてみると、ちゃんと25Hzと60Hzに信号が出てきている。
60Hzの信号を消して逆FFTしたらアナログ回路では実現できないような急峻なフィルタ特性が得られるに違いない。

 

50Hzくらいから高周波をカットして

 

逆FFTをすることで戻ってくる。ピークトップの振動がなくなっているようである。



 

端部においては高周波成分があるので、歪みが生じるが、気にならない。


 

多少時間が経過した後はきれいな波形になっているようである。

 

 

ちょっとPythonを触ってみた感じでは、配列をそのまま引数にして関数に作用できる点が良い。
例えばtime[] = 0,0.01,0.02,0.03,,,, 0.99のように0.01刻みで100個有る配列から例えば、
for i = 0 to 99
     signal = A * frequecy * time[i]
next i
とやって個別に要素を計算する必要がありそうなものだが、
signal = A*Frequency*time
でループを回した計算が実施できる。

そのへんが使い勝手良さそうだ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

1kHzログその後

2024年06月03日 23時39分21秒 | その他雑記

1kHzのログデータその後ですが、なんとかなりそうな感じですね。

さすが高級キーエンスのデータロガー。1kHzサンプリングデータでも後からデータ圧縮として、1000個のデータの最大値最小値を出力できるので、とりあえずキーエンス純正のデータフォーマットで保存しておき、後から変換をすると大丈夫。

端的にはこれがオチなのですが、繊細な歪を扱うとハムノイズとかも除去したくなるので、一旦たくさんのデジタルデータを残しておいて、最後にIIRフィルタみたいな急峻なフィルタで試験周波数の25Hzと60Hzをうまく分離したほうがいいのかな、なんて思っています。

キーエンスのデータロガーはなかなか良い使い勝手でさすが高級品と思えます。

 

一方で疲労試験機はロードセルのアンプがシールドなしにインバーターと同じ空間に設置されているなど結構ノイズがひどい(出力にオシロをつないでも高周波ノイズたくさん)ので、プロトタイプっぽい時代に買ったものなのかなって思いました。装置は25Hzまでの試験なのでLPF入れたらある程度良いとはいえ、もうちょっとノイズ気にしようよって思った。

 

備忘:
キーエンスのデータロガー、軽くて良いのだが、軽すぎる。設置しておいてもひょんな接触でうごいちゃうので配線がちょっとスパゲッティに成りがちな時にショートリスクあり。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データログ

2024年06月01日 08時14分29秒 | その他雑記

ちょっとしたことで、疲労試験のデータをとったが、1kHzサンプリングするととんでもないことになる。

実験前に十分わかってはいたが、毎秒1000行のデータが出てくるので、10時間も試験したら3600万行になる。もちろんエクセルでは開けないので処理に困る。200万行ごとのデータが30個あったので、結果的には6000万行程あったのかな。合計ファイルサイズ2.5GB。

エクセルマクロで処理して片付けたのだが、なかなか手間がかかった。

25Hzで振動する装置振幅のピークを検出してデータログしたいという思惑があったのだが、ピークホールド回路などを作る前にデジタル的に記録して後から処理、というようになったのだが、やっぱりピークホールド回路つくって、高速サンプリングじゃなく、低速のサンプリングでなんとかするようにしよう。

装置の出力は300mVくらいしかなく、インバーターノイズも入っているので。

・ローパスフィルタでのノイズ除去
・場合によっては増幅回路(後のデータロガーで扱いやすい電圧に)
・ピークホールド回路(とリセット回路)

こんなところからやっていこうかな。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする