python与matlab一些常用函数互转
source link: https://blog.51cto.com/liangdongchang/5370727
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
python与matlab一些常用函数互转
原创python与matlab一些函数互转
1、十六进制字节流数据
有一个二进制文本data
如下:
b"\xd0\x01n\x01\xb3\x1b\x07\x05\xee\x06\xcc\xfe\x84\x12\xab\x07~\x08p\x00\x92\x14u\x01\xe4\x12d\xfe9\x08\xb0\x1e\xa6\x02\xb1C?\x18#E\x12\x12\x13^v\x04w\x1d\xe8\x04\x9bf\x1a\x1c\x9b\x0b\xb0\x11\xae%#\x06\xbe\x1f^\x15s.\x92\x10k'`\x0b[ {\x03!\x00 \x1b\xdf(\xec#\xfcH=\x02\x1e\x11!\x07\xba\xedu \xa7\x0e\xdb\x0by\xfb\x91\x05H\x03\xcb\x08\x94\x04\xfd\x13n\xf8\x07\x06d\xfd\xaf\t{\x17\xda$y\x10"
这些数据是设备通过TCP传上来的,经过小端
变换的十六进制字节流数据。
可以使用以下文件转换后查看。
import struct
def updack_data(data):
# 十六进制字节流转十进制
dec_data = []
for i in range(0, len(data), 2):
dec_data.append(struct.unpack("@h", data[i: i + 2])[0]) # 小端
return dec_data
with open('data', 'rb') as f:
signal = f.read()
print(updack_data(signal))
import numpy as np
a = b"\xd0\x01n\x01\xb3\x1b\x07\x05\xee\x06\xcc\xfe\x84\x12\xab\x07~\x08p\x00\x92\x14u\x01\xe4\x12d\xfe9\x08\xb0\x1e\xa6\x02\xb1C?\x18#E\x12\x12\x13^v\x04w\x1d\xe8\x04\x9bf\x1a\x1c\x9b\x0b\xb0\x11\xae%#\x06\xbe\x1f^\x15s.\x92\x10k'`\x0b[ {\x03!\x00 \x1b\xdf(\xec#\xfcH=\x02\x1e\x11!\x07\xba\xedu \xa7\x0e\xdb\x0by\xfb\x91\x05H\x03\xcb\x08\x94\x04\xfd\x13n\xf8\x07\x06d\xfd\xaf\t{\x17\xda$y\x10"
print(np.fromstring(a, dtype=np.int16))
[464, 366, 7091, 1287, 1774, -308, 4740, 1963, 2174, 112, 5266, 373, 4836, -412, 2105, 7856, 678, 17329, 6207, 17699, 4626, 24083, 1142, 7543, 1256, 26267, 7194, 2971, 4528, 9646, 1571, 8126, 5470, 11891, 4242, 10091, 2912, 8283, 891, 33, 6944, 10463, 9196, 18684, 573, 4382, 1825, -4678, 8309, 3751, 3035, -1159, 1425, 840, 2251, 1172, 5117, -1938, 1543, -668, 2479, 6011, 9434, 4217]
2、fopen与open
打开文件。
matlab打开:
fid=fopen('data','rb');
python打开:
fid = open('data', 'rb')
data
是完整的文件名。
3、fread与fromfile
读取文件。
matlab读取:
signal=fread(fid,data_len,'int16'); %列向量
fread它是一个读取二进制数据的函数.第二个参数指定输出向量的大小,第三个参数指定读取的项的大小/类型.
python读取:
import numpy as np
signal = np.fromfile(fid, np.int16) # 转Int16
fid是一个文件对象,也可以直接打开一个文件名:
import numpy as np
signal = np.fromfile('data', np.int16) # 转Int16
其中data
是一个完整的文件名。
4、reshape
reshape是重塑数组,比如把一维数组转多维数组。
matlab:
signal1=reshape(signal,2,[]);
意思就是把一维的signal
转成2行n列数组。
python:
signal1 = signal.reshape((-1, 2)).T
-1表示n行,2表示两列, .T表示转置,即2行n列数组。
把一维数组转10行n列:
import numpy as np
phase = np.reshape(signal1[0], (-1, 10)).T
5、filter与lfilter
y = filter(b,a,x) 使用由分子和分母系数 b 和 a 定义的有理传递函数对输入数据 x 进行滤波。
matlab:
y=filter(HP,1,phase(1,:));
python:
from scipy.signal import lfilter
y = lfilter(b=HP, a=1, x=phase[0], axis=0) # 滤波
- 赞
- 收藏
- 评论
- 分享
- 举报
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK