与太丶YOTA 2024-08-12 15:46 采纳率: 0%
浏览 12
已结题

MATLAB中CNN语音识别报错

大家好,事情是这样的,我在MATLAB运行一个语音识别的代码,使用网上所提供的音频文件可以正常运行出结果,当我把音频文件换成自己的音频文件后就出现了以下报错,起初我以为是文件的采样率等等的问题所以将那些音频文件转换与网上所提供的音频文件相同的比特率,即16000Hz单通道16位。可是仍是出现代码报错,这种问题是由于什么所造成的,代码又是否需要进行调整呢?还是因为音频文件的原因?是否需要提供其他代码截图以供解答?

img

应各位所提,以下是该段代码的上下文,希望能为解答提供帮助

img

img

img

img

img

img

目前发现是由于音频时长问题,需要将音频时长严格控制在1s,各位码友有没有办法将不同时长的音频也能进行特征提取,感谢各位了[感叹号]解决此问题即结题[感叹号]

  • 写回答

15条回答 默认 最新

  • 阿里嘎多学长 2024-08-12 17:16
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    您好!根据您提供的信息和代码片段,我注意到了代码中存在一些可能的问题点,并且为您提供了一个可能的解决方案和示例代码。下面是我的分析和建议:

    问题分析

    1. 数组维度不匹配:错误信息提示“无法执行赋值,因为左侧的大小为100x50,右侧的大小为98×50。”这表明在尝试将一个98x50的数组赋值给一个100x50的数组时出现了问题。这可能是由于零填充操作或特征提取过程中的数组尺寸计算不正确。

    2. 代码语法错误XTrainC[ii} 应该是 XTrainC{ii},因为在MATLAB中使用花括号 {} 来访问cell数组的元素。

    3. 零填充长度计算zeros 函数在进行零填充时,需要确保计算的零填充长度是正确的。如果音频信号的长度不是预期的 segmentSamples,那么填充长度的计算可能需要调整。

    解决方案

    1. 修复语法错误:将 XTrainC[ii] 改为 XTrainC{ii}

    2. 调整零填充逻辑:确保 zeros 函数的参数计算正确,特别是当音频信号长度小于 segmentSamples 时。

    3. 增加错误处理:在代码中增加错误处理逻辑,以便在遇到问题时能够提供更详细的错误信息。

    示例代码

    以下是根据您提供的信息修改后的示例代码:

    function [XTrainC] = cnn_speech_recognition(adsTrain, numPar, numHops, numBands, segmentSamples)
        % 初始化cell数组
        XTrainC = cell(1, numPar);
        for ii = 1:numPar
            subds = partition(adsTrain, numPar, ii);
            % 初始化XTrain数组
            XTrain = zeros(numHops, numBands, numel(subds.Files));
            for idx = 1:numel(subds.Files)
                % 读取音频文件
                x = read(subds.Files{idx});
                % 零填充信号
                xPadded = pad_signal(x, segmentSamples);
                % 提取特征
                XTrain(:, :, idx) = extract_features(xPadded);
            end
            % 存储特征到cell数组
            XTrainC{ii} = squeeze(XTrain); % 使用squeeze去除单维度
        end
    end
    
    function xPadded = pad_signal(x, segmentLength)
        % 计算需要填充的零的数量
        padding = max(0, segmentLength - size(x, 1));
        % 零填充信号
        xPadded = [zeros(padding, 1), x, zeros(padding, 1)];
    end
    
    function features = extract_features(x)
        % 这里应该是提取特征的代码,例如使用短时傅里叶变换等
        % 假设返回的特征是一个与x相同维度的数组
        features = x; % 这里仅为示例
    end
    

    注意事项

    • 确保 read 函数能够正确读取音频文件。
    • pad_signal 函数需要根据实际情况调整以确保零填充长度正确。
    • extract_features 函数需要根据实际需求实现特征提取逻辑。

    希望这些建议能够帮助您解决问题。如果还有其他问题或需要进一步的帮助,请随时告诉我。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月14日
  • 修改了问题 8月14日
  • 修改了问题 8月13日
  • 赞助了问题酬金15元 8月12日
  • 展开全部

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?