Yanmo霍染 2022-10-30 11:11 采纳率: 88.9%
浏览 67
已结题

如何使用matlab将语谱图恢复成音频?

如题,可以说说使用matlab里的什么函数,或是什么方法,最好有代码,急用!万分感谢!

  • 写回答

3条回答 默认 最新

  • Jackyin0720 2022-10-30 15:01
    关注

    【语谱图的matlab提取】

    
    [x,Fs,nBits]=wavread('audio.wav');
    
    s=length(x);    % 信号长度
    w=256;            % 窗长
    n=w;            % nfft,表示做fft变换需要的点数,一般为刚大于w的2的幂。举例,w=250,则n一般设为256
    ov=w/2;            % 分帧的交叉程度,常见设为窗长的二分之一或四分之一
    h=w-ov;            % 不重叠点数
    win=hamming(n)';% 选了常见的汉明窗,并设置nfft
    c=1;            % 指向当前帧的指针
    ncols=1+fix((s-n)/h);    % 计算总共有多少帧
    d=zeros((1+n/2),ncols);    % 语谱图初始化
    
    for b=0:h:(s-n)    % 以下处理各帧
        u=win.*x((b+1):(b+n));    % 各帧加窗
        t=fft(u,n);                % 各帧进行fft,内容为u,nfft=n。对于fft,输入n个时域点,输出n个频域点
        d(:,c)=t(1:(1+n/2))';    % 并联频谱向量,注意只取1+n/2,因为负频率无意义,只留下0和正频率
        c=c+1;        % 移动指针
    end
    tt=[0:h:(s-n)]/Fs;    % 时间轴
    ff=[0:(n/2)]*Fs/n;    % 频率轴
    
    imagesc(tt/1000,ff/1000,20*log10(abs(d)));    % 绘制
    colormap(hot);
    axis xy
    xlabel('时间/s');
    ylabel('频率/kHz');
    
    
    

    利用MATLAB中的wavread命令来读入(采集)语音信号,将它赋值给某一向量,参考链接:https://blog.csdn.net/tobefans/article/details/125429377

    另外,这里最后提供一个应用MatLab对语音信号进行处理的笔记,供你参考,笔记讲述详细,注解清晰,应该可以有效的帮助你加深理解,祝你学有所成:
    https://zhuanlan.zhihu.com/p/57902993

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月6日
  • 修改了问题 10月30日
  • 赞助了问题酬金15元 10月30日
  • 创建了问题 10月30日