Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разбить сигнал на полосы по частоте
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
_4afc_
Допустим есть файл с аудиозаписью ИКМ 16бит 16кГц.
Аудиозапись не содержит частоты выше 6кГц.

Нужно разбить запись на 6 файлов, каждый с полосой 1 кГц (0-1,1-2,...5-6) с погрешностью менее 100дБ, т.е. чтобы сумма этих шести файлов отличалась от исходного по фазе и амплитуде менее чем на -100дБ.

Как это сделать лучше? Моделировать буду в Матлабе *.m

Если ifft(fft), то что бежать 6 (16?) точками по файлу?
blackfin
Цитата(_4afc_ @ Oct 28 2015, 18:25) *
Нужно разбить запись на 6 файлов, каждый с полосой 1 кГц (0-1,1-2,...5-6) с погрешностью менее 100дБ, т.е. чтобы сумма этих шести файлов отличалась от исходного по фазе и амплитуде менее чем на -100дБ.
Как это сделать лучше?

Начать можно с tutorial или гуглить: "cosine modulated filter banks".
_4afc_
Цитата(blackfin @ Oct 28 2015, 18:39) *
Начать можно с tutorial или гуглить: "cosine modulated filter banks".


А разве на стыках cosine modulated filter banks не будет искажений? Я же не могу создать прямоугольный фильтр. Восстановится ли например 1кГц с небольшой дивиацией после такого разбиения?
petrov
Цитата(_4afc_ @ Oct 28 2015, 18:25) *
т.е. чтобы сумма этих шести файлов отличалась от исходного по фазе и амплитуде менее чем на -100дБ.


Иными словами, чтобы ИХ суммы фильтров равнялась задержанному дельта-импульсу. Таким свойством например обладают КИХ фильтры синтезированные методом окна с окном Кайзера.

http://electronix.ru/forum/index.php?s=&am...t&p=1376492

Наверное нет смысла ради нескольких фильтров быстрыми алгоритмами заморачиваться, просто в лоб фильтры делайте.
_4afc_
Цитата(petrov @ Oct 28 2015, 22:04) *
Иными словами, чтобы ИХ суммы фильтров равнялась задержанному дельта-импульсу. Таким свойством например обладают КИХ фильтры синтезированные методом окна с окном Кайзера.
http://electronix.ru/forum/index.php?s=&am...t&p=1376492

А почему именно Кайзера? Я заменил в вашей модели Кайзера, на Блекман-Харриса - результат тотже.

Цитата(petrov @ Oct 28 2015, 22:04) *
Наверное нет смысла ради нескольких фильтров быстрыми алгоритмами заморачиваться, просто в лоб фильтры делайте.

Написал пример для 4 банков:
CODE
clear all;disp('Filter bank 4 test');
%--------------------------------------------------------------------------
Len=10000;op=100;FL=64;FB=10;
%--------------------------------------------------------------------------
si=zeros(Len,1);si(op)=1;
%--------------------------------------------------------------------------
fb1=fir1(FL, 1/4 ,'low', kaiser(FL+1,10));
fb2=fir1(FL,[1/4 1/2],'bandpass',kaiser(FL+1,10));
fb3=fir1(FL,[1/2 3/4],'bandpass',kaiser(FL+1,10));
fb4=fir1(FL, 3/4 ,'high', kaiser(FL+1,10));
hfvt = fvtool(fb1,1,fb2,1,fb3,1,fb4,1);
legend(hfvt,'fb1','fb2','fb3','fb4');
%--------------------------------------------------------------------------
figure;plot(si);title('Input');

s1=filter(fb1,1,si);s1=circshift(s1,-FL/2);
s2=filter(fb2,1,si);s2=circshift(s2,-FL/2);
s3=filter(fb3,1,si);s3=circshift(s3,-FL/2);
s4=filter(fb4,1,si);s4=circshift(s4,-FL/2);

figure;hold on;plot(s1,'r');plot(s2,'g');plot(s3,'b');plot(s4,'k');
legend('fb1','fb2','fb3','fb4');title('band');hold off;

so=s1+s2+s3+s4;
figure;plot(so);title('Output');
%--------------------------------------------------------------------------
so(op)=so(op)-1;
se=20*log10(max(abs(so)));%error -110dB
%figure;plot(so);title(['max peak error = ',int2str(se),'dB']);
figure;pwelch(so);title(['max peak error = ',int2str(se),'dB']);


Погрешность получилась неплохая: -110дБ.
petrov
Цитата(_4afc_ @ Oct 29 2015, 17:28) *
А почему именно Кайзера? Я заменил в вашей модели Кайзера, на Блекман-Харриса - результат тотже.


Прошу прощения, пурги нагнал, другие окна тоже подходят, основное свойство даёт импульсная характеристика синка, Кайзер удобен параметром бета, выбирать компромисс переходная полоса/подавление, выше в статье Вайдианатана всё рассказано.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.