6

python与matlab一些常用函数互转

 2 years ago
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.
neoserver,ios ssh client

python与matlab一些常用函数互转

原创

ldc_1257309054 2022-06-09 16:01:08 博主文章分类:python ©著作权

文章标签 python 数据 十六进制 文章分类 Python 编程语言 阅读数190

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) # 滤波
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK