Проектируйте параметрический эквалайзер
[
проектирует B
,A
] =
designParamEQ(N
,gain
,centerFreq
,bandwidth
)N
параметрический эквалайзер I порядка с заданным коэффициентом усиления, центральной частотой и шириной полосы пропускания. B
и A
являются матрицами коэффициентов числителя и знаменателя с столбцами, соответствующими каскадным фильтрам секции второго порядка (SOS).
[
задает опции с использованием одного или нескольких B
,A
] =
designParamEQ(___,Name,Value
)Name,Value
аргументы в виде пар.
Задайте порядок фильтра, пиковый коэффициент усиления в дБ, нормализованные центральные частоты и нормированную полосу пропускания полос вашего параметрического эквалайзера.
N = [2, ... 4]; коэффициент усиления = [6, ... -4]; centerFreq = [0.25, ... 0.75]; bandwidth = [0.12, ... 0.1];
Сгенерируйте коэффициенты фильтра с помощью заданных параметров.
[B,A] = designParamEQ(N,gain,centerFreq,bandwidth,"Orientation","row");
Визуализация вашего создания фильтра.
fvtool([B,A]);
Спроектируйте параметрический эквалайзер секций второго порядка (SOS) с помощью designParamEQ
и фильтрация аудиопотока.
Создайте считыватель аудио файла и аудио устройства средства записи Системных объектов. Используйте частоту дискретизации считывающего устройства в качестве частоты дискретизации средства записи.
frameSize = 256; fileReader = dsp.AudioFileReader("RockGuitar-16-44p1-stereo-72secs.wav","SamplesPerFrame",frameSize); sampleRate = fileReader.SampleRate; deviceWriter = audioDeviceWriter("SampleRate",sampleRate);
Воспроизведите аудиосигнал через устройство.
count = 0; while count < 2500 audio = fileReader(); deviceWriter(audio); count = count + 1; end reset(fileReader)
Проектируйте параметрический эквалайзер SOS, подходящий для использования с dsp.BiquadFilter
.
N = [4,4]; gain = [-25,35]; centerFreq = [0.01,0.5]; bandwidth = [0.35,0.5]; [B,A] = designParamEQ(N,gain,centerFreq,bandwidth);
Визуализация вашего создания фильтра. Функции designParamEQ
с теми же спецификациями проекта. Задайте ориентацию выхода следующим "row"
так, что он подходит для использования со fvtool
.
[Bvisualize,Avisualize] = designParamEQ(N,gain,centerFreq,bandwidth,"Orientation","row"); fvtool([Bvisualize,Avisualize], ... "Fs",fileReader.SampleRate, ... "FrequencyScale","Log");
Создайте фильтр biquad.
myFilter = dsp.BiquadFilter( ... "SOSMatrixSource","Input port", ... "ScaleValuesInputPort",false);
Создайте спектральный анализатор, чтобы визуализировать исходный аудиосигнал, и аудиосигнал прошел через ваш параметрический эквалайзер.
scope = dsp.SpectrumAnalyzer( ... "SampleRate",sampleRate, ... "PlotAsTwoSidedSpectrum",false, ... "FrequencyScale","Log", ... "FrequencyResolutionMethod","WindowLength", ... "WindowLength",frameSize, ... "Title","Original and Equalized Signals", ... "ShowLegend",true, ... "ChannelNames",{'Original Signal','Equalized Signal'});
Воспроизведение фильтрованного аудиосигнала и визуализация исходного и фильтрованного спектров.
count = 0; while count < 2500 originalSignal = fileReader(); equalizedSignal = myFilter(originalSignal,B,A); scope([originalSignal(:,1),equalizedSignal(:,1)]); deviceWriter(equalizedSignal); count = count + 1; end
Как лучшая практика, отпустите объекты после выполнения.
release(deviceWriter) release(fileReader) release(scope)
Спроектируйте параметрический эквалайзер четвертого порядка (FOS) с помощью designParamEQ
и фильтрация аудиопотока.
Создайте считыватель аудио файла и аудио устройства средства записи Системных объектов. Используйте частоту дискретизации считывающего устройства в качестве частоты дискретизации средства записи.
frameSize = 256; fileReader = dsp.AudioFileReader( ... "RockGuitar-16-44p1-stereo-72secs.wav", ... "SamplesPerFrame",frameSize); sampleRate = fileReader.SampleRate; deviceWriter = audioDeviceWriter( ... "SampleRate",sampleRate);
Воспроизведите аудиосигнал через устройство.
count = 0; while count < 2500 x = fileReader(); deviceWriter(x); count = count + 1; end reset(fileReader)
Проектируйте коэффициенты параметрического эквалайзера FOS.
N = [2,4]; gain = [5,10]; centerFreq = [0.025,0.65]; bandwidth = [0.025,0.35]; mode = "fos"; [B,A] = designParamEQ(N,gain,centerFreq,bandwidth,mode,"Orientation","row");
Создайте фильтры БИХ ФОС.
myFilter = dsp.FourthOrderSectionFilter(B,A);
Визуализируйте частотную характеристику вашего параметрического эквалайзера.
fvtool(myFilter)
Создайте анализатор спектра, чтобы визуализировать исходный аудиосигнал, и аудиосигнал прошел через ваш параметрический эквалайзер.
scope = dsp.SpectrumAnalyzer( ... "SampleRate",sampleRate, ... "PlotAsTwoSidedSpectrum",false, ... "FrequencyScale","Log", ... "FrequencyResolutionMethod","WindowLength", ... "WindowLength",frameSize, ... "Title","Original and Equalized Signals", ... "ShowLegend",true, ... "ChannelNames",{'Original Signal','Equalized Signal'});
Воспроизведение фильтрованного аудиосигнала и визуализация исходного и фильтрованного спектров.
count = 0; while count < 2500 x = fileReader(); y = myFilter(x); scope([x(:,1),y(:,1)]); deviceWriter(y); count = count + 1; end
Как лучшая практика, отпустите объекты после выполнения.
release(fileReader) release(deviceWriter) release(scope)
N
- Порядок фильтрацииПорядок фильтра, заданный в виде скаляра или вектора-строки той же длины, что и centerFreq
. Элементы вектора должны быть четными целыми числами.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
gain
- Пиковое усиление (дБ)Пиковое усиление в дБ, заданное как скаляр или вектор-строка той же длины, что и centerFreq
. Элементы вектора должны быть реальными.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
centerFreq
- Нормированная центральная частота полос эквалайзераНормированная центральная частота диапазонов эквалайзера, заданная как скалярный или вектор-строка действительных значений в области значений от 0 до 1, где 1 соответствует частоте Найквиста ( Если centerFreq
задается как вектор-строка, отдельные эквалайзеры предназначены для каждого элемента centerFreq
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
bandwidth
- Нормированная полоса пропусканияНормированная шумовая полоса, заданная как скаляр или вектор-строка той же длины, что и centerFreq
. Элементы вектора заданы как вещественные значения в область значений 0 к 1, где 1 соответствует частоте Нюквиста (и рад/отсчет).
Нормированную пропускную способность измеряют при усилении/2 дБ. Если коэффициент усиления установлен в -Inf
(узкополосный фильтр), нормированную полосу измеряют в точке ослабления 3 дБ: .
Чтобы преобразовать октавную полосу в нормированную полосу, вычислите связанный Q -factor как
Затем преобразуйте в полосу пропускания
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
mode
- Проект'sos'
(по умолчанию) | 'fos'
Проект, заданный как 'sos'
или 'fos'
.
'sos'
- Реализует ваш эквалайзер как каскадные фильтры второго порядка.
'fos'
- Реализует ваш эквалайзер как каскадные фильтры четвертого порядка. Поскольку разделы четвертого порядка не требуют расчета корней, они, как правило, более эффективны в вычислительном отношении.
Типы данных: char
| string
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'Orientation',"row"
'Orientation'
- Ориентация коэффициентов возвращенного фильтра"column"
(по умолчанию) | "row"
Ориентация коэффициентов возвращенного фильтра, заданная как разделенная разделенными запятой парами, состоящая из 'Orientation'
и "column"
или "row"
:
Задайте 'Orientation'
на "row"
для взаимодействия с FVTool, dsp.DynamicFilterVisualizer
, и dsp.FourthOrderSectionFilter
.
Задайте 'Orientation'
на "column"
для взаимодействия с dsp.BiquadFilter
.
Типы данных: char
| string
B
- Коэффициенты фильтра числителяКоэффициенты фильтра числителя, возвращенные как матрица. Размер и интерпретация B
зависит от Orientation
и mode
:
Если 'Orientation'
установлено в "column"
и mode
установлено в "sos"
, затем B
возвращается как матрица L -by-3. Каждый столбец соответствует коэффициентам числителя ваших каскадных секций второго порядка.
Если 'Orientation'
установлено в "column"
и mode
установлено в "fos"
, затем B
возвращается как матрица L -by-5. Каждый столбец соответствует коэффициентам числителя ваших каскадных разделов четвертого порядка.
Если 'Orientation'
установлено в "row"
и mode
установлено в "sos"
, затем B
возвращается как матрица 3- L. Каждая строка соответствует коэффициентам числителя ваших каскадных секций второго порядка.
Если 'Orientation'
установлено в "row"
и mode
установлено в "fos"
, затем B
возвращается как 5-бай- L матрица. Каждая строка соответствует коэффициентам числителя ваших каскадных разделов четвертого порядка.
A
- Коэффициенты фильтра знаменателяКоэффициенты фильтра знаменателя, возвращенные как матрица. Размер и интерпретация A
зависит от Orientation
и mode
:
Если 'Orientation'
установлено в "column"
и mode
установлено в "sos"
, затем A
возвращается как матрица L -by-2. Каждый столбец соответствует коэффициентам знаменателя ваших каскадных секций второго порядка. A
не включает начальные коэффициенты единства.
Если 'Orientation'
установлено в "column"
и mode
установлено в "fos"
, затем A
возвращается как матрица L -by-4. Каждый столбец соответствует коэффициентам знаменателя ваших каскадных разделов четвертого порядка. A
не включает начальные коэффициенты единства.
Если 'Orientation'
установлено в "row"
и mode
установлено в "sos"
, затем A
возвращается как матрица 3- L. Каждая строка соответствует коэффициентам знаменателя ваших каскадных секций второго порядка.
Если 'Orientation'
установлено в "row"
и mode
установлено в "fos"
, затем A
возвращается как 5-бай- L матрица. Каждая строка соответствует коэффициентам знаменателя ваших каскадных разделов четвертого порядка.
[1] Orfanidis, Sophocles J. «High-Order Digital Parametric Equalizer Design». Журнал Общества аудиотехники. Том 53, ноябрь 2005, стр. 1026-1046.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.