Спроектируйте переменный наклонный lowpass или highpass БИХ-фильтр
[
задает опции с помощью одного или нескольких B
,A
] =
designVarSlopeFilter(___,Name,Value
)Name,Value
парные аргументы.
Спроектируйте две секции второго порядка (SOS) БИХ-фильтры lowpass с помощью designVarSlopeFilter
.
Задайте частоту дискретизации, наклон и нормированную частоту среза для двух БИХ-фильтров lowpass. Частота дискретизации находится в Гц. Наклон находится в дБ/октаве.
Fs = 48e3; slope = 18; Fc1 = 10e3/(Fs/2); Fc2 = 16e3/(Fs/2);
Спроектируйте коэффициенты фильтра с помощью заданных параметров.
[B1,A1] = designVarSlopeFilter(slope,Fc1,"Orientation","row"); [B2,A2] = designVarSlopeFilter(slope,Fc2,"Orientation","row");
Визуализируйте свое создание фильтра.
fvtool([B1,A1],[B2,A2],"Fs",Fs,"FrequencyScale","Log"); legend("Fc = 10 kHz", ... "Fc = 16 kHz", ... "Location","SouthWest");
Спроектируйте секцию второго порядка (SOS) БИХ-фильтр lowpass с помощью designVarSlopeFilter
. Используйте свой фильтр lowpass, чтобы обработать звуковой сигнал.
Создайте считывающее устройство звукового файла и объекты средства записи аудио устройства. Используйте частоту дискретизации читателя как частота дискретизации средства записи. Вызовите setup
уменьшать вычислительную загрузку инициализации в цикле аудиопотока.
frameSize = 256; fileReader = dsp.AudioFileReader( ... "RockGuitar-16-44p1-stereo-72secs.wav", ... "SamplesPerFrame",frameSize); sampleRate = fileReader.SampleRate; deviceWriter = audioDeviceWriter( ... "SampleRate",sampleRate); setup(fileReader) setup(deviceWriter,ones(frameSize,2))
Проигрывайте звуковой сигнал через свое устройство.
count = 0; while count < 2500 audio = fileReader(); deviceWriter(audio); count = count + 1; end reset(fileReader)
Спроектируйте фильтр lowpass с наклоном на 12 дБ/октавы и 0,15 нормированными частотами среза.
slope = 12; cutoff = 0.15; [B,A] = designVarSlopeFilter(slope,cutoff);
Визуализируйте свое создание фильтра. Выводить коэффициенты фильтра, подходящие для fvtool
, вызовите designVarSlopeFilter
снова с теми же спецификациями проекта, но с Orientation
установите на "row"
.
[Bvisualize,Avisualize] = designVarSlopeFilter(slope,cutoff,"Orientation","row"); fvtool([Bvisualize,Avisualize],"Fs",sampleRate);
Создайте фильтр biquad.
myFilter = dsp.BiquadFilter( ... "SOSMatrixSource","Input port", ... "ScaleValuesInputPort",false);
Создайте спектр, анализатор, чтобы визуализировать исходный звуковой сигнал и звуковой сигнал прошел через ваш фильтр lowpass.
scope = dsp.SpectrumAnalyzer( ... "SampleRate",sampleRate, ... "PlotAsTwoSidedSpectrum",false, ... "FrequencyScale","Log", ... "FrequencyResolutionMethod","WindowLength", ... "WindowLength",frameSize, ... "Title","Original and Equalized Signal", ... "ShowLegend",true, ... "ChannelNames",{'Original Signal','Filtered Signal'});
Проигрывайте отфильтрованный звуковой сигнал и визуализируйте исходные и отфильтрованные спектры.
setup(scope,ones(frameSize,2)) count = 0; while count < 2500 originalSignal = fileReader(); filteredSignal = myFilter(originalSignal,B,A); scope([originalSignal(:,1),filteredSignal(:,1)]); deviceWriter(filteredSignal); count = count + 1; end
Как лучшая практика, выпустите свои объекты, однажды сделанные.
release(deviceWriter) release(fileReader) release(scope)
Спроектируйте две секции второго порядка (SOS) highpass БИХ-фильтры с помощью designVarSlopeFilter
.
Задайте частоту дискретизации в Гц, наклон в дБ/октаве и нормированную частоту среза.
Fs = 48e3; slope1 = 18; slope2 = 36; Fc = 4000/(Fs/2);
Спроектируйте коэффициенты фильтра с помощью заданных параметров.
[B1,A1] = designVarSlopeFilter(slope1,Fc,"hi","Orientation","row"); [B2,A2] = designVarSlopeFilter(slope2,Fc,"hi","Orientation","row");
Визуализируйте свое создание фильтра.
fvtool([B1,A1],[B2,A2],... "Fs",Fs,... "FrequencyScale","Log"); legend("slope = 18 dB/octave", ... "slope = 36 dB/octave", ... "Location","NorthWest")
Plosives являются совместимыми звуками, следующими из внезапного релиза потока воздуха. Они являются самыми явными в словах, начинающихся p, d, и звуках g. Plosives могут быть подчеркнуты процессом записи и часто displeasurable, чтобы услышать. В этом примере вы минимизируете plosives речевого сигнала путем применения highpass сжатия низкой полосы и фильтрации.
Создайте dsp.AudioFileReader
возразите и audioDeviceWriter
возразите, чтобы считать звуковой сигнал из файла и записать звуковой сигнал в устройство. Проигрывайте необработанный сигнал. Затем выпустите средство записи устройства и средство чтения файлов.
fileReader = dsp.AudioFileReader('audioPlosives.wav'); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate); while ~isDone(fileReader) audioIn = fileReader(); deviceWriter(audioIn); end release(deviceWriter) release(fileReader)
Спроектируйте фильтр highpass с крутым спадом всех частот ниже 120 Гц. Используйте dsp.BiquadFilter
возразите, чтобы реализовать highpass создание фильтра. Создайте перекрестный фильтр с одним перекрестным соединением на уровне 250 Гц. Перекрестный фильтр позволяет вам разделить представляющую интерес полосу для обработки. Создайте компрессор динамического диапазона, чтобы сжать динамический диапазон звуков plosive. Чтобы не применить усиление состава, установите MakeUpGainMode
к "Property"
и используйте MakeUpGain
на 0 дБ по умолчанию значение свойства. Создайте осциллограф времени, чтобы визуализировать обработанный и необработанный звуковой сигнал.
[B,A] = designVarSlopeFilter(48,120/(fileReader.SampleRate/2),"hi"); biquadFilter = dsp.BiquadFilter( ... "SOSMatrixSource","Input port", ... "ScaleValuesInputPort",false); crossFilt = crossoverFilter( ... "SampleRate",fileReader.SampleRate, ... "NumCrossovers",1, ... "CrossoverFrequencies",250, ... "CrossoverSlopes",48); dRCompressor = compressor( ... "Threshold",-35, ... "Ratio",10, ... "KneeWidth",20, ... "AttackTime",1e-4, ... "ReleaseTime",3e-1, ... "MakeUpGainMode","Property", ... "SampleRate",fileReader.SampleRate); scope = dsp.TimeScope( ... "SampleRate",fileReader.SampleRate, ... "TimeSpan",3, ... "BufferLength",fileReader.SampleRate*3*2, ... "YLimits",[-1 1], ... "ShowGrid",true, ... "ShowLegend",true, ... "ChannelNames",{'Original','Processed'});
В цикле аудиопотока:
Читайте в системе координат звукового файла.
Примените highpass, фильтрующий использование вашего фильтра biquad.
Разделите звуковой сигнал в две полосы.
Примените сжатие динамического диапазона к нижней полосе.
Сделайте ремикс каналов.
Запишите обработанный звуковой сигнал в свое аудио устройство для слушания.
Визуализируйте обработанные и необработанные сигналы на осциллографе времени.
Как лучшая практика, выпустите свои объекты, однажды сделанные.
while ~isDone(fileReader) audioIn = fileReader(); audioIn = biquadFilter(audioIn,B,A); [band1,band2] = crossFilt(audioIn); band1compressed = dRCompressor(band1); audioOut = band1compressed + band2; deviceWriter(audioOut); scope([audioIn audioOut]) end
Как лучшая практика, выпустите свои объекты, однажды сделанные.
release(deviceWriter) release(fileReader) release(crossFilt) release(dRCompressor) release(scope)
slope
— Отфильтруйте наклон (дБ/октава)Наклон фильтра в дБ/октаве, заданном как действительный скаляр в области значений [0:6:48]. Округлены значения, которые не являются множителями 6.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Fc
— Нормированная частота срезаНормированная частота среза, заданная как действительный скаляр в области значений от 0 до 1, где 1 соответствует частоте Найквиста (π рад/выборка).
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
type
— Отфильтруйте тип'lo'
(значение по умолчанию) | 'hi'
Отфильтруйте тип, заданный как 'lo'
или 'hi'
.
'lo'
– Фильтр Lowpass
'hi'
– Фильтр Highpass
Типы данных: 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
:
Если 'Orientation'
установлен в "column"
, затем B
возвращен как матрица 3 на 4. Каждый столбец B
соответствует коэффициентам числителя различной секции второго порядка вашего каскадного БИХ-фильтра.
Если 'Orientation'
установлен в "row"
, затем B
возвращен как 4 3 матрица. Каждая строка B
соответствует коэффициентам числителя различной секции второго порядка вашего каскадного БИХ-фильтра.
A
— Коэффициенты фильтра знаменателяКоэффициенты фильтра знаменателя, возвращенные как матрица. Размер и интерпретация A
зависит от Orientation
:
Если 'Orientation'
установлен в "column"
, затем A
возвращен как 2 4 матрица. Каждый столбец A
соответствует коэффициентам знаменателя различной секции второго порядка вашего каскадного БИХ-фильтра. A
не включает ведущий коэффициент единицы для каждого раздела.
Если 'Orientation'
установлен в "row"
, затем B
возвращен как 4 3 матрица. Каждая строка B
соответствует коэффициентам знаменателя различной секции второго порядка вашего каскадного БИХ-фильтра.
[1] Orfanidis, Софокл Дж. "Старший Цифровой Проект Параметрического эквалайзера". Журнал Общества звукоинженеров. Издание 53, ноябрь 2005, стр 1026–1046.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.