реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Разбить сигнал на полосы по частоте, Выбор алгоритма
_4afc_
сообщение Oct 28 2015, 15:25
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Допустим есть файл с аудиозаписью ИКМ 16бит 16кГц.
Аудиозапись не содержит частоты выше 6кГц.

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

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

Если ifft(fft), то что бежать 6 (16?) точками по файлу?
Go to the top of the page
 
+Quote Post
blackfin
сообщение Oct 28 2015, 15:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



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

Начать можно с tutorial или гуглить: "cosine modulated filter banks".
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Oct 28 2015, 17:01
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



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


А разве на стыках cosine modulated filter banks не будет искажений? Я же не могу создать прямоугольный фильтр. Восстановится ли например 1кГц с небольшой дивиацией после такого разбиения?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 28 2015, 19:04
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(_4afc_ @ Oct 28 2015, 18:25) *
т.е. чтобы сумма этих шести файлов отличалась от исходного по фазе и амплитуде менее чем на -100дБ.


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

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

Наверное нет смысла ради нескольких фильтров быстрыми алгоритмами заморачиваться, просто в лоб фильтры делайте.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Oct 29 2015, 14:28
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(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дБ.

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
petrov
сообщение Oct 29 2015, 19:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



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


Прошу прощения, пурги нагнал, другие окна тоже подходят, основное свойство даёт импульсная характеристика синка, Кайзер удобен параметром бета, выбирать компромисс переходная полоса/подавление, выше в статье Вайдианатана всё рассказано.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 15:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016