用Matlab处理TDMS数据(降噪+频谱分析)

您所在的位置:网站首页 md文件用什么打开matlab 用Matlab处理TDMS数据(降噪+频谱分析)

用Matlab处理TDMS数据(降噪+频谱分析)

2024-07-12 12:45| 来源: 网络整理| 查看: 265

目录 TDMS文件从导入到最终处理的整个过程第一:把TDMS文件导入到matlab用MATLAB TDMS函数使用ConventTDMS函数 第二:把Matlab的数据画出来附录:1-照着步骤依然显示不了图的解决办法附录:2-使用Matlab批量转换".TDMS"文件为".excel/"文件 第三:处理泄漏电流对泄漏电流进行降噪提取泄漏电流的高频分量

TDMS文件从导入到最终处理的整个过程

该过程是自己本科毕设的一部分内容,大学本科专业是电气工程及其自动化,本科毕业设计课题为《绝缘子沿面放电电流高频特征分析》,我从4月底开始,5月底完成,5月29日本科答辩结束,差不多一个月完成的,其中大部分时间都花在这么一段代码。

这里我需要用matlab提取泄漏电流的高频分量,进而得到我课题涉及到的一些结论。整个过程涉及三个部分: 1.把TDMS数据导入到matlab中 2.把matlab中的数据画出来 3.处理读入到的数据 Matlab处理泄漏电流实质就是处理TDMS文件,TDMS文件储存着泄漏电流,重点是怎么处理泄漏电流,即第三部分。鉴于在网上找代码时,没有一份满意的结果,还花了不少时间,现分享自己的历程,给需要的人节省一点时间。

第一:把TDMS文件导入到matlab

总体说一下,打开tdms文件有4种方式

用Excel 。打开之前需要安装一个插件,安装好了后,无论用金山还是微软的,他都可以打开,打开的时候,tdms文件右键打开方式里面,就有你安装插件,选择你安装的插件打开该文件。如果不安装插件,用excel打开,就会出现乱码(该插件见我上传的资源,资源名称为:nitdmexcel_18-0-1l”)用MATLAB TDMS 函数。这里需要下载一个NI官网的程序“MATLAB TDM Example”,下载该程序后就可以进行读取TDMS文件。这个文件见我上传的资源,MATLAB TDM Example,或者从NI官网地址下载NI官网的读取TDMS函数使用ConventTDMS函数,这个文件则需要在MATLAB的math官网下载,这个程序也可以打开。官网链接为ConvertTDMS (v10),这个函数直接把TDNS文件的数据直接储存为MAT文件,不会像第二种方法一样,直接显示波形。使用LabView打开,利用其的csv文件,熟悉LabView的,可以试着打开,打开后,里面再调用matlab程序,也可以处理tdms文件。

我在下面的文章主要介绍两种方法:1,使用MATLAB TDMS 函数 2.使用ConventTDMS函数 我推荐使用第二种方法打开,打开后,自己在Matlab里面可以自行编程,自行处理。(注意:matlab本质是一个处理“数据”的“工具”,而这里“数据”是指广义上的,泛指我们从自然界获取的所有东西,这里TDMS文件是一种文件储存格式,储存着各种各样的数据,这里储存着泄漏电流数据,整个过程就是个怎么处理数据的过程。)

tdms文件一般由两个文件组成。一个文件名后缀为‘.tdms’,另外一个为‘.tdms-index’,前一个称之为主文件,后一个为头文件。文件信息不做过多介绍,对我们后续处理没用,感兴趣的可以百度一下。进入正题。matlab怎么读取TDMS文件?我们先用excel打开TDMS,看看里面有些什么内容,这对后续matlab处理有帮助。 打开的界面第二张表格 第二张表格 看到这里,我们就会对tdms文件有更深刻的理解,tdms文件本质就是ecel文件,但tdms文件储存的内容的比excel文件储存的多,相当于“excel+”的版本,这里显示出excel的缺点,工业上对其改进,tdms文件就应运而生了。从图中可以看到,有两幅图表,第二幅图表是我们的信息,一共显示了100w行左右,但实际上有268w行,后续我们在matlab里面可以查看到我们的数据有多少行。(拓展:工业上信息数据比较多,需要大容量的文件格式,后面做一些科研活动,tdms文件格式就比较常见了。)

用MATLAB TDMS函数

如图打开MATLAB TDM Example,里面有四个文件夹,在Matlab中打开sample的read file文件 sample文件界面 然后在matlab运行(这里需要matlab运行的基础),会连续蹦出来三个对话框。如图第一个对话框界面 第一个对话框让你选择“.dll”文件,这是一个动态库文件,我们在之前的文件(就是之前MATLAB TDM Example打开后,四个子文件之一)里选择第一个对话框 注意箭头所指的文件夹,双击之后,出现第二对话框 第二个对话框 这里选择动态库文件的头文件,注意箭头所指的文件地址,上述选择文件时,应该注意选择64位还是32位,这个没有定论,看你电脑是多少位的,就选择多少位的。然后出现第三个对话框 第三个对话框 第三个对话框,我们就是要选择打开的tdms文件,以我为例,我选择我的文件打开,如图采样图 我这里采集的就是人工污闪试验中,泄漏电流、电压的变化情况,蓝色的对应电压,红色的对应电流(从之前的EXCEL文件,蓝色数据对应里第一列,红色的对应第二列,图中横坐标为他们的采样点,即excel的行数,纵坐标就是他们的所在列的值数)。顺篇提一点,这里excel所记录的值不是电压、电流的实际值,我们还需要进行单位换算,这个你们自己做过试验的应该清楚。 改进 使用多次之后就会出现一个问题:每一次使用都会选择前两个文件,然后才选择自己想要打开自己TDMS文件,能不能启动程序之后直接选择TDMS文件打开呢? 答案是可以的,怎么改进呢?只需要添加几行代码就可以实现,添加代码如下(在什么位置添加就可以,我就在Readfile.m文件定义变量之后就添加这几行代码)

% 直接定义外部dll和h文件的绝对路径 libname = 'nilibddc'; NI_TDM_DLL_Path = 'F:\MATLAB-2022A-Source\leakahe_current\github_repo\MATLAB TDM Example\dev\bin\64-bit\nilibddc.dll'; NI_TDM_H_Path = 'F:\MATLAB-2022A-Source\leakahe_current\github_repo\MATLAB TDM Example\dev\include\64-bit\nilibddc_m.h';

代码注意:我们需要改的就是第二行和第三行代码,前面我们已经知道了相应文件的地址,我们就直接在引号里面把我的地址改成自己的地址就好,这样我们每一次打开TDMS文件时就可以减少大量重复性的操作,再打开就不会让你选文件了。操作下来就会觉得玩代码是很神奇的,比较重复性的操作,几行代码就可以解决,自己内心就会有种自豪感,这更加让我觉得编程其实是一件挺好玩的事,不是一件乏味的事,可惜本科阶段上C语言时,并没有感觉到这种快乐,实在是可惜。

我第一次在matlab运行时,是没有成功显示上述的图画的,一开始运行就报错,好像有一批问题吧!我记的不多,印象最深的就是显示缺少什么编码器,即如果Matlab出现以下代码

No supported compiler or SDK was found. You can install the freely available MinGW-w64 C/C++ compiler; see Install MinGW-w64 Compiler. For more options, visit http://www.mathworks.com/support/compilers/R2017a/.

那么就是要你去安装这个编码器,但是安装这个编码器,也会陆陆续续碰到一些问题。下面是 我解决MinGW-Win64编译器的步骤(win11版本Matlab2022a): 1-首先在matlab主页里找到附加功能选项(就是三个小方块的图标),点击以后,会出现一个窗口 2-在这个窗口右上角的搜索框里输入:“mingw”,搜素之后,点击第一个给进去 3-点进去以后,右边有一个蓝色的图标,里面有选项可以选择安装,点击安装以后,会出现进度条,先给你下载,后给你安装,进度条完成后,就可以。这个时候如果再次运行之前的程序,还会出现编译器的问题。 4-重启matlab就行了,我们让电脑缓冲一下,会更新已安装的内容,再打开之前的程序就没有编译器的问题了 但有时候,你可能并不能按照我的方法解决这个问题,你就需要寻找别的方法,经同窗提醒,有篇博客介绍怎么解决这个问题,可以试试MinGW-w64 C/C++编译器下载和安装。

如果还有问题,在下面评论,我有时间一定看看。我的博客不是看一遍就行了,有条件的话,需要多看几遍。

使用ConventTDMS函数

在官网下载这个函数的时候,好像不使用迅雷下载,下载不了,下载之后解压这个文件,就是下面这张图的样子 在这里插入图片描述 这里我就不用自己的泄漏电流的TDMS文件了来说明了,我以5月份一位有问题的朋友发给的文件为例。 用第一种方法打开,里面的内容如下 在这里插入图片描述 看看第二张表格的数据,内容如下 在这里插入图片描述 可以看出来,数据还是比较多的,下面把改文件放到解压好的文件夹中,如图 在这里插入图片描述 打开MATLAB后的界面如下 在这里插入图片描述我们下面敲一行代码就可以运用这个函数了(源文件中有两个函数,一个是convertTDMS韩式,另外一个就是simpleconvertTDMS函数,其实两者作用差别不大,这里以convertTDMS函数为例)

data=convertTDMS(0,'D:\Program Files\Matlab source\leakage current data\MATLAB TDM Example\samples\64-bit\github_repo\testts1.tdms');

在这里插入图片描述 函数里面的括号分为两部分,第一部分表示是否生成MAT文件格式,第二部分就是你要打开的文件所在地址(如果要打开的文件和convertTDMS文件不在一起,后面运行就会有问题)。这里的代码是我们不生成mat文件,而是生成结构体,如下图箭头所指,我们从结构体中提取数据。(对这个函数括号的第一部分的说明:填true / false。如果为0或者false,则不创建MAT文件,如果为或者1true ,创建MAT文件,) 在这里插入图片描述 我们接下来按图中指示来 在这里插入图片描述 在这里插入图片描述 就有如下结果 在这里插入图片描述 MeasuredData含有6个元素,每个元素含有Name、Data、Total_Sample、Property四个属性,其中第3、4、5、6元素是我们需要的实验数据。点开其中的一个元素,我们点开加速度的,就会得到下表。 在这里插入图片描述 我们与第一种方法打开的对照 在这里插入图片描述 这样就对应起来,说明已经把数据导入MATLAB里面,下面我们要处理数据的话,就要把这些数据导入到MATLB的工作区里面,代码如下:

jiasududata=data.Data.MeasuredData(3).Data; jiasudushijizhi=data.Data.MeasuredData(4).Data

如图所示,下面,他们就顺利地导入了工作区(变量jiasudu代表时间,变量jiasudushijizhi代表加速度实际值)。 在这里插入图片描述 这样就可以,我们顺便编辑几行代码,把图画出来,看看是什么样子 在这里插入图片描述

下面看自己怎么去处理数据了。后面主要针对第二种方法而言,把matalb数据画出来,针对第三种方法的就不赘述了。

``

第二:把Matlab的数据画出来

因为第一步已经把采集的数据给画出来。如果只需要这么做,下面这一步就不需要,但如果想进行单位换算,或着只显示泄漏电流的数据,要看看我的第二步。 就ReadFile.m文件打开,里面就这么几行代码

// %Plot Data from channels in this group 191 plot(chanvals); 192 % clear chanvals; 193 clear chanvals 194 legend(channames); 195 end 196

把第194行的clear chanvals删除,再次运行,在工作区即可看到 如下情景。在这里插入图片描述 实际上,matlab里面储存的形式都是以矩阵形式,因为Matlab原名就是一个矩阵实验室嘛,画图,只是把矩阵的数据给画出来。 我们要处理的画,就是怎么处理这个矩阵,如我们只想显示泄漏电流、单位换算等 下面的注释是文档一些随笔,不一定与程序有关,自己认真看完就明白了。

%说一下整个流程,首先调用matlab中loadlibary载入动态库nilibddc.dll以及头文件nilibddc_m.h,接着调用uigetfile载入tdms文件,通过calllib调用nilibddc.dll和DDC.GetDataValue函数 %这样就可以把tdms文件的数据读取到matlab中,接着自己在编一个M文件处理这些数据即可。 %整个流程可以分为两个部分,一部分是把tdms数据读入matlab中(该文件‘ReadFile’就是这样,画出数据图,并把数据读入matlab中),另一个部分就是处理数据(自己编M函数,对波形图进行降噪,频谱分析等等。) %该文件为第二部分,进行降噪、提取泄漏电流高频分量 %A(:,1)表示矩阵A的第一列 A(:,2)表示矩阵A的第二列 %数字指定:A([1 2 3 4],[2 3]) 返回1 2 3 4行2 3 列的数据; %步长指定:A(1:2:end,:) A(2:2:end,:)分别提取矩阵A的奇数行和偶数行数据; %A(end:-1:1,:) A(:,end:-1:1)分别返回A矩阵行倒序和列倒序的矩阵 %变量指定:A(B(:,1),:),其中B的第一列含有数据,用来指定取矩阵A的哪些行。 Fs = 120000; % 采样率不是1w2,而是12w % 这是测量仪器的采样率,已经采集好了,存在矩阵里面(2688000行2列) T1 = 1/Fs; % Sampling period 每两个采样点之间间隔0.0000083(3循环) U1=206090; %电压换算系数;实际电压=测量电压*206090 单位为V I1=5.57; %电流换算系数:实际电流=测量电流/5.57 单位为A n1=length(chanvals(:,2)); x=[1:1:n1]*T1; %这样每一个采样点所在的位置都代表每一个时刻 相当于从0到8.5s y3=1000*chanvals(:,2)/I1; %这样得到的实际电流,单位为毫安,泄漏电流数量级的毫安级别 plot(x,y3') title('Leakage current ') xlabel('Time/s') ylabel('Leakage current amplitude/mA') grid on y4=U1*chanvals(:,1)/1000; figure(2) plot(x,y4); title('Voltage change ') xlabel('Time/s') ylabel('Voltage amplitude/kV')

如图 泄漏电流与电压 里面涉及到matlab的一些函数的用法,这些都是自己自学的一些东西,没有人会教给你,网上也没有现成的,看不懂的话就是要自己去学习,不懂的话,自己右键点击,然后进行点击help ,matlab有帮助,英文看不懂,就翻译成中文看,里面有比较多的例子,自己慢慢学,这我帮不了你。 如果你对这方面不是很熟悉,推荐一个自学网站:【51自学网】-专业培训老师录制的视频教程,让学习变得很轻松[/url]这里面有matlab,LabView等软件的教学视频,这里要说明的是,以后做科研,非常重要的一点就是需要比较强的自学能力,这些东西不难,挺基础的,自己一学就会,不要指望别人教你,只有你自己多花点时间,自己才能解决这个问题。

附录:1-照着步骤依然显示不了图的解决办法

本博客第一张图的放大图 这里特别要注意一下这里的数据类型,我的这个程序支持打开这种数据类型的,不是这种数据类型就会出现如下图所示的这种情况 常见的错误图 其他一些数据类型运行代码都会出现这种情形,不少人私信我也是出现了这样的问题,陆陆续续收到了不少人的反馈,解决办法有两种:1)用LabView软件将数据类型改成和我一样 2)修改里面ReadFile文件的代码 第一种方法其实很直白,大多数人得到TDMS文件都是LabView导出得到的,对这个软件就已经很熟了,这些人其实就可以在LabView里面调用Matlab处理渡到的数据,导出来又用Matlab处理,多此一举,说到这里,其实之前还有人推荐另外一种打开tdms文件的方法:将tdm文件通过DIAdem软件(官网里面有下载的和教程)保存为lvm格式的文件,然后通过记事本打开lvm格式文件,去掉文件头,保持文件行列整齐,用Matlab打开这个lvm文件,然后再保存为mat格式文件,最后用程序加载这个文件,这也算读进去了。我一开始觉得这种方法也是如此,就没有在前面说,后来又发现这种方法虽然繁琐,但有效,如果实在没有办法的话,也可解燃眉之急, 第二种方法,这种情况实际比较适合我当时的情况,我老师直接给TDMS文件给我,我并没有经手LabView软件,我就没有必要去学这个软件,可以直接就在matlab处理这个程序即可,当时老师也给了我他在武大读博士(实验数据为2010年)时的处理程序,全是程序代码,一点眉目都没有,也没有一个说明书,你自己的一些基础问题要自己去百度,自己问人,自己解决,结果我搞了半天,发现这个代码是“错”,问老师,他说他当时用的好好的,看了几天没有一点感觉,不知道是程序问题还是我的问题,于是就自己找到了这么个解决方法,好在解决了。说远了,说回来。第二种解决方案,需要针对一些数据类型阱行改代码。首先给一个例子来说明,首先用Excel打开这个文件查看数据类型(步骤如上),如下图所示 浮点型数值类型

%Get channel values if data type of channel is double (DDC_Double = 10) 174 if strcmp(type,' DDC_Double ') %比较两量,若一样则返回1 Float DDC_Double DDC_Float 175 numvalsIn = 0; 176

把175行代码中间的DDC_Double 改成 DDC_Float(大小写无所谓,大小写混搭也一样,这里对照标准,关键在于下划线后的数据类型关键字别错就行),改成如下

%Get channel values if data type of channel is double (DDC_Double = 10) 174 if strcmp(type,' ddc_float ') %比较两量,若一样则返回1 Float DDC_Double DDC_Float 175 numvalsIn = 0; 176

这样一一对应,每一种关键字对应一种数据类型,例如这里改成浮点型,就打不开原来我双精度的泄露电流、电压数据,至此这种问题应得到解决,但我还没有完全对应起来,后续补充。

附录:2-使用Matlab批量转换".TDMS"文件为".excel/"文件

  这里感谢CSDN-ID:“歌颂950”的问题,解决这个问题后,我对matlab处理TDMS文件又有更深一步的理解。   解决问题的关键步骤如下:

下载tdms_excel.m程序,链接如下:将TDMS文件批量转化成excel文件的Matlab程序(免费,不需要积分)清楚代码的含义依据TDMS文件的通道数改代码

即可运行代码,结果就会在目标文件中出现一系列的“.exce”l文件。 1)下载好程序后,运行,会连续出现两个让你选择文件对话框,第一是你想要转变的TDMS文件,建议都放在文件夹里面,第一个对话框就选择这个;第二个对话框就是选择存储转换后的excel文件,这里我们创建一个新建一个空白的文件夹就行,当时候就选择这个 在这里插入图片描述 2)这里需要用插件EXCEL-ADD来打开显示tdms文件的第二张表格有几列,即有几个通道,记住这个数字,在程序的后面修改一下代码。 例如我的一系列文件都是15个通道 在这里插入图片描述 那么转化成excel文件后,我就应该有15列的数据,而matlab默认的程序是只读取4列,所以,我需要将第5列到第15列赋值变量,于是如下代码增加变量。中间的空的几行,空行的上方是原程序的,我在后面已经注释了,原程序的ConvertedData.Data.MeasuredData(1,3).Data(1,3)到(1,6)对应于excel的第一到第四列,我的通道数是15,我需要读取这15个通道(有可能,你不需要读取这15个通道的数据,改法类似),我就需要创建对应的变量储存他们,于是有空格以下的内容,MeasuredData(1,7)中的括号里的数一直增加到我们所需要的通道数,程序后面的注释数字就是第几通道的数据,可以看到5到15有了,我们就有了这15个通道的数据。(通道数可以大于你要画出的列数,但不可小于,比如,这里通道数为15,你如果要画出16列就会报错)    最后一步,将这些数据转变成excel文件,我们需要改 data_list函数,就是下载好后的程序的第61行,方括号里的变量要有第一列到第15列的所有变量名,变量名依次靠在一起,中间用空格隔开(顺序很重要)。运行之后就会在之前的文件夹中找到excel文件。

high_temp = ConvertedData.Data.MeasuredData(1,3).Data; %储存第一个通道里的数据为excel第一列,下面的变量依次类推 %%原程序中第44行,后续依次类推 high_place = ConvertedData.Data.MeasuredData(1,4).Data; % 2 low_temp = ConvertedData.Data.MeasuredData(1,5).Data; % 3 low_place = ConvertedData.Data.MeasuredData(1,6).Data; % 4 high_temp1 = ConvertedData.Data.MeasuredData(1,7).Data; % 5 high_place1 = ConvertedData.Data.MeasuredData(1,8).Data; % 6 low_temp1 = ConvertedData.Data.MeasuredData(1,9).Data; % 7 low_place1 = ConvertedData.Data.MeasuredData(1,10).Data; % 8 high_temp2 = ConvertedData.Data.MeasuredData(1,11).Data; % 9 high_place2 = ConvertedData.Data.MeasuredData(1,12).Data; % 10 low_temp2 = ConvertedData.Data.MeasuredData(1,13).Data; % 11 low_place2 = ConvertedData.Data.MeasuredData(1,14).Data; % 12 high_temp3 = ConvertedData.Data.MeasuredData(1,15).Data; % 13 high_place3 = ConvertedData.Data.MeasuredData(1,16).Data; % 14 low_temp3 = ConvertedData.Data.MeasuredData(1,17).Data; % 15 % low_place3 = ConvertedData.Data.MeasuredData(1,18).Data; data_list = [high_temp high_place low_temp low_place high_temp1 high_place1 low_temp1 low_place1 high_temp2 high_place2 low_temp2 low_place2 high_temp3 high_place3 low_temp3 ];%原程序61行 第三:处理泄漏电流 对泄漏电流进行降噪

这个话题就有点大了,就这么一个问题,在华电(华北电力大学,电气“二龙”之一)读的研究生,就这个课题可以发硕士毕业论文了。我简单的介绍一下流程:去噪的算法有许多种,比如FFT滤波算法、小波硬阈值去噪、小波软阈值去噪、EMD去噪、EEMD去噪等,现在还有一些新的算法,总而言之,算法有许多,就小波阈值去噪这一块,我们细分可以分为许多种,不止小波硬阈值去噪、小波软阈值去噪。有了这么多算法以后,我们需要评判一下所有去噪算法当中,谁去噪效果最好,于是我们引进两个参数:信噪比(SNR)和均方根误差(RMSE),这里不清楚的,可以搜百度,或者我的补充材料(我后面会上传这篇博客的补充材料)。 泄漏电流原本就不清楚没有噪音的泄漏电流是怎么样的,于是我们自己编一个三角函数,加伪随机数来模拟白噪声(查阅相关文献资料,噪声有许多种,主要是白噪声),然后求得他们不同的参数结果,这里就选用小波硬阈值去噪、小波软阈值去噪(其他算法的原理、程序都还没有搞明白),得到小波软阈值去噪效果最好。(见我补充材料,本科毕业论文) 下面进行小波软阈值去噪 这里可以学习一下小波变换(我这里有一本电子书书《小波变换10讲》,世界上讲解小波变换最畅销的书之一,适合入门,虽然是研究生学习的课程,但不难。这本电子书上传不了,需要的,在评论下方留下你的邮箱地址,注明目的,我会发给你们,若长时间没有收到,再提醒下我),再在matlab上进行算法实现,这里去噪可以自己编程,我选用小波变换包进行处理。 输入 wavemenu,调用小波变换包 界面 点击第一个按钮,在后面的界面选择file,下拉列表中选择,从工作区中导入数据,选择信号,在列表中选择一维信号:y3, 小波分解界面 我们先选择小波基,选用“db4”进行5层分解,然后点击分析,可以得到分解的信号,再点击降噪。 小波降噪界面 这里默认是小波软阈值去噪,不用处理,我之间接下来点击降噪即可。 在这里插入图片描述 后面导入进工作区以后,降噪以后的信号还是以矩阵的形式储存起来,同之前的步骤一样,可以把去噪后的矩阵用matlab给画出来。

提取泄漏电流的高频分量

这里主要是进行傅里叶分析,分析泄漏电流的频率分量,采用下列代码

%%这里先初步显示一下实际的泄漏电流的时域图 Fs = 120000; % 采样率不是1w2,而是12w % 这是测量仪器的采样率,已经采集好了,存在矩阵里面(2688000行2列) T1 = 1/Fs; % Sampling period 每两个采样点之间间隔0.0000083(3循环) I1=5.57; %电流换算系数:实际电流=测量电流/5.57 单位为A n1=length(chanvals(:,2)); %记录泄漏电流一共有2688000即268万8千个点 x=[1:1:n1]*T1; %这样每一个采样点所在的位置都代表每一个时刻 相当于从0到8.5s y3=1000*chanvals(:,2)/I1; %这样得到的实际电流,单位为毫安,泄漏电流数量级的毫安级别 plot(x,y3') %第一张图是实际的泄漏电流 title('Leakage current ') xlabel('Time/s') ylabel('Leakage current amplitude/mA') grid on %%这里进行FFT处理 %y3=y3-mean(y3); %去中心化, Y=fft(y3); %这里的Y是复数,矩阵的一列都是复数 Y1=abs(Y); %求其模就是时域里面的幅值 Y2=Y1*2/n1 ; Y2(1,1)=Y2(1,1)/2 ; f=([1:n1]-1)*Fs/n1; %Fs/n1为频率的分辨率,这里为0.0446,f数列中,两个数之间间隔0.0446Hz figure(2); plot(f(1:n1/2),Y2(1:n1/2)); grid on figure(3); plot(f(1:500*n1/Fs),Y2(1:500*n1/Fs)); %这里显示频率范围为1到1000Hz的频谱图,该变数字为几,即可显示频率的范围

结果如下 在这里插入图片描述 在这里插入图片描述 结论:这里的泄漏电流几乎没有高频分量。原因在于方老师发给我的实验数据根本就不是在高频电源下所做的数据,而是50hz和150Hz的电源,我的这个实验所需的电源至少要1kHz的,拿着这样牛头不对马嘴的数据去参加答辩,也算是混过去了。 这里也暴露了傅里叶分解的缺陷,只能反映整体一段时间信号的频率成分中,它有哪些频率成分,但不能反映,具体什么频率是什么时候出现的,于是我采用时频域分析——离散小波变换,提取其高频分量,知道电压增大的同时,泄漏电流的高频分量随时间的变化情况。这里没必要涉及离散小波变换,就傅里叶变换即可,但小波变换在信号处理方面十分重要且热门,如果需要进一步理解小波变换,可以参考小波变换的理解(适合新手短期内分析信号的高频特性)。这里面有小波变换的代码。

于2021/3/15 第二版 共计10624字



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3