使用matlab遍历文件并同时生成图片

3 篇文章 2 订阅

最近老师下达一个任务,让我获得一系列工况下的不同频率的变化。因为各种工况很多,要处理的文件分别放在不同的文件夹里,所以我就利用matlab编程自动化的出图完成了任务。具体代码如下:

clear
clc
close all
%显示当前目录
cd C:\Users\way\Desktop\ddd
% 获取主目录
maindir = uigetdir( '选择一个文件夹' );
% 列出子目录,注意前两项表示当前目录和上层目录
subdir  = dir( maindir);
% 定义2个向量,分别存储x,y坐标值
xlab = zeros(length(subdir));
ylab = zeros(length(subdir));
% 遍历所有子目录
for i = 1 : length(subdir)
    % 如果不是目录则跳过
    if( isequal( subdir(i).name, '.' )||...
        isequal( subdir(i).name, '..')||...
        ~subdir(i).isdir)             
        continue;
    end
    % 子文件夹下找后缀为txt的文件
    subdirpath = fullfile( maindir, subdir(i).name, '*.txt' );
    % 列出所有.txt文件并返回文件属性(结构体)
    dat = dir(subdirpath);       
    % 对dat中的所有文件进行循环处理
    for j = 1 : length(dat)
        %获取所需文件
        datpath = fullfile(maindir, subdir(i).name, dat(j).name);
        %输入文件
        data=importdata(datpath);
        data=data.data;
        %时间向量
        t=data(:,1);
        %速度向量
        v=data(:,2);
        %采样频率
        Fs=20;
        %采样周期
        T=1/Fs;
        %信号长度
        L=length(v); 
        %去除直流分量
        v = v - mean(v);
        %变换
        y = fft(v);
        %定义单边频谱
        p2=abs(y/L);
        p=p2(1:L/2+1);
        p(2:end-1) = 2*p(2:end-1);
        %定义频域
        f = Fs*(0:(L/2))/L;
        %画图
        plot(f(1:20),p(1:20))
        hold on
        %获取最大值点的坐标,ymax为y坐标,t为x坐标,并存放在向量ylab和xlab中
        [ymax,tmax]=max(p)
        xlab(i) = f(tmax);
        ylab(i) = ymax;
    end
end
%标记出最大值点的x和y坐标
for i = 1:length(xlab)
    if xlab(i) ~= 0
        str = {num2str(xlab(i)),',',num2str(ylab(i))}
        text(xlab(i)-0.005,ylab(i)+0.1,str,'color','r','FontSize',10);
    end
end
xlabel('frenquency')
ylabel('magnitude')
%标记图例
legend('R0.6V0.3','R0.6V0.5','R0.6V0.8','R0.6V1')

如图所示这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值