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,否则就会有一些莫名其妙的错误,这是因为,内存中,同一变量的问题,但清理后,又得重新设定变量,注意

  • 相关阅读:
    hdu 5007 水题 (2014西安网赛A题)
    hdu 1698 线段树(成段替换 区间求和)
    poj 3468 线段树 成段增减 区间求和
    hdu 2795 公告板 (单点最值)
    UVaLive 6833 Miscalculation (表达式计算)
    UVaLive 6832 Bit String Reordering (模拟)
    CodeForces 124C Prime Permutation (数论+贪心)
    SPOJ BALNUM (数位DP)
    CodeForces 628D Magic Numbers (数位DP)
    POJ 3252 Round Numbers (数位DP)
  • 原文地址:https://www.cnblogs.com/fleetwgx/p/1490369.html
Copyright © 2011-2022 走看看