最近年底和师兄交流了数据分析、波形处理问题。一个是将示波器导出的csv数据放到MATLAB中进行THD分析,另一个是自定义横纵坐标轴进行绘图,就这两个问题记录一下。
不需要背代码,简单、易于理解,使用过程中截个图就行了。
一、对示波器导出的波形数据进行THD分析
1、导入数据至MATLAB,修改变量名和数据类型;
点击“导入数据”,选中示波器保存的“csv”数据文件;![](/d/file/2024-03-25/df1b767614edcdc4c94c7d1550ead4d1.png)
![](/d/file/2024-03-25/694779c94553451d551bbba446cf4cc1.png)
2、提取横纵坐标数据,组合成适合Simulink进行FFT分析的数据格式;
明确一点:MATLAB编程只是把数据保存在一个变量内,然后把变量放到Simulink中用Scope展示出来。因此,接下来的编程目的:要确定数据显示的横纵坐标。我们定义x为横坐标,y为纵坐标,横纵坐标组合后的数据为z:
% 数据类型为列数据data = data1;x = data(3:2002,1)+0.1; % ("横坐标范围",“纵坐标范围”),("第i行":"第j行","第k列")y = data(3:2002,2); % 取数据的第2列为纵坐标数据z = [x,y]; % 组合后:Z的第一列为横坐标数据,第二列为纵坐标数据% 数据类型为行数据,用“transpose”函数将“行”转置为“列”data = data1;x = transpose(data(:,1))+0.1; % 1行n列的数据,转换为n行1列的数据y = transpose(data(:,2)); % 横坐标范围只打一个冒号:表示默认从第一行到最后一行,即所有行z = [x,y];
以下三点是对程序段进行优化的解释:
在工作区,双击打开刚才导入的变量:(表明从第3行开始数据有效)![](/d/file/2024-03-25/8d57f1f26e6360323ec6a09a6655a34e.png)
![](/d/file/2024-03-25/368841c9b38d17ea69d8ccabc05eb661.png)
![](/d/file/2024-03-25/75a7d9e30e560b274dd72c2138d64014.png)
注:data1是第一步里导入数据时自定义的数据名字,将他赋给变量data,此后对示波器导入的不同数据,只需修改等号后面的名字data1即可。
3、在Simulink中放入模块“From workspace”,修改变量名,放入powergui进行FFT分析。
修改“from workspace”模块中的变量名称,与工作区内重新组合好的变量名z一致;![](/d/file/2024-03-25/c95e9c806125856c1bf93229472c659f.png)
注(波形为折线形、数据点显示不完整):同步修改powergui和系统采样时间,在Configuration Parameters/Solver/Solver selection/,修改为Fixed-step,并给出采样时间。
点击“powergui”进行波形FFT分析;![](/d/file/2024-03-25/35f799fe41e1fac14ec9f0cc1fa24c45.png)
注:(①Name内没有选项的情况):在Configuration Parameters/Data Import/Export/Save to workspace or file/,取消勾选"signal simulation output"。
(③Number of cycles周期数的选择):选择为1个周期,则横坐标间隔单位为1;选择2个周期,横坐标间隔单位为0.5。
(④Max frequency最大频率的选择):最大频率与基波频率的倍数,决定了横坐标显示数据的个数。如图中给出1000/41.66 = 24.003,则横坐标显示24个柱状形。
导出波形,微调。把背景线去掉,否则后续在Visio里处理图片很麻烦。![](/d/file/2024-03-25/ff38b84f350e53d6d1bb7f8115ae4394.png)
二、用MATLAB自定义横纵坐标轴绘图(plot函数)
与上述组合数据z的过程一致,三个步骤:导入数据、定义横纵坐标数据变量、plot一下:(在电机控制中,可以用于绘制横轴为alpha,纵轴为beta的出图)。% 数据类型为列数据data = data1;x = data(3:2002,1); % ("横坐标范围",“纵坐标范围”),("第i行":"第j行","第k列")y = data(3:2002,2); % 取数据的第2列为纵坐标数据z = plot(x,y); % 组合后:plot函数逗号前为横坐标数据,逗号后为纵坐标数据
![](/d/file/2024-03-25/c91d4aa6cdf5d8cf4cdcbf42c8defab3.png)
x = data(3:30:2002,1); %从第3行到第2002行,每30个取一个数据点;取第1列里的数据
![](/d/file/2024-03-25/f65f16d5a1e4c7de460f084790c0fbfb.png)
z = bar(x,y);
![](/d/file/2024-03-25/059c4b825fa9bbc5c80fd22447ea2c46.png)
此外,放一个后续visio处理出图的教程: 【导出Simulink中的scope数据,用MATLAB的plot函数进行曲线绘制,以及后续Visio论文出图处理。自定义横纵坐标轴变量,不用背代码。】 https://www.bilibili.com/video/BV1QK411t7zJ/?share_source=copy_web&vd_source=571ee7745d512a8293189d83f511f927