Фильтры перекрестного соединения динамика

Этот пример показывает, как разработать простую модель цифрового громкоговорителя с тремя путями. Система разделяет аудиовход в низкий - середина - и высокочастотные полосы, которые соответствуют соответственно низкочастотному динамику, среднечастотному громкоговорителю и твитеру. Типичные значения для нормированных перекрестных частот, которые разграничивают полосы, 0.136π рад/выборка и 0.317π рад/выборка.

Создайте lowpass, полосу пропускания и фильтры highpass, чтобы сгенерировать низкочастотную, среднюю частоту и высокочастотные полосы. Задайте частоты.

lo = 0.136;
hi = 0.317;

Используйте 6-й порядок Чебышевский Тип, который я разрабатываю для каждого фильтра. Задайте пульсацию полосы пропускания 1 дБ, больше, чем значение для действительных динамиков. Функция cheby1 удваивает порядок полосовых проектов. Заставьте все фильтры иметь тот же порядок путем сокращения вдвое порядка полосового фильтра. Возвратите нули, полюса и усиление каждого фильтра.

ord = 6;
rip = 1;

[zw,pw,kw] = cheby1(ord,rip,lo);
[zm,pm,km] = cheby1(ord/2,rip,[lo hi]);
[zt,pt,kt] = cheby1(ord,rip,hi,'high');

Визуализируйте нули и полюса фильтров.

zplane([zw zm zt],[pw pm pt])
lg = legend('Woofer','Midrange','Tweeter');
lg.Box = 'off';

  • Низкочастотный динамик: нули в z=-1 подавите высокие частоты. Полюса улучшают ответ значения между 0 и более низкая перекрестная частота.

  • Средний диапазон: нули в z=0 и z=1 подавите высокие частоты и низкие частоты. Полюса улучшают ответ значения между ниже и более высокие перекрестные частоты.

  • Твитер: нули в z=1 подавите низкие частоты. Полюса улучшают ответ значения между более высокой перекрестной частотой и π.

Постройте ответы значения на модульном круге, чтобы видеть эффект различных полюсов и нулей. Используйте линейные модули. Представляйте фильтры как разделы второго порядка.

sw = zp2sos(zw,pw,kw);
sm = zp2sos(zm,pm,km);
st = zp2sos(zt,pt,kt);

nf = 1024;
[hw,fw] = freqz(sw,nf,'whole');
hm = freqz(sm,nf,'whole');
ht = freqz(st,nf,'whole');

plot3(cos(fw),sin(fw),[abs(hw) abs(hm) abs(ht)])
xlabel('Real')
ylabel('Imaginary')
view(75,30)
grid

Постройте ответы значения в дБ с помощью fvtool.

hfvt = fvtool(sw,sm,st);
legend(hfvt,'Woofer','Mid-range','Tweeter')

Загрузите звуковой файл, содержащий фрагмент "Хора Аллилуйи Генделя", выбранного на уровне 8 192 Гц. Разделите сигнал в три диапазона частот путем фильтрации. Постройте полосы.

load handel                % To hear, type soundsc(y,Fs)

yw = sosfilt(sw,y);        % To hear, type soundsc(yw,Fs)
ym = sosfilt(sm,y);        % To hear, type soundsc(ym,Fs)
yt = sosfilt(st,y);        % To hear, type soundsc(yt,Fs)

plot((0:length(y)-1)/Fs,[yw ym yt])
xlabel('Time (s)')

% To hear all the frequency ranges, type soundsc(yw+ym+yt,Fs)

Ссылки

Orfanidis, Софокл Дж. Введение в обработку сигналов. Englewood Cliffs, NJ: Prentice Hall, 1996.