%%%%%%程序速度计算
z1 = [];%%最终的时间记录数组
z2 = [];
z3 = [];
t1 = 0;%%暂存本次测试的时间�
t2 = 0;
t3 = 0;
for num=1:1:100
file =['D:\workspace\matlab\homework2\sound\0-0-',int2str(num),'.wav'];%%读取100个音频文件
[y,fs] = wavread(file);
%%以下与精度测试相同
%%%%%%%%%%%%%%%%%%%%%%Goertzel Matlab%%%%%%%%%%%%%%%%%
k1 = tic;
f1=[697 770 852 941];
f2=[1209 1336 1477 1633];
y0 = size(y);
% Indices of the DFT for the frequencies f
freq1 = round(f1/fs*y0(1))+1;
freq2 = round(f2/fs*y0(1))+1;
%Compute DFT using Goertzel algorithm
dft_data1 = goertzel(y,freq1);
dft_data2 = goertzel(y,freq2);
%Plot the DFT magnitudes
%stem(f1,abs(dft_data1));
[y1,a] = max(dft_data1);
[y2,b] = max(dft_data2);
if a == 1 %%以下获取按键
if b == 1
ans = 1;
elseif b == 2
ans = 2;
elseif b == 3;
ans = 3;
else
ans = 'A';
end
elseif a == 2
if b == 1
ans = 4;
elseif b == 2
ans = 5;
elseif b == 3;
ans = 6;
else
ans = 'B';
end
elseif a == 3
if b == 1
ans = 7;
elseif b == 2
ans = 8;
elseif b == 3;
ans = 9;
else
ans = 'C';
end
else
ans = 0;
end
time1 = toc(k1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%% fft%%%%%%%%%%%%%%%%%%%%%%%%%%%
k2 = tic;
a=0;
n = 0:length(y)-1;
mag = abs(fft(y));
f = n*fs/length(y);
thou = int32(1000/(fs/length(y)));
ans1 = 1;
for i = 1:1:thou
if mag(ans1) < mag(i)
ans1 = i;
end
end
ans2 = thou;
for i = thou:1:length(mag)/2
if mag(ans2) < mag(i)
ans2 = i;
end
end
f1 = 697; f2 = 770; f3 = 852; f4 = 941;
f5 = 1209; f6 = 1336; f7 = 1477; f8 = 1633;
ans1 = f(ans1); ans2 = f(ans2);
answer = 'ans';
if ans1 < (f1+f2)/2
if ans2 < (f5+f6)/2
answer = '1';
elseif ans2 < (f6+f7)/2
answer = '2';
else
answer = '3';
end
elseif ans1 < (f2+f3)/2
if ans2 < (f5+f6)/2
answer = '4';
elseif ans2 < (f6+f7)/2
answer = '5';
else
answer = '6';
end
elseif ans1 < (f3+f4)/2
if ans2 < (f5+f6)/2
answer = '7';
elseif ans2 < (f6+f7)/2
answer = '8';
else
answer = '9';
end
else
if ans2 < (f5+f6)/2
answer = '*';
elseif ans2 < (f6+f7)/2
answer = '0';
else
answer = '#';
end
end
if answer == '9'
a=a+1;
end
time2 = toc(k2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%My Goertzel
k3 = tic;
nGoertzel = y0(1);
fn=fs/nGoertzel;%%频域分辨率
f=[697 770 852 941 1209 1336 1477 1633];
k=f/fn;
x=y;
Vk(1)=0;Vk(2)=0;
for i=1:8
w=2*cos(2*pi*k(i)/nGoertzel);
for j=3:nGoertzel
Vk(j)=w.*Vk(j-1)-Vk(j-2)+x(j);
end
Xk(i)=Vk(nGoertzel).^2+Vk(nGoertzel-1).^2-w*Vk(nGoertzel)*Vk(nGoertzel-1);
end
spectrumGeortzel=Xk;
keyH=1;keyL=5;
tmp=Xk(1);
for i=2:4
if tmp<Xk(i)
tmp=Xk(i);keyH=i;
end
end
tmp=Xk(5);
for i=6:8
if tmp<Xk(i)
tmp=Xk(i);keyL=i;
end
end
key='?';
if keyH==1&&keyL==5
key='1';
end
if keyH==1&&keyL==6
key='2';
end
if keyH==1&&keyL==7
key='3';
end
if keyH==1&&keyL==8
key='A';
end
if keyH==2&&keyL==5
key='4';
end
if keyH==2&&keyL==6
key='5';
end
if keyH==2&&keyL==7
key='6';
end
if keyH==2&&keyL==8
key='B';
end
if keyH==3&&keyL==5
key='7';
end
if keyH==3&&keyL==6
key='8';
end
if keyH==3&&keyL==7
key='9';
end
if keyH==3&&keyL==8
key='C';
end
if keyH==4&&keyL==5
key='*';
end
if keyH==4&&keyL==6
key='0';
end
if keyH==4&&keyL==7
key='#';
end
if keyH==4&&keyL==8
key='D';
end
time3 = toc(k3);
%%%%%%%%%%%%%%%%%%
t1 = t1+time1;%总时间增加
t2 = t2 + time2;
t3 = t3 + time3;
z1 = [z1 time1];%时间记录数组
z2 = [z2 time2];
z3 = [z3 time3];
end
%画出时间随着读入文件的数目的增加的变化情况。
n=1:1:100;
plot(n,z1,'r');
hold on;
plot(n,z2,'g');
plot(n,z3,'b');
hold off;
评论0