Получите коэффициенты фильтра
graphicEQ
КоэффициентыКаскадная структура
Создайте graphicEQ
а затем позвоните coeffs
для получения его коэффициентов. Коэффициенты возвращаются как секции второго порядка. Размерности B
3-бай- (M
* EQOrder
/ 2), где M
- количество полосно-пропускающих эквалайзеров. Размерности A
2-бай- (M
* EQOrder
/ 2). Начальный коэффициент единицы не возвращается.
fs = 44.1e3; x = 0.1*randn(fs*5,1); equalizer = graphicEQ('SampleRate',fs, ... 'Gains',[-10,-10,10,10,-10,-10,10,10,-10,-10], ... 'EQOrder',2); [B,A] = coeffs(equalizer);
Сравните выходы filter
функция, использующая коэффициенты B
и A
с выходом graphicEQ
. Для простоты сравните выход только из пятого канала.
channelToCompare = 5; y = x; for section = 1:equalizer.EQOrder/2 for i = 1:numel(equalizer.Gains) y = filter(B(:,i*section),[1;A(:,i*section)],y); end end audioOut_filter = y; audioOut = equalizer(x); subplot(2,1,1) plot(abs(fft(audioOut))) title('graphicEQ') ylabel('Magnitude Response') subplot(2,1,2) plot(abs(fft(audioOut_filter))) title('Filter function') xlabel('Bin') ylabel('Magnitude Response')
gammatoneFilterBank
КоэффициентыСоздайте gammatoneFilterBank
по умолчанию, а затем позвоните
coeffs
для получения его коэффициентов. Каждый гамматоновый фильтр является БИХ восьмого порядка, состоящим из каскада из четырех секций второго порядка. Размер B
4 на 3-бай- NumFilters
. Размер A
4 на 2-бай- NumFilters
.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); gammaFiltBank = gammatoneFilterBank('SampleRate',fs); [B,A] = coeffs(gammaFiltBank);
Сравните выходы filter
функция, использующая коэффициенты B
и A
с выходом gammaFiltBank
. Для простоты сравните выход только из восьмого канала.
channelToCompare = 8; y1 = filter(B(1,:,channelToCompare),[1,A(1,:,channelToCompare)],audioIn); y2 = filter(B(2,:,channelToCompare),[1,A(2,:,channelToCompare)],y1); y3 = filter(B(3,:,channelToCompare),[1,A(3,:,channelToCompare)],y2); audioOut_filter = filter(B(4,:,channelToCompare),[1,A(4,:,channelToCompare)],y3); audioOut = gammaFiltBank(audioIn); t = (0:(size(audioOut,1)-1))'/fs; subplot(2,1,1) plot(t,audioOut(:,channelToCompare)) title('Gammatone Filter Bank') ylabel('Amplitude') subplot(2,1,2) plot(t,audioOut_filter) title('Filter Function') xlabel('Time (s)') ylabel('Amplitude')
octaveFilterBank
КоэффициентыСоздайте octaveFilterBank
по умолчанию, а затем позвоните
coeffs
для получения его коэффициентов. Коэффициенты возвращаются как секции второго порядка. Размерности B и A T-by-3-by-M, где T - количество сечений, а M - количество фильтров.
[audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav'); octFiltBank = octaveFilterBank('SampleRate',fs); [B,A] = coeffs(octFiltBank);
Сравните выходы filter
функция, использующая коэффициенты B
и A
с выходом octaveFilterBank
. Для простоты сравните выход только из пятого канала.
channelToCompare = 5; audioOut_filter = filter(B(1,:,channelToCompare),A(1,:,channelToCompare),audioIn); audioOut = octFiltBank(audioIn); subplot(2,1,1) plot(audioOut(:,channelToCompare)) title('Octave Filter Bank') subplot(2,1,2) plot(audioOut_filter) title('Filter Function')
obj
- Объект, из которого нужно получить коэффициенты фильтраgammatoneFilterBank
| octaveFilterBank
| graphicEQ
Объект, из которого будут получены коэффициенты фильтра, заданные как объект gammatoneFilterBank
, octaveFilterBank
, или graphicEQ
.
B
- Коэффициенты фильтра числителяКоэффициенты фильтра числителя, возвращенные в виде 2-D матрицы или трехмерные массивы, в зависимости от obj
.
Типы данных: single
| double
A
- Коэффициенты фильтра знаменателяКоэффициенты фильтра числителя, возвращенные в виде 2-D матрицы или трехмерные массивы, в зависимости от obj
.
Типы данных: single
| double
octaveFilterBank
Поведение изменено в R2020b
coeffs
функция octaveFilterBank
теперь возвращает фильтр в секциях второго порядка (SOS) вместо разделов четвертого порядка (FOS). Этот новый формат отражает обновленное внутреннее представление, которое было улучшено, чтобы оставаться стабильным на очень низких частотах.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.