MATLAB批量绘图

0. 引言

本代码旨在用MATLAB批量读入IQ数据的txt文本,将其绘制成图像,再保存成png图片至本地。通过本文记录几段较为关键的代码,方便回顾。

1. 不弹出所绘制的figure,仅保存图片

figure('visible', 'off');

2. 保存图片

fig = figure('visible', 'off');

% 图片绘制的细节
subplot(311);plot(data_I);title('I');
subplot(312);plot(data_Q);title('Q');
subplot(313);plot(data_rx);title('baseband signal')

% 包含文件路径和文件名    
file_name = strcat(Output_path, num2str(i), '.png') ;

frame = getframe(fig);    % 获取frame
imwrite(frame.cdata, file_name);    % 保存图像

最后几行也可以用:

frame = getframe(fig);      % 获取frame
img = frame2im(frame);      % 将frame变换成imwrite函数可以识别的格式
imwrite(img, file_name);    % 保存到指定目录下的文件中,file_name含路径和文件名

3. 批量处理文件的关键

Input_path  =  'D:\DATA\txt\';    % 为方便后续处理,路径最后建议加上'\'

filelist = dir(strcat(Input_path, '*.txt'));    % 处理不同的文件需要修改后缀
len = length(filelist);    % 计算有多少个上述后缀的文件

for i = 1: 1: len    % 逐个处理文件;通过修改步长,也可以每隔几个文件为一组进行数据读取
    name = filelist(i).name;    % 获取当前处理的文件的名称,仅文件名,含后缀


    %%%%%% 处理每个(组)文件的具体代码 %%%%%%


end

 MATLAB批量处理的顺序是文件的名称顺序,但与Windows资源管理器中显示的顺序不同。下方打印了MATLAB处理文件的部分顺序,发现19_I.txt和19_Q.txt的处理顺序居然在我们想要的第一组1_I.txt和1_Q.txt的前面。这时候就要求我们在保存图片的时候需要调整图片的命名顺序。

MATLAB批量绘图

 接下来就轮到一个神奇的字符串函数登场了!

4. 一个神奇的字符串函数

strtok(name, str);

strtok这个函数的作用是返回name字符串中str左边的字符(不含空白字符)。如:

name_I = '15_I.txt';
cnt = strtok(name_I, '_I.txt');

运行结果如下:

MATLAB批量绘图

 这样就方便我们对所要保存的图片进行相应的命名了!

附完整代码如下:

% @ Author: 小梨同学丶

Input_path  =  'D:\DATA\txt\';
Output_path =  'D:\DATA\img\';

cnt = 0;
filelist = dir(strcat(Input_path, '*.txt'));
len = length(filelist);

for i = 1: 2: (len - 1)    % 每两个txt数据为一组,因此步长为2
    name_I = filelist(i).name;
    name_Q = filelist(i + 1).name;
    
    cnt = strtok(name_I, '_I.txt');
    
    data_I = load(strcat(Input_path, name_I));
    data_Q = load(strcat(Input_path, name_Q));
    
    data_rx = sqrt((data_I .* data_I) + (data_Q .* data_Q));
    
    fig = figure('visible', 'off');     % 设置不显示所绘制的figure

    % 图像绘制细节
    subplot(311);plot(data_I);title('I');
    subplot(312);plot(data_Q);title('Q');
    subplot(313);plot(data_rx);title('baseband signal')
    
    set(fig, 'position', [100, 100, 1800, 1000]);	 % 设定figure的位置和大小
    set(fig, 'color', 'white');    % 背景设置为白色
    
    file_name = strcat(Output_path, cnt, '.png') ;
    
    frame = getframe(fig);	% 获取frame
    imwrite(frame.cdata, file_name);

end

以下为参考来源,感谢:

matlab绘完图后可以不弹出figure而直接保存吗? – MATLAB中文论坛

Matlab 批量读取,处理及保存图片_墨晓白的博客-CSDN博客_matlab批量处理图片

Matlab中如何只把figure中的图像区域保存为图片文件? – MATLAB中文论坛

matlab 字符串处理函数(总结) – MATLAB中文论坛

上一篇:Babylongjs-动画


下一篇:crc计算的大小端再次总结