Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Обработка сигналов...


Автор: kernel_mode 18.3.2009, 15:37
Необходимо подавить шум в звуковом сигнале. Имеется его спектр (полученный путём FFT). Никак не могу найти нужную информацию, гуглю уже не одну неделю smile Вообщем нужен фильтр smile

Автор: GoldFinch 18.3.2009, 19:26
те сам фильтр или программу? сам фильтр в прогах типа sound forge
можно достаточно просто сделать прогу с фильтром в LabView
самому писать прогу на какомнить языке - юзай какойнить стандартный КИХ или БИХ фильтр они просто реализуются и много где описаны

Автор: kernel_mode 18.3.2009, 20:51
Мне нужно программу написать smile Насчёт КИХ и БИХ, что то я не нашёл примеров реализации на с... Да и вообще инфы помоему мало... Я плохо ищу?  smile
P.S. Проблема собственно в том, что я пока только в 11 классе, а эта тема очень заинтересовала. В БПФ я вникнул, а вот в цифровую обработку сигналов без разжеванной инфы не могу... :(

Автор: GoldFinch 18.3.2009, 21:35
kernel_mode, ты бы теорию изучил тогда сначала, учебик бы по цифровой обработке сигналов почитал... основы надо понимать, а не "БПФ изучил"
вобщем идея такая. есть штука которая должна фильтровать сигнал, она имеет в частотной области частотную характеристику X(f), эта частотная характеристика умножается на спектр входного сигнала S(f), результат перемножения - выходной профильтрованный сигнал S2(f)

например, входной сигнал представлен в виде массива значений амплитуд гармоник по частотам, S[N], расстояние между частотами 1Гц, тогда индекс массива численно совпадает с частотой, и у тебя S[200] - амплитуда гармоники на частоте 200Гц
тогда берем фильтр высоких частот с характеристикой заданной H[N]
и считаем выходной сигнал как for i=0..N-1 do S2[i]=H[i]*S[i]

но как следует из теории, спектр сигнала конечной длины бесконечен (и наоборот), поэтому если взять БПФ обычного звукового сигнала всего целиком, а потом преобразовать это обратно во временной сигнал, что что мы получим ни разу не исходный сигнал, т.к. БПФ потеряет немало полезной информации в сигнале, поэтому используют не БПФ всего сигнала, а "мгновенную" БПФ - т.е. сигнала в каком-то окне

но такое преобразование из сигнала в его спектр и наоборот слишком затратно, поэтому обычно фильтруют сразу сигнал во временной области. операция произведения спектра на частотную характеристку фильтра эквивалентна операции свертки (сумма произведений) временного сигнала s(t) и импульсной (временной) характеристики фильтра h(t) во временно области: s2(t)=s(t) (+) h(t)
(фильтр с Конечной Импульсной Характеристикой называется КИХ фильтром)

....

но это все было так, для общего развития
реальный шум в акустическом сигнале расположен на тех же частотах (гдето 40Гц-16КГц) что и сам сигнал, реальный сигнал вляется не только суммой С+Ш но и произведением С*Ш, поэтому его невозможно отфильтровать простым линейным фильром
для фильтрации шумов в сигнале использую его корреляционные (а может и кепстральные) характеристики, берется характеристика чистого шума, анализируется и с ее помощи пытаются отделить сигнал от шума

Добавлено через 1 минуту и 45 секунд
вобщем мораль такова, что ты не можешь сейчас ни разобраться с используемым там математическим аппаратом, ни реализовать его программно, юзай sound forge

Автор: kernel_mode 18.3.2009, 22:10
Эх... А я выступить думал в школе напоследок smile А LP и HP фильтры мне тоже не под силу? smile

Автор: GoldFinch 18.3.2009, 23:39
kernel_mode, LP это фильтр низких частот (ФНЧ), HP - высоких (ФВЧ)
да под силу, но это ничего не даст

пример фильтра можно посмотреть в http://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%A7%D0%B5%D0%B1%D1%8B%D1%88%D1%91%D0%B2%D0%B0#.D0.A6.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D1.8B.D0.B5_.D1.84.D0.B8.D0.BB.D1.8C.D1.82.D1.80.D1.8B_.D0.A7.D0.B5.D0.B1.D1.8B.D1.88.D1.91.D0.B2.D0.B0

Автор: cardinal 19.3.2009, 00:40
Посмотри тут
http://forum.vingrad.ru/forum/topic-171436.html
я там челу больше года назад показал, как можно сделать фильтр, но видать увидев подход и результат чел понял, что не осилить ему эту задачу... smile 

Автор: GoldFinch 19.3.2009, 02:32
cardinal, там нужен был простой (линейный) ФНЧ фильтр 
здесь - совсем другая задача

Автор: cardinal 19.3.2009, 11:37
Цитата(kernel_mode @  18.3.2009,  13:37 Найти цитируемый пост)
Необходимо подавить шум в звуковом сигнале.

GoldFinch, а тут что нужно? У него ведь сигнал записан. Теперь делай с ним что хочешь...

Автор: Pavia 19.3.2009, 16:05
Цитата(kernel_mode @  18.3.2009,  15:37 Найти цитируемый пост)
Необходимо подавить шум в звуковом сигнале. Имеется его спектр (полученный путём FFT). Никак не могу найти нужную информацию, гуглю уже не одну неделю  Вообщем нужен фильтр 

Самый простой вариант. Это приминить БПФ. Нам нужно знать частотные характеристики сигнала и шума. И если они различаются то можем строить фильтр.  К примеру у нас полезный сигнал это низкии частоты, а шум высокии. Тогда зануляем высокии частоты. И делаем обратное преобразование.

 схема фильтрацыы выгледит так.
f исходный сигнал -> БПФ-> F частотная характеристика сигнала-> домножаем на фильтр G, который содержит нули там где надо занулить сигнал 1 где сохранить -> делаем обратное БПФ -> f' отфильтрованный сигнал.

Тут правда вылазит эффект Гибса. Поэтому что бы его побороть еще используют окна. 


В теории  различают:
Филтр Низких Частот
Фильтр Высоких Частот 
Полосовой фильтр
Режекторный фильтр
В зависимости от того что срезаем, а что оставляем.

Существуют как идеальные фильторы, так и реальные.
В идеальном случии после частоты среза мы срезаем сигнал. т.е фильтр выглядит как ступенька или буква П.
Реальной же отличается от идеального тем что он может быть совершенно другого вида более плавными сгибами. И дает лучший результат.

Цитата(kernel_mode @  18.3.2009,  20:51 Найти цитируемый пост)
 Насчёт КИХ и БИХ, что то я не нашёл примеров реализации на с... Да и вообще инфы помоему мало... Я плохо ищу? 
 Плохо искали. Аналогичного результата можно добиться при помощи БИХ и КИХ фильтеров. Работают в некоторых обстоятельствах быстрее. В некоторых медленее. А информации достаточно и реализацию тоже не состовляет труда найти.



Плюс немного магии smile  и все получится.



Автор: GoldFinch 19.3.2009, 17:30
Pavia, в акустическом сигнале шум и сим сигнал лежат в одном диапазоне частот, шум вне слышимого диапазона частот будет просто неслышен человеком, его фильтровать смысла нет

Цитата(Pavia @  19.3.2009,  16:05 Найти цитируемый пост)
Реальной же отличается от идеального тем что он может быть совершенно другого вида более плавными сгибами. И дает лучший результат.

реальный он на то и не идеальный что дает заведомо худший результат
фильтр обрабатывающий сигнал во временной области может быть лучше идеального фильтра работающего в частотной области только за счет недостатков цифрового преобразования Фурье
поэтому БПФ всего сигнала, "мгновенная" БПФ в окне - не лучший вариант для обработки сигнала, для анализа - хорошо, а для обработки нет
Цитата(Pavia @  19.3.2009,  16:05 Найти цитируемый пост)
помощи БИХ и КИХ фильтеров. Работают в некоторых обстоятельствах быстрее. В некоторых медленее.

свертка или рекурсия всяко будут быстрее двукратного БПФ

Автор: Pavia 19.3.2009, 21:11
Цитата(GoldFinch @  19.3.2009,  17:30 Найти цитируемый пост)
свертка или рекурсия всяко будут быстрее двукратного БПФ

Несогласен. Если матрица свертки маленькая то будет быстрее прямым способом. А если большая то быстрее через БПФ. Только его лучше взять уже готовом види, оптимизированный по скоросте. 

Цитата(GoldFinch @  19.3.2009,  17:30 Найти цитируемый пост)
 в акустическом сигнале шум и сим сигнал лежат в одном диапазоне частот, шум вне слышимого диапазона частот будет просто неслышен человеком, его фильтровать смысла нет

Судя по вашым сообщениям вы много знаете. Так что спорить не буду. Скажу толкьо то что в той облосте акустики в которой я занимаюсь сигнал лежит в другом диапозоне частот нежеле чем шум, по этому легко отделяется. smile 


Цитата(GoldFinch @  19.3.2009,  17:30 Найти цитируемый пост)
поэтому БПФ всего сигнала, "мгновенная" БПФ в окне - не лучший вариант для обработки сигнала, для анализа - хорошо, а для обработки нет

Ошибку можно оценить. Но побольшей части в качестве сверки он должен подходить smile  

Автор: kernel_mode 20.3.2009, 15:33
Всем огромное спасибо за разьяснения smile Решил реализовать LP и HP фильтры для хоть какого нибудь результата smile Я же в школе выступать буду, просто возьму сигнал с шумами на низких и высоких частотах smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)