fdesign.octave

Спецификация фильтра октавы

Синтаксис

d = fdesign.octave(l)
d = fdesign.octave(l, MASK)
d = fdesign.octave(l, MASK, spec)
d = fdesign.octave(..., Fs)

Описание

d = fdesign.octave(l) создает октавный объект спецификации фильтров d, с l полосы на октаву. Значение по умолчанию для l это единица.

Примечание

Фильтры, созданные fdesign.octave соответствовать ANSI® S1.11-2004 и стандарты МЭК 61260:1995.

d = fdesign.octave(l, MASK) создает октавный объект спецификации фильтров d с l полосы на октаву и MASK спецификация для FVTool. Доступные значения для маски:

  • 'class 0'

  • 'class 1'

  • 'class 2'

d = fdesign.octave(l, MASK, spec) создает октавный объект спецификации фильтров d с l полосы на октаву, MASK спецификация для FVTool и spec спецификация вектора символов. Доступные спецификации:

  • 'N, F0'

(не чувствительный к регистру), где:

  • N - порядок фильтра

  • F0 - центральная частота. Центральная частота задается в нормированных частотных модулях, принимая частоту дискретизации 48 кГц, если частота дискретизации в Гц не включена в спецификацию: d = fdesign.octave(..., Fs). Если вы задаете недопустимую центральную частоту, выдается предупреждение, и центральная частота округляется до ближайшего допустимого значения. Можно определить допустимые центральные частоты для проекта при помощи validfrequencies с твоего октавного объекта спецификации фильтров. Для примера:

    d = fdesign.octave(1,'Class 1','N,F0',6,1000,44.1e3);
    validcenterfreq = validfrequencies(d);
    Допустимые центральные частоты:

    • Должно быть более 20 Гц и менее 20 кГц, если вы задаете частоту дискретизации. Область значений 20 Гц до 20 кГц является стандартной областью значений слуха человека.

    • Вычисляются согласно следующему алгоритму, если количество полос на октаву, L, чётно:

      G = 10^(3/10);
      x = -1000:1350;
      validcenterfreq = 1000*(G.^((2*x-59)/(2*L)));
      validcenterfreq = validcenterfreq(validcenterfreq>20 & validcenterfreq<2e4);

    • Вычисляются согласно следующему алгоритму, если количество полос на октаву, L, нечетно:

      G = 10^(3/10);
      x = -1000:1350;
      validcenterfreq = 1000*(G.^((x-30)/L));
      validcenterfreq = validcenterfreq(validcenterfreq>20 & validcenterfreq<2e4);

      Сохраняются только центральные частоты больше 20 и меньше 20 000. Центральные частоты и соответствующие верхние частоты полосы должны быть меньше частоты Найквиста, что составляет половину частоты дискретизации (samplingfreq). Вектор частот верхней полосы (upperbandfreq), соответствующий центральным частотам (validcenterfreq) вычисляется с помощью следующего алгоритма:

      upperbandfreq = validcenterfreq.*(G^(1/(2*L)));
      Алгоритм удаляет центральные частоты, соответствующие частотам верхней полосы которых не подчиняются правилу Найквиста.
      validcenterfreq = validcenterfreq(upperbandfreq < samplingfreq/2);
      Если вы не задаете частоту дискретизации, fdesign.octave принимает samplingfreq 48 кГц. Чтобы получить действительные нормированные центральные частоты, оставшиеся центральные частоты делятся на 24 000.
      validcenterfreq = validcenterfreq/24000;

Примеры

свернуть все

Примечание. Если вы используете R2016a или более ранний релиз, замените каждый вызов объекта эквивалентным step синтаксис. Для примера, obj(x) становится step(obj,x).

Спроектируйте фильтр класса 0 шестого порядка, октавного диапазона с центральной частотой 1000 Гц и, частотой дискретизации 44,1 кГц.

d = fdesign.octave(1,'Class 0','N,F0',6,1000,44100)
d = 
  octave with properties:

               Response: 'Octave and Fractional Octave'
         BandsPerOctave: 1
                   Mask: 'Class 0'
          Specification: 'N,F0'
            Description: {2x1 cell}
    NormalizedFrequency: 0
                     Fs: 44100
            FilterOrder: 6
                     F0: 1000

biquad = design(d,'SystemObject',true)
biquad = 
  dsp.BiquadFilter with properties:

                   Structure: 'Direct form II'
             SOSMatrixSource: 'Property'
                   SOSMatrix: [3x6 double]
                 ScaleValues: [4x1 double]
           InitialConditions: 0
    OptimizeUnityScaleValues: true

  Show all properties

Постройте график величины характеристики фильтра с помощью fvtool. Логарифмическая шкала частоты автоматически устанавливается fvtool для октавных фильтров.

fvtool(biquad)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

Фильтрация синусоидального сигнала с помощью указанного выше спроектированного фильтра. Вход представляет собой сумму двух тонов - один с частотой 0,3 кГц и другой с частотой 3 кГц. Инициализируйте спектральный анализатор, чтобы просмотреть отфильтрованный спектр выходной степени.

Fs = 2500;
Sineobject1 = dsp.SineWave('SamplesPerFrame',1024,...
    'SampleRate',Fs,'Frequency',100);
Sineobject2 = dsp.SineWave('SamplesPerFrame',1024,...
    'SampleRate',Fs,'Frequency',1000);

sa = dsp.SpectrumAnalyzer('SampleRate',Fs,'NumInputPorts',2,...
    'PlotAsTwoSidedSpectrum',false,'YLimits',[-250,50],...
    'ChannelNames',{'Input','FilteredOutput'},'ShowLegend',true);

Поток синусоидального сигнала и передайте его как вход в биквадратический фильтр. Просмотрите вход и отфильтрованные выходом степени спектры с помощью спектрального анализатора.

for Iter = 1:3000
    Sinewave1 = Sineobject1();
    Sinewave2 = Sineobject2();
    Input = Sinewave1 + Sinewave2;
    filteredOutput = biquad(Input);
    sa(Input,filteredOutput);
end

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. These objects represent Input, FilteredOutput.

См. также

Введенный в R2011a