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