Superninjia 2018-12-23 10:57 采纳率: 0%
浏览 307

数字变声器的lpc函数问题!!!

[s,fs] =audioread('88.mp3');

s = s/max(s);

L = length(s);

FN = floor(L/FL)-2;

for n = 3:FN

     s_w = s(n*FL-WL+1:n*FL).*hw;
    [A, E] = lpc(s_w, P);
    代码到这里运行时,A这个1X11行矩阵会出现后面十个数没有定义的情况!!!!!
    原因好像是音频文件前部分没有声音,所以s前部分取值为零,s_w部分值也为零,这个怎么解决啊!
    如果自己定义A矩阵的话音频输出就会有问题!!!
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 12:54
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于音频文件中前几帧的采样值为空导致的。在进行低通滤波之前,我们需要确保音频数据中的所有帧都有至少一个非零值。

    你可以通过以下方式解决这个问题:

    1. 将音频文件分割成小块,然后对每个小块应用低通滤波。
    2. 对每个小块应用高斯窗函数进行加权平均,以消除其前几帧的噪声影响。
    3. 将处理过的每一帧合并到一个大数组中。

    以下是一个示例代码,使用MATLAB和numpy库来实现上述步骤:

    % 加载音频文件
    [s, fs] = audioread('88.mp3');
    s = s / max(abs(s)); % 预加重
    
    % 获取音频长度和采样率
    L = length(s);
    Fs = fs; % 采样率
    
    % 定义低通滤波参数
    P = 4; % 高通截止频率(Hz)
    WL = 500; % 滤波器宽度(Hz)
    
    % 创建一个长度等于音频长度的空矩阵
    A = zeros(1, L); 
    
    % 进行低通滤波
    for n = 1:L-1
        s_w = s(n*WL+1 : (n+1)*WL); % 取出当前帧的所有样本点
        A(n) = sum(exp(-abs(s_w)/2 * (P^2 - WL^2))); % 计算加权平均
    end
    
    % 输出结果
    disp(A)
    

    请注意,这段代码只是一个基本示例,实际应用可能需要根据具体情况进行调整。例如,你可能需要修改高通截止频率或滤波器宽度等参数,或者将音频文件分割成更小的块。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀