故事是這樣子的,最近拿到一些透過Agilent示波器(好啦你喜歡叫他Keysight也可以)讀到的資料,要對裡面的數字做分析, 由於資料極大時他們會用自家的binary格式存檔案,要讀出資料分析就比較麻煩。
他們自家網站是有提供……程式來分析,可惜是用matlab寫的…
What The F.. Emmm, Ahhh, Ahhh, 沒事
總之我看到這個東西就不爽了,俗話說人活著好好的為什麼要用matlab。恁北想用python沒有怎麼辦,只好自幹啦。

其實整體來說滿簡單的,只是把matlab code 用python 寫一篇,python又比matlab 好寫很多。

比較值得提的只有一個,分析binary就不能不用 python的struct , 這次我再加上用namedtuple來處理,整體會變得很乾淨;例如它一個波型的header格式是這樣:

int32 headerSize
int16 bufferType
int16 bytesPerPoint
int32 bufferSize

那我就先定義好namedtuple跟struct的format string:

from collections import namedtuple
bufHeaderfmt = "ihhi"
bufHeaderSiz = struct.calcsize(bufHeaderfmt)
bufHeader = namedtuple("bufHeader", "headerSize bufferType bytesPerPoint bufferSize")

再來我們讀入檔案,直接寫到tuple裡,就可以用名字直接存取值,例如我們要跳過header:

bufHdr = bufHeader._make(struct.unpack(bufHeaderFmt, fd.read(bufHeaderSiz)))
fd.seek(bufHdr.bufferSize, 1)

是不是超簡潔的?一個晚上就寫完了=w=

人生苦短,請用python。