You need to enable JavaScript to run this app. OCTAVE调用grabacion函数维度不匹配,求音频频谱生成解决方案
优惠活动
大模型
产品
解决方案
定价
更多

OCTAVE调用grabacion函数维度不匹配,求音频频谱生成解决方案

Octave频谱代码报错修复方案

报错根源

错误出现在补零对齐行,原代码语法错误导致生成了超大方阵,触发维度不匹配报错。

修复步骤

  • 修复补零代码语法(核心错误)
    原错误行:x=[x;zeros(nsample - length(x)),1];
    替换为:x = [x; zeros(nsample - length(x), 1)];
    说明:zeros(n)默认生成n行n列的方阵,是本次32768×32768维度报错的直接原因,添加第二个参数1指定生成n行1列的列向量,和输入音频的列维度匹配。
  • 修正时间轴生成逻辑
    原错误代码段:
    dur = nsample / rate;  %duraci\'on [seg]
    fs = 1 / rate;      %tasa de muestreo [seg]
    t = 0:fs:dur;       %eje de tiempo [seg]
    
    替换为:
    ts = 1 / rate;      % 采样间隔 [秒]
    dur = (nsample - 1) * ts;  % 信号总时长 [秒]
    t = 0:ts:dur;       % 时间轴 [秒]
    
    说明:原代码变量名定义错误,且总时长计算偏差会导致时间轴长度比信号长度多1,后续绘图可能触发维度报错。
  • 可选兼容处理
    如果你的prueba.wav是双声道音频,可在[x, rate] = audioread('prueba.wav');行后添加x = mean(x, 2);,将双声道合并为单声道,避免后续处理出现维度异常。

修复后完整代码

function grabacion(fmax,Amax)
% 读取音频文件
[x, rate] = audioread('prueba.wav');   
% 双声道转单声道(可选,根据实际音频情况开启)
% x = mean(x, 2);
nsample = size(x, 1);   % 音频采样点数
nsample = pow2(nextpow2(nsample));  
% 补零到2的整数次幂长度
x = [x; zeros(nsample - length(x), 1)];  

% 生成频率轴
ts = 1 / rate;      % 采样间隔 [秒]
dur = (nsample - 1) * ts;  % 信号总时长 [秒]
t = 0:ts:dur;       % 时间轴 [秒]
tam = length(t);    
f = (rate/2) * (1:tam/2) / (tam/2); %频率轴 [Hz]
N_min = round(nsample * 20 / rate) + 1;
N_max = round(nsample * fmax / rate) + 1;
f = f(N_min:N_max);

% 频谱计算
x = x .* hanning(length(x));
fftx = abs(fft(x));
fftx = fftx(N_min:N_max);
fft_x = 20 * log10(fftx);   % 转换为dB单位

% 绘图
figure;
subplot(2,1,1)
plot(f, fft_x', 'linewidth', 2);
set(gca, 'linewidth', 2, 'fontsize', 14);
axis([20 fmax 0 Amax]);
title('Densidad Espectral de Energía' );
xlabel('Frecuencia [Hz]');
ylabel('Amplitud [dB]');
grid;

nx=size(x,1);
subplot(2,1,2)
plot(t(1:nx),x', 'linewidth', 2);
set(gca, 'linewidth', 2, 'fontsize', 14);
title('función en el tiempo [seg]' );
xlabel('Tiempo [seg]');
ylabel('Amplitud [V]');
grid;
endfunction

调用说明

调用时传入两个参数,分别是需要显示的最大频率fmax(单位Hz,比如设为20000)和最大振幅Amax(单位dB,比如设为100),示例调用:grabacion(20000, 100)

内容的提问来源于stack exchange,提问作者Mauricio Calderon Gomez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 16:15:03