当前位置:   article > 正文

matlab怎么提取倍频,Matlab讨论区 - 声振论坛 - 振动,动力学,声学,信号处理,故障诊断 - Powered by Discuz!...

design not possible. check frequencies.

function [g,f] = oct3spec(B,A,Fs,Fc,s,n);

% OCT3SPEC Plots a one-third-octave filter characteristics.

%    OCT3SPEC(B,A,Fs,Fc) plots the attenuation of the filter defined by

%    B and A at sampling frequency Fs. Fc is the center frequency of

%    the one-third-octave filter. The plot covers one decade on both sides

%    of Fc.

%

%    OCT3SPEC(B,A,Fs,Fc,'ANSI',N) superposes the ANSI Order-N analog

%    specification for comparison. Default is N = 3.

%

%    OCT3SPEC(B,A,Fs,Fc,'IEC',N) superposes the characteristics of the

%    IEC 61260 class N specification for comparison. Default is N = 1.

%

%    [G,F] = OCT3SPEC(B,A,Fs,Fc) returns two 512-point vectors with

%    the gain (in dB) in G and logarithmically spaced frequencies in F.

%    The plot can then be obtained by SEMILOGX(F,G)

%

%    See also OCT3DSGN, OCTSPEC, OCTDSGN.

% Author: Christophe Couvreur, Faculte Polytechnique de Mons ( Belgium)

% Last modification: Sept. 4, 1997, 11:00am.

% References:

%    [1] ANSI S1.1-1986 (ASA 65-1986): Specifications for

%        Octave-Band and Fractional-Octave-Band Analog and

%        Digital Filters, 1993.

%    [2] IEC 61260 (1995-08):  Electroacoustics -- Octave-Band and

%        Fractional-Octave-Band Filters, 1995.

if (nargin < 4) | (nargin > 6)

error('Invalide number of input arguments.');

end

ansi = 0;

iec = 0;

if nargin > 4

if strcmp(lower(s),'ansi')

ansi = 1;

if nargin == 5

n = 3;

end

elseif strcmp(lower(s),'cei') | strcmp(lower(s),'iec')

iec = 1;

if nargin == 5

n = 1

end

if (n < 0) | (n > 3)

error('IEC class must be 0, 1, or 2');

end

end

end

N = 512;

pi = 3.14159265358979;

F = logspace(log10(Fc/10),log10(min(Fc*10,Fs/2)),N);

H = freqz(B,A,2*pi*F/Fs);

G = 20*log10(abs(H));

% Set output variables

if nargout ~= 0

g = G; f = F;

return

end

% Generate the plot

if (ansi)                       % ANSI Order-n specification

f = logspace(log10(Fc/10),log10(Fc*10),N);

f1 = Fc/(2^(1/6));

f2 = Fc*(2^(1/6));

Qr = Fc/(f2-f1);

Qd = (pi/2/n)/(sin(pi/2/n))*Qr;

Af = 10*log10(1+Qd^(2*n)*((f/Fc)-(Fc./f)).^(2*n));

semilogx(F,G,f,-Af,'--');

legend('Filter',['ANSI order-' int2str(n)],0);

elseif (iec)                                  % CEI specification

semilogx(F,G);

hold on

if n == 0

tolup =  [ .15 .15 .15 .15 .15 -2.3 -18.0 -42.5 -62 -75 -75 ];

tollow = [ -.15 -.2 -.4 -1.1 -4.5 -realmax -inf -inf -inf -inf -inf ];

elseif n == 1

tolup =  [ .3 .3 .3 .3 .3 -2 -17.5 -42 -61 -70 -70 ];

tollow = [ -.3 -.4 -.6 -1.3 -5 -realmax -inf -inf -inf -inf -inf ];

elseif n == 2

tolup =  [ .5 .5 .5 .5 .5 -1.6 -16.5 -41 -55 -60 -60  ];

tollow = [ -.5 -.6 -.8 -1.6 -5.5 -realmax -inf -inf -inf -inf -inf ];

end

% Reference frequencies in base 2 system

f = Fc * [1 1.02676 1.05594 1.08776 1.12246 1.12246 1.29565 1.88695 ...

3.06955 5.43474 NaN ];

f(length(f)) = realmax;

ff = Fc * [1 0.97394 0.94702 0.91932 0.89090 0.89090 0.77181 0.52996 ...

0.32578 0.18400 NaN ];

ff(length(ff)) = realmin;

semilogx(F,G,f,tolup,'--');

semilogx(F,G,f,tollow,'--');

semilogx(F,G,ff,tolup,'--');

semilogx(F,G,ff,tollow,'--');

hold off

legend('Filter',['IEC class ' int2str(n)],0);

else

semilogx(F,G);

end

xlabel('Frequency [Hz]'); ylabel('Gain [dB]');

title(['One-third-octave filter: Fc =',int2str(Fc),' Hz, Fs = ',int2str(Fs),' Hz']);

axis([Fc/10 Fc*10 -80 5]);

grid on

function [B,A] = oct3dsgn(Fc,Fs,N);

% OCT3DSGN  Design of a one-third-octave filter.

%    [B,A] = OCT3DSGN(Fc,Fs,N) designs a digital 1/3-octave filter with

%    center frequency Fc for sampling frequency Fs.

%    The filter is designed according to the Order-N specification

%    of the ANSI S1.1-1986 standard. Default value for N is 3.

%    Warning: for meaningful design results, center frequency used

%    should preferably be in range Fs/200 < Fc < Fs/5.

%    Usage of the filter: Y = FILTER(B,A,X).

%

%    Requires the Signal Processing Toolbox.

%

%    See also OCT3SPEC, OCTDSGN, OCTSPEC.

% Author: Christophe Couvreur, Faculte Polytechnique de Mons (Belgium)

% Last modification: Aug. 25, 1997, 2:00pm.

% References:

%    [1] ANSI S1.1-1986 (ASA 65-1986): Specifications for

%        Octave-Band and Fractional-Octave-Band Analog and

%        Digital Filters, 1993.

if (nargin > 3) | (nargin < 2)

error('Invalide number of arguments.');

end

if (nargin == 2)

N = 3;

end

if (Fc > 0.88*(Fs/2))

error('Design not possible. Check frequencies.');

end

% Design Butterworth 2Nth-order one-third-octave filter

% Note: BUTTER is based on a bilinear transformation, as suggested in [1].

pi = 3.14159265358979;

f1 = Fc/(2^(1/6));

f2 = Fc*(2^(1/6));

Qr = Fc/(f2-f1);

Qd = (pi/2/N)/(sin(pi/2/N))*Qr;

alpha = (1 + sqrt(1+4*Qd^2))/2/Qd;

W1 = Fc/(Fs/2)/alpha;

W2 = Fc/(Fs/2)*alpha;

[B,A] = butter(N,[W1,W2]);

function [p,f] = oct3bank(x);

% OCT3BANK Simple one-third-octave filter bank.

%    OCT3BANK(X) plots one-third-octave power spectra of signal vector X.

%    Implementation based on ANSI S1.11-1986 Order-3 filters.

%    Sampling frequency Fs = 44100 Hz. Restricted one-third-octave-band

%    range (from 100 Hz to 5000 Hz). RMS power is computed in each band

%    and expressed in dB with 1 as reference level.

%

%    [P,F] = OCT3BANK(X) returns two length-18 row-vectors with

%    the RMS power (in dB) in P and the corresponding preferred labeling

%    frequencies (ANSI S1.6-1984) in F.

%

%    See also OCT3DSGN, OCT3SPEC, OCTDSGN, OCTSPEC.

% Author: Christophe Couvreur, Faculte Polytechnique

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/118188
推荐阅读
相关标签
  

闽ICP备14008679号