⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 goertzel算法.m

📁 GOERTZEL算法,应用于音调检测
💻 M
字号:
% MATLAB 设计GOERTZEL算法
clear all;
tab=[1.7077;1.6453;1.5687;1.4782;1.1641;0.9964;0.7986;0.5685];
tab4=[-0.52047;-0.56857;-0.62033;-0.67358;-0.81314;-0.86706;-0.91680;-0.95874];
number=input('number=','s');
w=tab;
k=0;
m=0;
if (number=='0')
    k=4;
    m=6;
elseif(number=='1')
    k=1;
    m=5;
elseif(number=='2')
    k=1;
    m=6;
elseif(number=='3')
    k=1;
    m=7;
elseif(number=='4')
    k=2;
    m=5;
elseif(number=='5')
    k=2;
    m=6;
elseif(number=='6')
    k=2;
    m=7;
elseif(number=='7')
    k=3;
    m=5;
elseif(number=='8')
    k=3;
    m=6;
elseif(number=='9')
    k=3;
    m=7;
elseif(number=='a')
    k=1;
    m=8;
elseif(number=='b')
    k=2;
    m=8;
elseif(number=='c')
    k=3;
    m=8;
elseif(number=='d')
    k=4;
    m=8;
elseif(number=='*')
    k=4;
    m=5;
elseif(number=='#')
    k=4;
    m=7;
end
    y1(1)=tab4(k);
    y1(2)=0;
    y2(1)=tab4(m);
    y2(2)=0;
for i=3:205
    y1(i)=tab(k)*y1(i-1)-y1(i-2);
    y2(i)=tab(m)*y2(i-1)-y2(i-2);
    x(i)=y1(i)+y2(i);
end
%bx=max(abs(x))
%zq=quantizer('fixed', 'ceil', 'saturate',[16 15]);
%a=num2hex(zq,y1)
%a=y1*2^15;
figure(1);
subplot(311);plot(x);
xx=fft(x,205);
pyy=xx.*conj(xx);
f=(0:(205/2-1));
for i=1:205/2-1
    f(i)=f(i)*8000/205;
end
subplot(312);plot(f,pyy(1:205/2));
tab2=[1.7033;1.6359;1.5623;1.4829;1.1631;1.0088;0.7901;0.5595]; %建立表矩阵1次谐波 N=205 coeff 
tab3=[0.9011;0.6760;0.4408;0.1989;-0.6471;-0.9823;-1.3758;-1.6870];
vk(1)=0;
vk(2)=0;
w=tab2;
for i1=1:8
    for i2=3:205
        vk(i2)=w(i1)*vk(i2-1)-vk(i2-2)+x(i2);
    end
    a=vk(205)^2+vk(204)^2;
    b(i)=w(i1)*vk(205);
    c(i)=b(i)*vk(204);
    Xk(i1)=vk(205)^2+vk(204)^2-w(i1)*vk(205)*vk(204);
end

for i=1:3
    if(Xk(i+1)<Xk(i))
        if(Xk(i)>7000)
            sq(1)=i;
        end
    elseif(Xk(i+1)>7000)
        sq(1)=i+1;
    end
end
for i=5:7
    if(Xk(i+1)<Xk(i))
        if(Xk(i)>7000)
            sq(2)=i;
        end
    elseif(Xk(i+1)>Xk(i)&&Xk(i+1)>7000)
        sq(2)=i+1;
    end
end
w2=tab3;
    for i2=3:205
        vk(i2)=w2(sq(1))*vk(i2-1)-vk(i2-2)+x(i2);
    end
    Xk2(1)=vk(205)^2+vk(204)^2-w2(sq(1))*vk(205)*vk(204);

    for i2=3:205
        vk(i2)=w2(sq(2))*vk(i2-1)-vk(i2-2)+x(i2);
    end
    Xk2(2)=vk(205)^2+vk(204)^2-w2(sq(2))*vk(205)*vk(204);
str='123A456B789C*0#D';
q=(sq(1)-1)*4+sq(2)-4;
re=str(q);
%figure(2);
subplot(313);stem(Xk);title(['你输入的号码是',re],'Color','r');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -