exponenta event banner

dsp. FIRHalfbandDecimator

Полуполосный прореживатель

Описание

dsp.FIRHalfbandDecimator Система object™ выполняет эффективное многофазное прореживание входного сигнала в два раза. Вы можете использовать dsp.FIRHalfbandDecimator реализовать аналитическую часть двухдиапазонного набора фильтров для фильтрации сигнала на низкочастотные и высокочастотные поддиапазоны. dsp.FIRHalfbandDecimator использует equiripple-конструкцию FIR для построения полуполосных фильтров и полифазную реализацию для фильтрации входных данных.

Чтобы отфильтровать и понизить выборку данных, выполните следующие действия.

  1. Создать dsp.FIRHalfbandDecimator и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

firhalfbanddecim = dsp.FIRHalfbandDecimator возвращает полуполосный прореживатель, firhalfbanddecim, с настройками по умолчанию. В настройках по умолчанию объект System фильтрует и понижает выборку входных данных с полуполосной частотой 11025 Гц, ширина перехода 4.1 кГц и затухание полосы останова 80 дБ.

пример

firhalfbanddecim = dsp.FIRHalfbandDecimator(Name,Value) возвращает полуполосный прореживатель с дополнительными свойствами, заданными одним или несколькими Name,Value аргументы пары.

Пример: firhalfbanddecim = dsp.FIRHalfbandDecimator('Specification','Filter order and stopband attenuation') создает объект полуполосного прореживателя FIR с порядком фильтрации 52 и затуханием стоп-полосы 80 дБ.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Параметры конструкции фильтра, заданные как символьный вектор. При установке Specification В одном из следующих вариантов можно выбрать два из трех доступных параметров конструкции для проектирования фильтра FIR Halfband.

  • 'Transition width and stopband attenuation' - Ширина перехода и затухание полосы останова являются расчетными параметрами.

  • 'Filter order and stopband attenuation' - Порядок фильтрации и затухание полосы останова являются расчетными параметрами.

  • 'Filter order and transition width' - Порядок фильтрации и ширина перехода являются параметрами проектирования.

Фильтр сконструирован с использованием оптимального метода проектирования эквириптного фильтра.

При установке Specification кому 'Coefficients', коэффициенты полуполосного фильтра задаются непосредственно через Numerator собственность.

Порядок фильтра, заданный как четное положительное целое число.

Зависимости

Это свойство применяется при установке Specification к также 'Filter order and stopband attenuation' или 'Filter order and transition width'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Затухание стоп-полосы в дБ, указанное как положительный действительный скаляр.

Зависимости

Это свойство применяется при установке Specification к также 'Filter order and stopband attenuation' или 'Transition width and stopband attenuation'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Ширина перехода в Гц, заданная как положительный вещественный скаляр. Значение ширины перехода в Гц должно быть меньше 1/2 входной частоты дискретизации.

Зависимости

Это свойство применяется при установке Specification к также 'Transition width and stopband attenuation' или 'Filter order and transition width'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коэффициенты полуполосного фильтра FIR, заданные как вектор строки. Коэффициенты должны соответствовать формату импульсной характеристики полуполосы FIR. Дополнительные сведения об этом формате см. в разделах Halfband Filters и FIR Halfband Filter Design. Если половинный порядок фильтра, (length(Numerator) - 1)/2, является четным, каждый другой коэффициент, начинающийся с первого коэффициента, должен быть равен нулю, за исключением центрального коэффициента, который должен быть равен 0,5. Если половина порядка фильтра нечётная, последовательность чередующихся нулей с 0,5 в центре начинается со второго коэффициента.

Зависимости

Это свойство применяется при установке Specification кому 'Coefficients'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Частота входных выборок в Гц, заданная как положительный действительный скаляр. Частота входных выборок по умолчанию составляет 44100 Гц. Если в качестве одного из параметров конструкции фильтра указана ширина перехода, она не может превышать 1/2 входной частоты дискретизации.

Типы данных: single | double

Свойства с фиксированной точкой

Длины коэффициентов в словах и дробях, указанные как подписанные или неподписанные numerictype объект. Значение по умолчанию, numerictype(1,16) соответствует знаковому объекту числового типа с 16-битовыми коэффициентами и длиной дроби, определяемой на основе значений коэффициентов, для обеспечения наилучшей возможной точности.

Это свойство невозможно настроить.

Длина слова на выходе равна длине слова на входе. Длина доли выходного сигнала вычисляется таким образом, что весь динамический диапазон выходного сигнала может быть представлен без переполнения. Дополнительные сведения о том, как вычисляется длина фракции вывода, см. в разделе Правила точности с фиксированной точкой для предотвращения переполнения в фильтрах FIR.

Метод округления для выходных операций с фиксированной точкой, заданный как символьный вектор. Дополнительные сведения о режимах округления см. в разделах Точность и диапазон.

Использование

Описание

пример

ylow = firhalfbanddecim(x) фильтрация входного сигнала x с помощью полубандового фильтра FIR, firhalfbanddecimи понижает выходной сигнал в 2 раза.

пример

[ylow,yhigh] = firhalfbanddecim(x) вычисляет ylow и yhigh, банка фильтров анализа, firhalfbanddecim для ввода x. Входная матрица Ki-by-N обрабатывается как N независимых каналов. Объект System генерирует два комплементарных мощности выходных сигнала путем сложения и вычитания двух выходных сигналов многофазной ветви соответственно. ylow и yhigh имеют одинаковый размер (Ko-by-N) и тип данных. Ko = Ki/2, где 2 - коэффициент прореживания.

Входные аргументы

развернуть все

Ввод данных, заданный как вектор столбца или матрица. Если входной сигнал является матрицей, каждый столбец матрицы обрабатывается как независимый канал. Число строк во входном сигнале должно быть кратным 2.

Этот объект поддерживает входной сигнал переменного размера.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да

Выходные аргументы

развернуть все

Поддиапазон нижних частот выхода прореживателя, возвращаемый в виде вектора столбца или матрицы. Выходные данные, ylow является низкочастотной полуполосной отфильтрованной и понижающей дискретизацией версией входного сигнала x. Из-за половинного характера фильтра коэффициент понижающей дискретизации всегда равен 2.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да

Верхний поддиапазон выхода прореживателя, возвращаемый в виде вектора столбца или матрицы. Выходные данные, yhigh является полнополосной отфильтрованной и понижающей дискретизацией версией входного сигнала x. Из-за половинного характера фильтра коэффициент понижающей дискретизации всегда равен 2.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fi
Поддержка комплексного номера: Да

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

freqzЧастотная характеристика объекта системы дискретно-временного фильтра
fvtoolВизуализация частотной характеристики фильтров DSP
infoСведения об объекте filter System
costОценка затрат на внедрение фильтра Объект системы
coeffsВозвращает коэффициенты объекта System фильтра в структуре
polyphaseМногофазное разложение многоскоростного фильтра
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Создайте фильтр полуполосного прореживания нижних частот для данных, дискретизированных на частоте 44,1 кГц. Выходная скорость передачи данных равна 1/2 входной частоты дискретизации, или 22,05 кГц. Укажите порядок фильтрации 52 с шириной перехода 4,1 кГц.

Fs = 44.1e3; 
filterspec = 'Filter order and transition width';
Order = 52;
TW = 4.1e3; 
firhalfbanddecim =dsp.FIRHalfbandDecimator('Specification',filterspec, ...
                                              'FilterOrder',Order, ...
                                              'TransitionWidth',TW, ...
                                              'SampleRate',Fs);

Постройте график импульсной характеристики. Коэффициент нулевого порядка задерживается на 26 выборок, что равно групповой задержке фильтра. Это дает причинный полуполосный фильтр.

fvtool(firhalfbanddecim,'Analysis','impulse')

Figure Filter Visualization Tool - Impulse Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Impulse Response contains an object of type stem.

Постройте график величины и фазовой характеристики.

fvtool(firhalfbanddecim,'Analysis','freq')

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

Для извлечения низкочастотного поддиапазона из речевого сигнала используйте набор фильтров анализа полуполосы и фильтр интерполяции.

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

Примечание: audioDeviceWriter Системная object™ не поддерживается в MATLAB Online.

Настройте устройство чтения аудиофайлов, банк фильтров анализа, устройство записи аудиоустройств и фильтр интерполяции. Частота дискретизации аудиоданных составляет 22050 Гц. Порядок полуполосного фильтра составляет 52, с шириной перехода 2 кГц.

afr = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024);

filterspec = 'Filter order and transition width';
Order = 52;
TW = 2000;

firhalfbanddecim = dsp.FIRHalfbandDecimator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',afr.SampleRate);

firhalfbandinterp = dsp.FIRHalfbandInterpolator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',afr.SampleRate/2);

adw = audioDeviceWriter('SampleRate',afr.SampleRate);

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

fvtool(firhalfbanddecim)

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.

Считайте речевой сигнал из аудиофайла в кадрах из 1024 выборок. Фильтрация речевого сигнала на низкочастотные и высокочастотные поддиапазоны с частотой полуполосы 5512,5 Гц. Восстановление аппроксимации нижних частот речевого сигнала путем интерполяции поддиапазона нижних частот. Воспроизвести отфильтрованные выходные данные.

while ~isDone(afr)
  audioframe = afr();
  xlo = firhalfbanddecim(audioframe);
  ylow = firhalfbandinterp(xlo);
  adw(ylow);
end

Дождитесь завершения воспроизведения аудиофайла, затем закройте входной файл и освободите аудиоресурс.

release(afr);           
release(adw);

Используйте полуполосный прореживатель и интерполятор для реализации двухканального набора фильтров. В этом примере используется входной аудиофайл и показано, что спектр мощности выходного сигнала блока фильтров существенно не отличается от входного сигнала.

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

Примечание: audioDeviceWriter Системная object™ не поддерживается в MATLAB Online.

Настройте устройство чтения аудиофайлов и устройство записи. Создайте полуполосный прореживатель и интерполятор FIR. Наконец, настройте анализатор спектра для отображения спектров мощности входа и выхода блока фильтров.

AF = dsp.AudioFileReader('speech_dft.mp3','SamplesPerFrame',1024);
AP = audioDeviceWriter('SampleRate',AF.SampleRate);

filterspec = 'Filter order and transition width';
Order = 52;
TW = 2000;

firhalfbanddecim = dsp.FIRHalfbandDecimator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',AF.SampleRate);

firhalfbandinterp = dsp.FIRHalfbandInterpolator(...
    'Specification',filterspec,'FilterOrder',Order,...
    'TransitionWidth',TW,'SampleRate',AF.SampleRate/2,...
    'FilterBankInputPort',true);

SpecAna = dsp.SpectrumAnalyzer('SampleRate',AF.SampleRate,...
    'PlotAsTwoSidedSpectrum',false,'ReducePlotRate',false,...
    'ShowLegend',true,...
    'ChannelNames',{'Input signal','Filtered output signal'});

Считывайте одновременно отсчеты звука 1024. Фильтрация входного сигнала для получения низкочастотных и высокочастотных поддиапазонов, прореженных в два раза. Это банк фильтров анализа. В качестве набора фильтров синтеза используйте полупозиционный интерполятор. Отображение спектра рабочей мощности входного аудиосигнала и выходного сигнала блока фильтров синтеза. Воспроизведение выходных данных.

while ~isDone(AF)
    audioInput = AF();
    [xlo,xhigh] = firhalfbanddecim(audioInput);
    audioOutput = firhalfbandinterp(xlo,xhigh);
    spectrumInput = [audioInput audioOutput];
    SpecAna(spectrumInput);
    AP(audioOutput);
end

release(AF);
release(AP);
release(SpecAna);

Создайте полуполосный прореживатель для данных, дискретизированных на частоте 44,1 кГц. Используйте конструкцию минимального порядка с шириной перехода 2 кГц и затуханием полосы останова 60 дБ.

hfirhalfbanddecim = dsp.FIRHalfbandDecimator(...
    'Specification','Transition width and stopband attenuation',...
    'TransitionWidth',2000,'StopbandAttenuation',60,'SampleRate',44.1e3);

Фильтрация двухканального входа в низкочастотные и высокоскоростные поддиапазоны

x = randn(1024,2);
[ylow,yhigh] = step(hfirhalfbanddecim,x);

Подробнее

развернуть все

Алгоритмы

развернуть все

Ссылки

[1] Харрис, F.J. Multirate Signal Processing for Communication Systems, Prentice Hall, 2004, pp. 208-209.

Расширенные возможности

.

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

Представлен в R2014b