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 и IEC 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 полосы октавы с центральной частотой 1 000 Гц и, частота дискретизации 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)

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

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

Смотрите также

Введенный в R2011a

Для просмотра документации необходимо авторизоваться на сайте