.mat文件在Matlab中的读取使用操作

这篇具有很好参考价值的文章主要介绍了.mat文件在Matlab中的读取使用操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言 

1. 数据中的采样频率为100Hz, 根据所分析的信号的特点确定合适的采样频率,截断长度(记录点数)

2. 通过DFT频域分析方法,编程画出该信号的频谱与时域图形

3. 使用滤波器设计方法将这些频率成分分别获得,并以图形显示

4. 将滤得的频率成分叠加生产原信号,并与给的标准原信号进行对比


前言 

mat数据格式是Matlab的数据存储的标准格式,.mat文件的方便之处在于其可以连同数据的变量名一同保存下来,并且不需要控制数据的存储格式,matlab会自动保存并区分我们所存储的内容,可以利用load指令可以实现对.mat文件的读取与使用。

利用load指令读取.mat文件:

load('E:\文件名'); //不要加.mat后缀

以下图为例,读取并画出.mat文件中前160个点形成的波形。 左侧双击.mat文件后,下方出现了mat文件内部变量的名称与类型,处理数据或读写的时候要以变量的名称来处理。

.mat文件在Matlab中的读取使用操作

clear all;
load('E:\MATLAB\zibiancx\yy59');

for i=1:160   %数组索引必须为正整数或逻辑值,所以i从1开始
    x(i)=yy9(i);
    t(i)=i/100;
end
t = t-0.01;  %i从1开始,这里减去1
figure(1);
plot(t,x);title('前160个点'),xlabel('时间/s');

.mat文件在Matlab中的读取使用操作

1. 数据中的采样频率为100Hz, 根据所分析的信号的特点确定合适的采样频率,截断长度(记录点数)

         绘制出所有点的图,发现这是一个周期信号。原始信号采样频率100Hz,原始采样周期0.01s,结合前160点图进行分析发现信号周期约为0.5s,画出第50-100个点(0.5-1s)的波形如图所示:

%1.确定合适的采样频率,截断长度(记录点数)
clear all;
load('E:\MATLAB\zibiancx\yy59');
for i=1:4096
    x(i)=yy9(i);
    t(i)=i;
end
figure(2);
plot(t,x);title('yy59所有点'),xlabel('点数');

clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 50;    % 序列长度,每20点近似为一个周期
N = 50;    % 频率域采样个数,取N=L
for i=1:L+1    %取第50-100点进行处理
    x(i)=yy9(i+50);
    t(i)=i/Fs+0.5;
end
figure(3);
plot(t,x);title('yy59 0.5-1s内的信号波形'),xlabel('时间/s');

.mat文件在Matlab中的读取使用操作

.mat文件在Matlab中的读取使用操作

        根据香农采样定理:如果一个系统以超过信号最高频率至少两倍的速率对模拟信号进行均匀采样,那么原始模拟信号就能从采样产生的离散值中完全恢复。所以,先对信号进行DFT频域分析(2. 通过DFT频域分析方法,编程画出该信号的频谱与时域图形)获得频谱,该信号包含12Hz、16Hz、30Hz的信号,信号的最高频率分量为30Hz,所以采样频率应该大于等于60Hz,而给出的数据采样频率为100Hz,符合采样定理的要求。故采样频率沿用100Hz截断长度(记录点数)取第51-100点,该部分点信号比较完整。

2. 通过DFT频域分析方法,编程画出该信号的频谱与时域图形

         MATLAB的fft函数,其用法为Y=fft(x,N),其中x为原信号序列,Y为DFT(也就是FFT)变换后的,FFT与DFT等价,FFT为DFT的算法优化,fft函数中有三个参数:采样频率Fs,原序列长度L,N-DFT变换的N。令Fs=100(Hz),L=50,N=50,对50—100点内的信号进行编程处理。

%2.DFT频域分析画出信号频谱
%DFT
clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 50;    % 原信号序列长度,每50点近似为一个周期
N = 50;    % 频率域采样个数,取N=L
t=(0:L-1).*Ts;%时域自变量
for i=1:L
    x(i)=yy9(i+50);
end%原信号
figure(4)
subplot(311);
plot(t,x);
title("原信号"),xlabel("t/s");
grid on;
Y=fft(x,N);%fft变换
Y=abs(Y)./N;%实际幅值变换
f=(0:N-1)*Fs./N;%实际频率变换
subplot(312);
stem(f(1:N/2),Y(1:N./2));
title("N-DFT变换幅频响应单边"),xlabel("f/Hz");
grid on;
f=f-Fs./2;%移位
subplot(313);
stem(f,fftshift(Y));%移位
title("N-DFT变换幅频响应双边"),xlabel("f/Hz");
grid on;
%时域内各分量与合成
clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 50;   % 使用原始序列个数,接近一个周期
for i=1:L
    x(i)=yy9(i+50);
    t(i)=i/Fs;
end
figure(5)
subplot(511);
t = t-Ts;
plot(t,x);title('原信号'),xlabel('时间/s');grid on
subplot(512);
t=(0:L-1).*Ts;
x=sin(12*2*pi*t);
plot(t,x,'r');title('12Hz分量'),xlabel('时间/s');grid on
subplot(513);
t=(0:L-1).*Ts;
x=sin(16*2*pi*t);
plot(t,x, 'g');title('16Hz分量'),xlabel('时间/s');grid on
subplot(514);
t=(0:L-1).*Ts;
x=sin(30*2*pi*t);
plot(t,x, 'b');title('30Hz分量'),xlabel('时间/s');grid on
subplot(515);
for i=1:L
    x(i)=yy9(i+50);
    t(i)=i/Fs;
end
t = t-Ts;
plot(t,x);title('合成'),xlabel('时间/s');hold on;
t=(0:L-1).*Ts;
x=sin(12*2*pi*t);
plot(t,x, 'r');hold on;
t=(0:L-1).*Ts;
x=sin(16*2*pi*t);
plot(t,x, 'g');hold on;
t=(0:L-1).*Ts;
x=sin(30*2*pi*t);
plot(t,x, 'c');hold on;

.mat文件在Matlab中的读取使用操作

         通过将一个周期的50个点进行DFT频域变换,分析发现该信号是由12Hz、16Hz和30Hz的频率信号组成的。下图为三个分量信号的时域图与叠加后的图像。

.mat文件在Matlab中的读取使用操作

3. 使用滤波器设计方法将这些频率成分分别获得,并以图形显示

         利用MATLAB Filter Designer设计低通滤波器对信号进行滤波。

%3.使用滤波器设计方法将这些频率成分分别获得,并以图形显示。
%12Hz
clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 160;   % 使用原始序列个数
for i=1:L
    y(i)=yy9(i);
    t(i)=i/100;
end

figure(6);
t = t-0.01;
subplot(311);
plot(t,y);title('时域原始信号'),xlabel('时间/s');hold on;

output = filter(filter12, y);
subplot(312);
t = t+0.01;
plot(t,output, 'b');title('时域滤波信号'),xlabel('时间/s');hold on;

y=sin(12*2*pi*t);
subplot(313);
plot(t,y, 'r');title('拟合信号(12Hz)'),xlabel('时间/s');
%16hz
clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 160;   % 使用原始序列个数
for i=1:L
    y(i)=yy9(i);
    t(i)=i/100;
end

figure(7);
t = t-0.01;
subplot(311);
plot(t,y);title('时域原始信号'),xlabel('时间/s');hold on;

output = filter(filter16, y);
subplot(312);
t = t+0.01;
plot(t,output, 'b');title('时域滤波后信号'),xlabel('时间/s');hold on;

y=sin(16*2*pi*t);
subplot(313);
plot(t,y, 'r');title('拟合信号(16Hz)'),xlabel('时间/s');
%30hz
clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 160;   % 使用原始序列个数
for i=1:L
    y(i)=yy9(i);
    t(i)=i/100;
end

figure(8);
t = t-0.01;
subplot(311);
plot(t,y);title('时域原始信号'),xlabel('时间/s');hold on;

output = filter(filter30, y);
subplot(312);
t = t+0.01;
plot(t,output, 'b');title('时域滤波后信号'),xlabel('时间/s');hold on;

y=sin(30*2*pi*t);
subplot(313);
plot(t,y, 'r');title('拟合信号(30Hz)'),xlabel('时间/s');


        (1)12Hz低通滤波器:滤除16Hz和30Hz信号,如图所示,分别为时域原始信号,滤波后信号以及12Hz正弦产生信号用来对比。

.mat文件在Matlab中的读取使用操作

.mat文件在Matlab中的读取使用操作

         (2)16Hz带通滤波器

.mat文件在Matlab中的读取使用操作

.mat文件在Matlab中的读取使用操作

         (3)30Hz高通滤波器

.mat文件在Matlab中的读取使用操作

.mat文件在Matlab中的读取使用操作

        通过分析发现信号滤波之后相位会发生一定的滞后 。

4. 将滤得的频率成分叠加生产原信号,并与给的标准原信号进行对比

%4.将滤得的频率成分叠加生产原信号,并与给的标准原信号进行对比。
clear all;
load('E:\MATLAB\zibiancx\yy59');
Fs = 100;  % 原始信号采样频率,  100Hz
Ts = 1/Fs; % 原始信号采样周期,  0.01s
L = 160;   % 使用原始序列个数
for i=1:L
    z(i)=yy9(i);
    t(i)=i/100;
end
figure(9);
output1 = filter(filter12, z);
output2 = filter(filter16, z);
output3 = filter(filter30, z);
subplot(511);
plot(t,output1);title('滤波信号(12Hz)'),xlabel('时间/s');
subplot(512);
plot(t,output2, 'b');title('滤波信号(16Hz)'),xlabel('时间/s');
subplot(513);
plot(t,output3, 'g');title('滤波信号(30Hz)'),xlabel('时间/s');
subplot(514);
plot(t,output1+output2+output3, 'r');title('叠加信号'),xlabel('时间/s');
subplot(515);
plot(t,z, 'r');title('原始信号'),xlabel('时间/s');

.mat文件在Matlab中的读取使用操作

        分析可知,从0.8s开始,叠加信号开始稳定,并且呈现出周期性,周期与原始信号一致,但是图像形状与原始信号有差距。可能是因为滤波器参数设置问题,也可能是因为滤波过程中有损失等

下图则为程序运行的全数据:

.mat文件在Matlab中的读取使用操作文章来源地址https://www.toymoban.com/news/detail-414952.html


到了这里,关于.mat文件在Matlab中的读取使用操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java文件操作(遍历目录中的文件,找到并删除有指定关键字的文件)

    对于通过java对文件继续读取和写入的操作推荐看读取文件和写入文件操作         扫描指定目录中的文件,并找到名称中包含指定字符的所有普通文件(不包括目录),并后续询问用户是否要删除该文件         实际上题目就要求我们对一个指定的目录下的文件进行遍历

    2024年02月13日
    浏览(48)
  • 实验6-cp –r系统命令的实现--源路径(目录)中的所有文件和子目录,以及子目录中的所有内容,全部拷贝到目标路径(目录)中--操作系统实验

    掌握Linux目录操作方法,包括打开目录、关闭目录、读取目录文件 掌握Linux文件属性获取方法,包括三个获取Linux文件属性的函数、文件属性解析相关的宏 掌握POSIX与ANSI C文件I/O操作方法,包括打开文件、关闭文件、创建文件、读写文件、定位文件 利用POSIX API(文件操作也可

    2024年02月08日
    浏览(54)
  • 如何用matlab实现矩阵与mat格式、xlsx格式文件互转

    目录 一、前言 二、.mat格式 三、.xlsx格式 四、出现load(‘file.mat’) 数据变成struct结构体的问题 当我们利用matlab去处理我们的实验数据时,常常需要读取mat格式、xlsx格式文件,而且有时候我们又将利用Python去做后续工作,这时候我们就迫切需要了解矩阵与mat格式、xlsx格式

    2024年01月18日
    浏览(48)
  • 目录打开显示提示文件或目录损坏且无法读取、文件或目录损坏且无法读取的破解之道

        咱们在平日工作时,通常都会将资料放进不同的目录中,方便咱们找到,随着时间的推移就会产生有越来越多目录。最近有位用户了这样一个问题,就是目录无论怎么都无法打开,这样就无法浏览、使用里面的资料了,影响到了咱们的正常使用,那目录文件或目录损坏且

    2024年02月02日
    浏览(95)
  • C++下GDAL的详细使用案例(含项目配置、tif读取为cv::Mat、Mat保存为tif)

    1.1 GDAL的下载安装 直接到下列链接下载即可,按照说明,将bin目录添加的系统环境变量中即可 windows下GDAL322的库-深度学习文档类资源-CSDN下载 1.2 vs中GDAL的配置 包含目录中设置include目录  库目录中设置lib的路径  附加依赖项中设置gdal_i.lib   GDAL读取数钱需要注册一下驱动(用

    2024年02月06日
    浏览(38)
  • C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]

    C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值] 矩阵创建 图像显示与保存 像素读取与赋值 新建sample02项目,配置opencv4相关包,新建 .cs 进行测试 两种常用的图像遍历方式 灰度图操作 三通道图操作 完整代码

    2024年02月03日
    浏览(47)
  • HDFS常用操作以及使用Spark读取文件系统数据

    掌握在Linux虚拟机中安装Hadoop和Spark的方法; 熟悉HDFS的基本使用方法; 掌握使用Spark访问本地文件和HDFS文件的方法。 启动Hadoop,在HDFS中创建用户目录“/user/hadoop” 在Linux系统的本地文件系统的“/home/hadoop”目录下新建一个文本文件test.txt,并在该文件中随便输入一些内容,

    2024年04月22日
    浏览(42)
  • Python 程序设计入门(025)—— 使用 os 模块操作文件与目录

    Python 内置了 os 模块及其子模块 os.path,用于对目录或文件进行操作。在使用 os 模块及其子模块 os.path 模块时,需要使用 import 导入该模块,才能使用它们提供的函数或方法。 1、os 模块提供的操作目录的函数 os 模块提供的操作目录的函数如下表所示: 函数 说明 getcwd() 返回当

    2024年02月11日
    浏览(56)
  • 【Python】使用Python读取JSON文件中的内容

    在自动化测试过程中,会将部分数据保存到JSON文件中。 JSON文件有以下特点: JSON是存储和交换文本信息的语法,类似XML。 JSON比XML更小、更快、更易解析 JSON是轻量级的文本数据交换格式。 JSON是轻量级的文本数据交换格式。 JSON独立于语言 JSON具有自我描述性、更易理解。

    2024年02月13日
    浏览(51)
  • 【Shell 命令集合 磁盘管理 】Linux 列出目录中的文件和子目录 ls命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 ls命令是Linux系统中常用的一个命令,用于列出目录中的文件和子目录。它的作用是显示当前工作目录中的文件和目录列表。 当我们在终端输入ls命令时,系统会将当前目录中的文件和子目录的名称以及相关信息显示出来。这些信息包括文

    2024年02月08日
    浏览(109)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包