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

原文地址:https://www.cnblogs.com/fleetwgx/p/1490369.html