python - Matlab 代码到 Python 代码的转换(使用数据框)
问题描述
所以我正在努力将 Matlab 代码更改为 python 代码,以可视化图形。该代码主要用于处理来自雷达信号的数据。这是 Matlab 代码。
data1 = csvread('degree45_rd1_sitstill_0305.csv');
rd1_data = data1(:,2:end);
rd1_nor = abs(rd1_data);
radarResolution = 0.0522;
radarDataTimes = data1(:,1);
% plot raw data
fs = floor((length(radarDataTimes)-1)/(radarDataTimes(end)- radarDataTimes(1)));
ts = 1/fs;
t = (0:length(rd1_nor(:,1))-1)/fs;
dist_rd1 = (0:length(rd1_nor(1,:))-1)*radarResolution;
figure;
contour(dist_rd1,t,rd1_nor);
title('Radar 1 raw data plot'); ylabel('Time (s)'); xlabel('Distance (m)');
这是Python中的更改代码,我怀疑我是否正确使用了fs,或者应用循环是对是错。
import pandas as pd
import numpy as np
import numpy
import matplotlib
matplotlib.use('Qt4Agg')
print(df)
rd1_data =df.iloc[:, 1:]
print(rd1_data)
print(np.shape(rd1_data))
a = numpy.asarray(rd1_data)
print(np.shape(a))
arr = []
i = 0
for v in a:
arr.append([])
for x in v:
arr[i].append(abs(complex(x)))
i+=1
print(arr)
data = pd.DataFrame(arr)
print(data)
radar_datatime = df.iloc[:,0]
print(radar_datatime)
import math
radarResolution = 0.0522
fs = math.floor(len(radar_datatime)-1)/(radar_datatime[180]-radar_datatime[0])
print(fs)
ts = 1/fs
print(ts)
print(np.shape(arr))
t = [((val[0]-1)/fs) for val in arr]
print(t)
print(np.shape(t))
dist_rd1 = [((val-1)*radarResolution) for val in arr[0]]
print(dist_rd1)
print(np.shape(dist_rd1))
data_t=data.iloc[:,:]
print(data_t)
import matplotlib.pyplot as plt
plt.contour(dist_rd1,t,arr)
plt.savefig("/Users/fateh/Documents/my_file.png")
plt.show()
所以只是为了验证我是否正确或错误地编辑了python代码。需要为此找到最佳解决方案。提前致谢。
解决方案
我觉得你把这件事复杂化了。我不确定您的原始数据文件是什么样的,我制作了一张合成地图来测试您的代码。我不完全确定您在这里尝试执行的操作。
我已经为您翻译了 Matlab 代码。检查正在进行的操作,尤其是 t 的计算。(除非您实际上想要 / by ts 而不是 fs 像示例中的那样)。
所以我不确定这正是你想要的,但它确实有用!
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#data1 = pd.readcsv('degree45_rd1_sitstill_0305.csv')
#Synthetic Data:
data1=pd.DataFrame(np.random.randint(1000,size=(5,10)))
rd1_data = data1.iloc[:,1:-1]
#Changed to 1:-1 as index in Matlab stat at 1 compared to 0 in python
rd1_nor = abs(rd1_data)
radarResolution = 0.0522
radarDataTimes = data1.iloc[:,0]
# plot raw data
fs = np.floor((len(radarDataTimes)-1)/(radarDataTimes.iloc[-1]- radarDataTimes[0]))
ts = 1/fs
t = len((rd1_nor.iloc[:,1])-1)
t=np.arange(0,t) #/ts
#/fs doesn't want to work. Not sure if its something with my synthetic dataset though or if want to / fs or ts.
dist_rd1 = len((rd1_nor.iloc[1,:])-1)
dist_rd1=np.arange(0,dist_rd1)*radarResolution
plt.contourf(dist_rd1,t,rd1_nor);
plt.title('Radar 1 raw data plot')
plt.ylabel('Time (s)')
plt.xlabel('Distance (m)')
推荐阅读
- struct - julia throws:“new{...}”中指定的类型参数太少
- android - 在android kotlin中更新viewModel时UI没有更新
- java - 如何抓取网站表格内容并放入谷歌地图片段?(安卓)
- html - Flexbox 动态列宽
- javascript - 步骤进度条 - 备用
- 文本顶部和底部
- python - 有没有办法链接 HTML 和 Python 代码?
- java - 如何使用 java 在我自己的浏览器中阻止特定网站?
- botframework - 具有多选选项的聊天机器人(适用于 Microsoft Teams)
- python - 如何使用 QDoubleSpinBox 和 QLineEdit 限制 QDoubleSpinBox 的值?
- graphql - GraphiQL 中的“合并”按钮是什么?