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的前面。这时候就要求我们在保存图片的时候需要调整图片的命名顺序。
接下来就轮到一个神奇的字符串函数登场了!
4. 一个神奇的字符串函数
strtok(name, str);
strtok这个函数的作用是返回name字符串中str左边的字符(不含空白字符)。如:
name_I = '15_I.txt';
cnt = strtok(name_I, '_I.txt');
运行结果如下:
这样就方便我们对所要保存的图片进行相应的命名了!
附完整代码如下:
% @ 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中文论坛