bandstop
|
Страница в процессе разработки. |
Сигналы после режекторного фильтра.
| Библиотека |
|
Синтаксис
Вызов функции
-
y = bandstop(x,wpass)— фильтрует входной сигналxс помощью режекторного фильтра с диапазоном частот полосы задерживания, заданным двухэлементным векторомwpassв нормированных единицах рад/отсчет. Функцияbandstopиспользует фильтр минимального порядка с затуханием в полосе пропускания60дБ и компенсирует задержку, вносимую фильтром. Еслиx- матрица, то функция фильтрует каждый столбец независимо.
-
y = bandstop(___, Name,Value)— задает дополнительные опции для любого из предыдущих синтаксисов одним или несколькими аргументами Name,Value.
-
y = bandstop(___; out=:plot)— строит график входного сигнала и накладывает отфильтрованный сигнал.
Аргументы
Входные аргументы
#
x —
входной сигнал
вектор | матрица
Details
Входной сигнал, заданный как вектор или матрица.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
wpass —
нормированный диапазон частот полосы задерживания
двухэлементный вектор с элементами в интервале (0, 1)
Details
Нормированный диапазон частот полосы задерживания, заданный в виде двухэлементного вектора с элементами в интервале (0, 1).
#
fs —
частота дискретизации
скаляр
Details
Частота дискретизации, заданная как положительный вещественный скаляр.
Входные аргументы «имя-значение»
Укажите необязательные пары аргументов в формате Name, Value, где Name — имя аргумента, а Value — соответствующее значение. Аргументы типа «имя-значение» должны располагаться после других аргументов, но порядок пар не имеет значения.
Используйте запятые для разделения имени и значения, а Name заключите в кавычки.
Пример: f=bandstop(x, 200, fs, "StopbandAttenuation",30).
#
ImpulseResponse —
тип импульсной характеристики
"auto" (по умолчанию) | "fir" | "iir"
Details
Тип импульсной характеристики фильтра, заданный как "fir", "iir" или "auto":
-
"fir"— функция проектирует фильтр минимального порядка, линейно-фазовый, с конечной импульсной характеристикой (КИХ). Чтобы компенсировать задержку, функция добавляет к входному сигналу нулей, где — порядок фильтра. Затем функция фильтрует сигнал и удаляет первые отсчетов на выходе.В этом случае входной сигнал должен быть как минимум в два раза длиннее, чем фильтр, удовлетворяющий спецификациям.
-
"iir"— функция проектирует фильтр минимального порядка с бесконечной импульсной характеристикой (БИХ) и использует функциюfiltfiltдля выполнения фильтрации с нулевой фазой и компенсации задержки фильтра.Если сигнал не в три раза длиннее, чем фильтр, удовлетворяющий спецификации, функция проектирует фильтр меньшего порядка и, следовательно, меньшей крутизны.
-
"auto"— функция проектирует КИХ-фильтр минимального порядка, если входной сигнал достаточно длинный, и БИХ-фильтр минимального порядка в противном случае. В частности, функция выполняет следующие шаги:-
Вычисляет минимальный порядок, который должен иметь КИХ-фильтр, чтобы соответствовать спецификациям. Если сигнал как минимум вдвое длиннее требуемого порядка фильтра, проектирует и использует этот фильтр.
-
Если сигнал недостаточно длинный, вычисляет минимальный порядок, который должен иметь КИХ-фильтр, чтобы соответствовать спецификациям. Если длина сигнала по крайней мере в три раза превышает требуемый порядок фильтра, проектирует и использует этот фильтр.
-
Если длина сигнала недостаточна, урезает порядок до одной трети длины сигнала и проектирует БИХ-фильтр такого порядка. Уменьшение порядка происходит за счет крутизны спада переходной полосы.
-
Фильтрует сигнал и компенсирует задержку.
-
#
Steepness —
крутизна спада переходной полосы
[0.85 0.85] (по умолчанию) | двухэлементный вектор с элементами в интервале [0.5, 1) | скаляр в интервале [0.5, 1)
Details
Крутизна спада переходной полосы, заданная как двухэлементный вектор с элементами в интервале [0.5, 1) или скаляр в интервале [0.5, 1). По мере увеличения крутизны импульсная характеристика фильтра приближается к идеальной импульсной характеристике режекторного фильтра, но при этом увеличивается и результирующая длина фильтра, а также вычислительные затраты на операцию фильтрации. Дополнительную информацию см. в разделе Крутизна спада режекторного фильтра.
#
StopbandAttenuation —
затухание в полосе задерживания фильтра
60 (по умолчанию) | положительный скаляр в дБ
Details
Затухание в полосе задерживания фильтра, заданное как положительный скаляр в дБ.
Выходные аргументы
#
y —
отфильтрованный сигнал
вектор | матрица
Details
Отфильтрованный сигнал, возвращаемый в виде вектора или матрицы с теми же размерами, что и входной сигнал.
Примеры
Режекторная фильтрация тонов
Details
Сгенерируем сигнал, дискретизированный с частотой 1 кГц в течение 1 секунды. Сигнал содержит три тона: с частотой 50 Гц, 150 Гц и 250 Гц. Амплитуда высокочастотного и низкочастотного тона вдвое больше амплитуды промежуточного тона. К сигналу добавлен гауссовский белый шум с дисперсией 1/100.
import EngeeDSP.Functions: bandstop, randn
fs = 1e3
t = 0:1/fs:1
x = [2 1 2] * sin.(2π * [50; 150; 250] .* reshape(t, 1, :)) + randn(1, length(t)) / 10
Отфильтруем сигнал с помощью режекторного фильтра, чтобы удалить промежуточный тон. Укажем частоты полосы задерживания 100 Гц и 200 Гц. Выведем исходный и отфильтрованный сигналы, а также их спектры.
bandstop(x,[100 200],fs; out=:plot)

Крутизна спада режекторного фильтра
Details
Отфильтруем белый шум, дискретизированный с частотой 1 кГц, с помощью режекторного фильтра с бесконечной импульсной характеристикой и полосой задерживания 100 Гц. Используем различные значения крутизны. Построим спектры отфильтрованных сигналов.
import EngeeDSP.Functions: randn, bandstop, pspectrum
fs = 1000;
x = randn(20000,1);
y1 = bandstop(x,[50 150],fs,"ImpulseResponse","iir","Steepness",0.5)
y2 = bandstop(x,[200 300],fs,"ImpulseResponse","iir","Steepness",0.8)
y3 = bandstop(x,[350 450],fs,"ImpulseResponse","iir","Steepness",0.95)
pspectrum([y1 y2 y3],fs,out=:plot)

Сделаем фильтры асимметричными, задав разные значения крутизны на нижних и верхних частотах полосы задерживания.
y1 = bandstop(x,[50 150],fs,"ImpulseResponse","iir","Steepness",[0.5 0.8])
y2 = bandstop(x,[200 300],fs,"ImpulseResponse","iir","Steepness",[0.5 0.8])
y3 = bandstop(x,[350 450],fs,"ImpulseResponse","iir","Steepness",[0.5 0.8])
pspectrum([y1 y2 y3],fs,out=:plot)

Дополнительно
Крутизна спада режекторного фильтра
Details
Аргумент Steepness управляет шириной переходных областей фильтра. Чем меньше крутизна, тем шире область перехода. Чем выше крутизна, тем более узкой будет область перехода.
Чтобы интерпретировать крутизну фильтра, рассмотрим следующие определения:
-
Частота Найквиста — самая высокочастотная составляющая сигнала, которая может быть дискретизирована с заданной частотой без искажений. Частота Найквиста равна рад/отсчет, если входной сигнал не содержит информации о времени, и Гц, если вы задаете частоту дискретизации.
-
Нижняя и верхняя частоты полосы задерживания фильтра и — частоты, ниже и выше которых затухание равно или больше значения, заданного с помощью
StopbandAttenuation.Центр полосы задерживания .
-
Ширина нижней переходной полосы фильтра , где — первый элемент заданных частот
fpass. -
Ширина верхней переходной полосы фильтра , где — второй элемент заданных частот
fpass. -
Большинство неидеальных фильтров также ослабляют входной сигнал в полосе пропускания. Максимальное значение этого частотно-зависимого ослабления называется пульсациями в полосе пропускания. Каждый фильтр, используемый в
bandstopимеет пульсации в полосе пропускания0.1дБ.
Чтобы управлять шириной переходных полос, вы можете указать Steepness как двухэлементный вектор , либо как скаляр.
Когда Steepness задан в виде вектора:
-
Функция вычисляет ширину нижней переходной полосы как
-
Функция вычисляет ширину верхней переходной полосы как
Когда Steepness задан в виде скаляра, то функция:
-
вычисляет и , используя указанное скалярное значение.
-
создает симметричный фильтр с шириной нижней и верхней переходной полосы, равной меньшему из и .
По умолчанию значение Steepness равно [0.85 0.85].