最近老师下达一个任务,让我获得一系列工况下的不同频率的变化。因为各种工况很多,要处理的文件分别放在不同的文件夹里,所以我就利用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')
如图所示