用MATLAB/Simulink对实验/仿真示波器保存的数据进行THD分析、MATLAB自定义横纵坐标轴绘图
时间:2024-03-24 18:22:55 来源:网络cs 作者:峨乐 栏目:运营工具 阅读:
最近年底和师兄交流了数据分析、波形处理问题。一个是将示波器导出的csv数据放到MATLAB中进行THD分析,另一个是自定义横纵坐标轴进行绘图,就这两个问题记录一下。
不需要背代码,简单、易于理解,使用过程中截个图就行了。
一、对示波器导出的波形数据进行THD分析
1、导入数据至MATLAB,修改变量名和数据类型;
点击“导入数据”,选中示波器保存的“csv”数据文件; 自定义一下数据名字(数据表示什么就记为什么,方便理解),修改数据类型为“数值矩阵”(便于后面通过调用矩阵的行列,进行程序编写); 以上两点完成后,点击“绿色的对号”导入数据。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行开始数据有效) 横坐标值要补偿0.1:(为了保证Simulink进行波形显示时,时间从0开始波形绘制完整,解决波形显示不全、显示不出来的问题) 运行程序段,完成后点击工作区的z变量检查一下,补偿好后如下图所示。注:data1是第一步里导入数据时自定义的数据名字,将他赋给变量data,此后对示波器导入的不同数据,只需修改等号后面的名字data1即可。
3、在Simulink中放入模块“From workspace”,修改变量名,放入powergui进行FFT分析。
修改“from workspace”模块中的变量名称,与工作区内重新组合好的变量名z一致;注(波形为折线形、数据点显示不完整):同步修改powergui和系统采样时间,在Configuration Parameters/Solver/Solver selection/,修改为Fixed-step,并给出采样时间。
点击“powergui”进行波形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里处理图片很麻烦。二、用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函数逗号前为横坐标数据,逗号后为纵坐标数据
如果觉得数据点太密集,修改为每10个点取一个数据:(要在冒号间再增添一个冒号:看一下对比效果。有没有发现波峰变尖了,这是由于数据点采集不够导致的) x = data(3:30:2002,1); %从第3行到第2002行,每30个取一个数据点;取第1列里的数据
想将示波器分析的THD数据直接用柱状图形式输出:(采用bar函数 ,这里以正弦波示意一下) z = bar(x,y);
此外,放一个后续visio处理出图的教程: 【导出Simulink中的scope数据,用MATLAB的plot函数进行曲线绘制,以及后续Visio论文出图处理。自定义横纵坐标轴变量,不用背代码。】 https://www.bilibili.com/video/BV1QK411t7zJ/?share_source=copy_web&vd_source=571ee7745d512a8293189d83f511f927
如果此篇文章对您有帮助,记得评论告诉我(●'◡'●)
您的点赞和收藏是对写作者最大的鼓励!
本文链接:https://www.kjpai.cn/news/2024-03-24/148077.html,文章来源:网络cs,作者:峨乐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!
上一篇:C++ find函数详解
下一篇:返回列表