You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中两种频谱图存mat文件的矩阵尺寸差异及正确保存咨询

频谱图保存为MAT文件的尺寸差异问题解析

一、造成矩阵尺寸差异的核心原因

这两种保存方式本质上存储的是完全不同类型的数据:

  • 第一种方式:你用getimage(gcf)提取的是spectrogram函数计算出的原始频谱数值矩阵。当spectrogram不带输出参数直接绘图时,它会把计算得到的频谱数据(double类型,维度对应频率分箱数×时间帧数)作为图像的底层数据源,getimage直接抓取了这个原始数值结果,所以得到的是147×257的double矩阵——这个矩阵是可用于后续信号分析的真实频谱数据,不是可视化的图像像素。
  • 第二种方式:你先通过imwrite(f.cdata, ...)把getframe捕获的屏幕渲染后的可视化像素图像存成了jpg。jpg是RGB格式的图像文件,存储的是屏幕上每个像素的颜色信息(3通道,uint8类型),而且jpg的压缩规则和格式转换会自动调整图像尺寸(你设置的figure是205×205,但保存读取后变成256×256,大概率是图像存储时的默认对齐或压缩机制导致)。所以读取回来的是256×256×3的uint8矩阵,这只是一张图片的像素数据,已经丢失了原始频谱的数值信息。

二、正确保存频谱图的两种场景方案

根据你的实际需求,分两种情况处理:

1. 保存原始频谱数值(用于后续信号分析)

如果需要保留频谱的原始计算结果(可重新绘制频谱图、做进一步分析),直接调用spectrogram的输出参数即可,完全不需要绘图后提取:

[x,fs] = audioread('1.wav');
% 获取频谱原始数值:S是复数频谱,P是功率谱,F是频率轴向量,T是时间轴向量
[S,F,T,P] = spectrogram(x, window, L, N, fs);
% 保存所有相关数据到mat文件
save(['D:\matlab\speech\', strcat(int2str(i)), '_spectrum.mat'], 'S', 'F', 'T', 'P', '-v6');

2. 保存可视化的频谱图图像(用于展示的像素数据)

如果需要保存和屏幕显示完全一致的可视化图像数据,直接保存getframe捕获的像素矩阵即可,不要经过jpg转存(避免压缩和尺寸变化):

[x,fs] = audioread('1.wav');
spectrogram(x, window, L, N, fs);
set(gcf, 'position', [500,500,205,205]);
set(gca, 'Position', [0 0 1 1]);
% 直接获取屏幕渲染后的RGB像素矩阵
img_data = getframe(gcf).cdata;
% 保存图像数据到mat文件
save(['D:\matlab\speech\', strcat(int2str(i)), '_image.mat'], 'img_data', '-v6');

内容的提问来源于stack exchange,提问作者yunyang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:40:33