zoukankan      html  css  js  c++  java
  • 语音信号 :lms算法麦克风语音降噪

    参考:http://zhidao.baidu.com/question/26576387.html

    关键词:

    语音信号采集和分析

    当初,最最怕的,还是矩阵向量的维数等等细节问题,没有搞好,理解了也难,加上线性代数有忘记了很多,幸亏考研复习重温一些,算是考研中的收获

    1基本读取 

    >> [k,fs]=wavread('bdr.wav');
    >> h=length(k);
    >> h

    h =

         2279169

    >> fs

    fs =

           11025

    >>                因为在用千千静听进行格式转换时候,是这样转的:

                         wav格式, 8比特存储   11K 采样率

                        2279169=2.2M 文件大小

                        11025=11K 采样率

    >> [M,N]=size(k);
    >> M

    M =

         2279169

    >> N

    N =

         1

    >>          证明这个wav音频信号是单声道的,

      

    x=linspace(0,M,M);   %linspace 线性间矩矢量%其实就是画坐标的
    subplot(2,1,1);
    plot(x,k);
    p1=abs(k);
    for i=1:M,                     
                 为什么这里是从1开始?因为,在matlab中,循环就是从1开始,而不是从0开始的,注意
        B(i)=k(M-i+1);      %取数组k的倒序给B
    end

    p2=abs(B);
    th=0.035;
    for i=1:M,
        if p1(i)>th
            break;
        end
    end
    for j=1:M,
        if p2(j)>th
            break;
        end
    end
    new=k(i:(M-j));
    L=length(new);
    subplot(2,1,2);
    y=linspace(0,L,L);
    plot(y,new);

                

    或许文件太大了,所以减少一些数据

    >> [k,fs]=wavread('bdr.wav',480000);
    >> h=length(k);
    >> h

    h =

          480000

    >> [M,N]=size(k);
    >> M

    M =

          480000

    >> N

    N =

         1

    >>

    image

    [k,fs]=wavread('bdr.wav',14000); 机子很卡,在480000以上的时候,真的超卡
    [M,N]=size(k);
      x=linspace(0,M,M); 
      subplot(2,1,1);
      plot(x,k);
      p1=abs(k);
      for i=1:M,
    B(i)=k(M-i+1);
    end
    >> p2=abs(B);
    th=0.035;
    for i=1:M,
        if p1(i)>th
            break;
        end
    end
    for j=1:M,
        if p2(j)>th
            break;
        end
    end
    new=k(i:(M-j));
    L=length(new);
    subplot(2,1,2);
    y=linspace(0,L,L);
    plot(y,new);

    wavplay(new,8000 );

    到底要多长时间处理完这个语音信号?

    请看情况:

    >> [k,fs]=wavread('bdr.wav');
    >> wavplay(k,8000);

    在播放时候,一直是100%的cpu占有  经过测算,是起码   0:02:58.45的时间

    2矩阵运算;

    >> worder = 10;
    >> w = zeros(1,worder);
    >> w

    w =

      Columns 1 through 9

         0     0     0     0     0     0     0     0     0

      Column 10

         0

    >> w

    w =

         0     0     0     0     0     0     0     0     0     0

    >> fref=1;
    >> frefpad = [zeros(1,worder -1) fref];
    >> frefpad

    frefpad =

         0     0     0     0     0     0     0     0     0     1

    >>

    >> n=1;
    >> m = n + worder -1;
    >> frefblock = frefpad(m-worder+1:1:m)';
    >> frefblock

    frefblock =

         0
         0
         0
         0
         0
         0
         0
         0
         0
         1

    >> refP(n) = w*(frefblock);
    >>  refP(n)

    ans =

         0

    >>

    时时注意清理一下,clear,否则就会有一些莫名其妙的错误,这是因为,内存中,同一变量的问题,但清理后,又得重新设定变量,注意

  • 相关阅读:
    Spring使用JDBC配置具名参数
    linux中的匿名管道和命名管道
    linux查看CPU信息
    磁盘阵列RAID原理、种类及性能优缺点对比
    SMP和MPP的优缺点
    Hadoop datablock size
    MySQL 高可用架构之MHA
    MySQL 高可用架构之MMM
    五大常见的MySQL高可用方案
    hive加载数据
  • 原文地址:https://www.cnblogs.com/fleetwgx/p/1490369.html
Copyright © 2011-2022 走看看