• MATLAB下的音频AGC实现(原创)

    2005-09-07

    分类:

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://ronchen.blogbus.com/logs/1417477.html

         已实现了MATLAB下的音频AGC,效果还可以,做起来才发觉比较简单,关键是要有高效的算法。如果能在实现AGC的同时做到噪音消除和回音消除,则效果更佳。

    本人的MATLAB代码如下:

    format long;
    % [m d] = wavfinfo('in.wav');
    [x,fs,nbits]=wavread('in.wav')
    figure;
    subplot(3,1,1);
    plot(x); xlabel('number of sample'); title('Inputput signals');
    %legend('Input signals');
     
    [N col]=size(x);
    Px=zeros(size(x));
    Py=zeros(size(x));
    y=zeros(size(x));
    g=zeros(size(x));

    a=0.2;
    mu=0.5;
    Pref=0.4;
    %Pmin=0.000000001;
    %Pmax=0.5;

    g(1,1)=1;
    y(1,1)=x(1,1);
    Py(1,1)=(1-a)*x(1,1)*x(1,1);
    Px(1,1)=(1-a)*x(1,1)*x(1,1);

    for n=2:N
      Px(n,1)=a*Px(n-1,1)+(1-a)*x(n,1)*x(n,1);
      g(n,1)=g(n-1,1)*(1+mu*Px(n,1)*(Pref-Py(n-1,1)));
      y(n,1)=g(n,1)*x(n,1);
       
      if y(n,1)>2
          y(n,1)=2;
      end
        if y(n,1)<-2
          y(n,1)=-2;
      end
     Py(n,1)=g(n,1)*g(n,1)*Px(n,1);
    end

     subplot(3,1,2);
     plot(y);xlabel('number of sample');
     title('Output signals');
    %legend('Output signals');

     subplot(3,1,3);
     plot(g);xlabel('number of sample');title('gain');legend('gain');

    figure;plot(y,'r'); hold on;plot(x);
    title('Output signals & Input signals ');xlabel('number of sample');
    legend('Output signals','Input signals');


     以下为处理的结果图:

    http://ronchen.blogbus.com/files/1126071769.jpg

     

    http://ronchen.blogbus.com/files/1126071692.jpg


    收藏到:Del.icio.us




    评论

  • 我试了一下matlab的效果,效果不理想。
  • Rong Cheng,你好。

    作为语音处理的agc,应该先做非线性,否则背景噪音也被放大。
  • to vipchina, 最近很少上qq了,也在做语音编码方面的项目,很愿意和你交流,你可以email我,rongrong.cheng@gmail.com
  • 你好,我正在学习用于移动通信的AMR语音编码,迫切掌握关于定点方面的知识,你有qq吗,我想以后有机会向你请教,我的qq是199229262,希望能和你取得联系
  • 楼主,你好!

    我是一个学生,需要基于matlab的音频数字水印的演示程序,希望能帮我.只要有三个部分,音频的嵌入,提取,和攻击.求上面能帮我做的朋友们帮帮忙,我表示中心感谢
    Ronnie回复王天宇说:
    王天宇,你好,音频数字水印我不是很熟悉,可能无法帮助你,不过网上应该可以搜得到相关代码吧。
    2006-06-23 20:36:48
  • 给你发了邮件,但带附件发了好几次都未成功.控制了增益g的范围,与编解码协议联调,AGC效果还可以.谢谢了.在网上看到类似实现,都与VAD联合使用,在silence时减少AGC的操作以节省资源.
    Ronnie回复alex说:
    我收到邮件了,附件也看到了,我会尽快研究下。:)
    2006-03-30 09:13:24
  • 我的邮箱:谢谢了.

    email:alex_gong@sina.com
  • Rong Cheng,

      你好.

      1)我把你提供的Matlab代码转成32位定点模型,并在matlab中运行.

      2)并比照着定点模型转成了VC版本.

      3)项目是基于freescale的coldfire的定点处理器(有DSP功能).把代码转成了该处理器的汇编程序,跟进检验了几个frame(80samples/frame)的pcm数据,中间结果都与定点Matlab模型一致.

      4)在开发板上运行,开始能听到语音输出但AGC效果不明显,但声音音量变化大时背景噪声也急剧增加,直至把语音淹没.(VC版本中也有类似情况)

      观察波形,你提供的源Matlab模型输出均值也有向上漂移的现象,但声音可以接受AGC效果不错.现在我不知道是源Matlab模型有误差,还是我在转成定点Matlab模型过程中引入错误.

    留下了我的邮箱,希望能得到你的帮助和建议.谢谢.
  • to alex,你们的AGC功能已经实现了吗?是基于DSP的还是基于PC的?
  • 正在做一个网络电话的项目,主要的通话功能已经实现.现在在联调阶段.对方要求我们加入AGC的功能模块.很谢谢你.
  • 你看一下LMS算法吧,其实算法很简单的,在google上搜一下,基本就是基于LMS的,介绍用LMS做 AGC 的英文文章很多的
  • 兄弟,解释一下算法好吗

发表评论

您将收到博主的回复邮件
记住我