Проектируйте lowpass или БИХ с переменным уклоном
[
задает опции с использованием одного или нескольких B
,A
] =
designVarSlopeFilter(___,Name,Value
)Name,Value
аргументы в виде пар.
Проектируйте lowpass секции второго порядка фильтры БИХ (SOS) с помощью 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");
Проектируйте lowpass секции второго порядка (SOS) БИХ фильтруйте с помощью designVarSlopeFilter
. Используйте фильтр lowpass для обработки аудиосигнала.
Создайте аудио файла считыватель и аудио устройство объекты средства записи. Используйте частоту дискретизации считывающего устройства в качестве частоты дискретизации средства записи.
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)
Проектируйте 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'});
Воспроизведение фильтрованного аудиосигнала и визуализация исходного и фильтрованного спектров.
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) высокоскоростных фильтра БИХ с помощью 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")
Плозивы являются созвучными звуками, возникающими в результате внезапного релиза воздушного потока. Они наиболее выражены в словах, начинающихся со звуков p, d и g. Плозивы могут быть подчеркнуты процессом записи и часто неприятно слышны. В этом примере вы минимизируете plosives речевого сигнала, применяя высокочастотную фильтрацию и низкополосное сжатие.
Создайте 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)
Проектируйте высокочастотный фильтр с крутым сгибом всех частот ниже 120 Гц. Использование dsp.BiquadFilter
объект для реализации создания фильтра highpass. Создайте перекрестный фильтр с одним кроссовером на частоте 250 Гц. Перекрестный фильтр позволяет вам разделить интересующие полосы для обработки. Создайте динамический компрессор области значений для сжатия динамической области значений взрывных звуков. Чтобы не применять усиление подпитки, установите MakeUpGainMode
в "Property"
и используйте 0 дБ по умолчанию MakeUpGain
значение свойства. Создайте временные возможности, чтобы визуализировать обработанный и необработанный аудиосигнал.
[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 = timescope( ... "SampleRate",fileReader.SampleRate, ... "TimeSpanSource","property","TimeSpan",3, ... "BufferLength",fileReader.SampleRate*3*2, ... "YLimits",[-1 1], ... "ShowGrid",true, ... "ShowLegend",true, ... "ChannelNames",{'Original','Processed'});
В цикле аудиопотока:
Чтение в систему координат аудио файла.
Применить фильтрацию highpass с помощью биквадного фильтра.
Разделите аудиосигнал на две полосы.
Примените динамическое сжатие области значений к нижней полосе.
Ремикшируйте каналы.
Запишите обработанный аудиосигнал в аудио устройство для прослушивания.
Визуализируйте обработанные и необработанные сигналы во временных возможностях.
Как лучшая практика, отпустите объекты после выполнения.
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, Sophocles J. «High-Order Digital Parametric Equalizer Design». Журнал Общества аудиотехники. Том 53, ноябрь 2005, стр. 1026-1046.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.