您现在的位置是:首页 > 名人名句

用MATLAB/Simulink对实验/仿真示波器保存的数据进行THD分析、MATLAB自定义横纵坐标轴绘图

作者:康由时间:2024-03-25 14:41:01分类:名人名句

简介  文章浏览阅读2.6k次,点赞21次,收藏41次。用MATLAB/Simulink对实验/仿真示波器保存的数据进行THD分析、MATLAB自定义横纵坐标轴绘图、间隔数据点绘图、柱状图绘制、详细THD分析教程。_示波器输出的文件编程

点击全文阅读

最近年底和师兄交流了数据分析、波形处理问题。一个是将示波器导出的csv数据放到MATLAB中进行THD分析,另一个是自定义横纵坐标轴进行绘图,就这两个问题记录一下。

不需要背代码,简单、易于理解,使用过程中截个图就行了。


一、对示波器导出的波形数据进行THD分析

1、导入数据至MATLAB,修改变量名和数据类型;

点击“导入数据”,选中示波器保存的“csv”数据文件;
图1 导入示波器csv数据
自定义一下数据名字(数据表示什么就记为什么,方便理解),修改数据类型为“数值矩阵”(便于后面通过调用矩阵的行列,进行程序编写);
图2 自定义数据名称和类型
以上两点完成后,点击“绿色的对号”导入数据。

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行开始数据有效)
图3 查看导入csv数据的有效范围
横坐标值要补偿0.1:(为了保证Simulink进行波形显示时,时间从0开始波形绘制完整,解决波形显示不全、显示不出来的问题
图4 确定需要补偿的横坐标值
 运行程序段,完成后点击工作区的z变量检查一下,补偿好后如下图所示。
图5 补偿后变量z横轴时间从0开始

注:data1是第一步里导入数据时自定义的数据名字,将他赋给变量data,此后对示波器导入的不同数据,只需修改等号后面的名字data1即可。

3、在Simulink中放入模块“From workspace”,修改变量名,放入powergui进行FFT分析。

修改“from workspace”模块中的变量名称,与工作区内重新组合好的变量名z一致;
图6 对应工作区修改变量名

注(波形为折线形、数据点显示不完整):同步修改powergui和系统采样时间,在Configuration Parameters/Solver/Solver selection/,修改为Fixed-step,并给出采样时间。 

点击“powergui”进行波形FFT分析;
图7 FFT波形分析

注:(①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里处理图片很麻烦。
图8 波形导出及调整

二、用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函数逗号前为横坐标数据,逗号后为纵坐标数据
图9 将数据点采用plot函数输出
如果觉得数据点太密集,修改为每10个点取一个数据:(要在冒号间再增添一个冒号:看一下对比效果。有没有发现波峰变尖了,这是由于数据点采集不够导致的)
x = data(3:30:2002,1);    %从第3行到第2002行,每30个取一个数据点;取第1列里的数据
图10 将数据点采用plot函数,以每30个数据为间隔输出
想将示波器分析的THD数据直接用柱状图形式输出:(采用bar函数 ,这里以正弦波示意一下)
z = bar(x,y);
图11 采用bar函数输出柱状图

此外,放一个后续visio处理出图的教程: 【导出Simulink中的scope数据,用MATLAB的plot函数进行曲线绘制,以及后续Visio论文出图处理。自定义横纵坐标轴变量,不用背代码。】 https://www.bilibili.com/video/BV1QK411t7zJ/?share_source=copy_web&vd_source=571ee7745d512a8293189d83f511f927



如果此篇文章对您有帮助,记得评论告诉我(●'◡'●)
您的点赞和收藏是对写作者最大的鼓励!

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句