--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

Вопросы по ДПФ/БПФ и КИХ фильтрам (БИХ не рассматриваем).

Серьёзная тема
114
46
С друзьями на NN.RU
В социальных сетях
Поделиться
Надо фильтровать сигнал, выделяя узкий спектр высоких частот. С наименьшими затратами CPU.

ДПФ с его O(N^2) конечно справится с задачей. Но скользящее окно надо на 44100 отсчётов, чтобы спектр составил 22050 Гц. Хорошая новость: можно не считать весь спектр и тогда будет O (M x N), где M - полоса частот. И можно достаточно узкую полосу в 10 Гц задать.
вопрос: если передатчик выдаёт чётко на нужной частоте синусоиду, то может вообще ДПФ делать на приёмнике по N отсчётам на этой конкретно частоте (не участок спектра, а конкретная частота прям) ?

вопрос: в БПФ (там логарифмическая уже сложность, тот же butterfly подход с прореживанием по частоте например) можно считать конкретную частоту или участок спектра?

также есть КИХ фильтр (фильтр с конечной импульсной характеристикой), который является по сути свёрткой.
для НЧ он плох, т.к. надо много коэффициентов, а вот для ВЧ - вполне вроде как подходит.
в итоге теоретически можно ловить наличие/отсутствие сигнала (синусоида) на нужной частоте или в диапазоне (прям на выходе фильтра будет видно), причём буквально 10-20 коэффициентов КИХ считать и не надо окна в 44100 отсчётов.
вопрос: я правильно понял про КИХ фильтр, что он получается выгоднее ДПФ/БПФ для детектирования ВЧ сигналов (и в плане CPU и в плане буфера для отсчётов - не надо 44100 отсчётов ловить и только потом обрабатывать) ?
ау, математики есть?...

если кратко, то... реально чтоли можно выделить ВЧ сигнал частоты N КИХ фильтром, не ловя N*2 отсчётов (теорема Котельникова) как для Фурье анализа? 8-)
сам отвечу: КИХ фильтры "рулят", можно НЕ ловить N*2 отсчётов и НЕ анализировать весь спектр! :-)
подбор коэффициентов для тех, кому лень: t-filter.engineerjs.com/

другой вопрос: для ДПФ/БПФ анализа можно ли использовать кольцевой буфер для отсчётов? не даст ли это искажений ?

p.s. ага, как "политические" темы про з/п и т.д. - так все горазды обсуждать, а как по делу так куда-то все "сливаются" :(
alxumuk2
29.10.2016
Спросил бы ты когда я был на 3 курсе, я бы все расписал бы по методичке. А сейчас, ну, что помню, так что если ошибусь, то звиняй.

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

Про кольцевой буфер не понял. Преобразование - математическая операция, откуда ты отсчеты берешь ей насрать.
alxumuk2 писал(а)
Про кольцевой буфер не понял.

задача: есть "типа азбука Морзе", она идёт на частоте близкой к ультразвуку. надо делать детект точек и тире.
если делать Фурье, то для 20 КГц несущей (амплитудная модуляция) надо минимум 40k отсчётов/секунду (теорема Котельникова).
если просто сделать захват N секунд в большой буфер (40k), то достаточно идти по буферу неким скользящим окном, т.е. само окно шириной 40k отсчётов, а смещение делать на N отсчётов (40 отсчётов это 1 миллисекунда, например).
вопрос: если заполнять кольцевой буфер размером 40k отсчётов по 40 отсчётов/миллисекунду (понятно что до заполнения первой секунды детект несущей 20 КГц не возможен), то получится ли нормальный детект наличия/отсутствия сигнала (допустим точка занимает 1мс, тире занимает 2мс, пауза занимает 1мс) когда следующий блок из 40 отсчётов пойдёт в начало буфера и т.д. по кольцу?
alxumuk2
29.10.2016
*алхимик разбил себе лицо фейспалмом*
Ну и нахера здесь фурье, и даже фильтры???

Так, т.е. надо все-таки детектировать одну гармонику. Это хорошо. В теории что-то , вроде, что-то типа вычисления корреляции сигнала с заданной синусоидой может пройти. Еще попробую в выходные посмотреть и вспомнить, но задача сама по себе не нова.

А вот то, что 20к несущей на 40к отсчетов - это печально. Слишком близко к границе. Ты пробовал снимать сигналы и в какой-то тулзине вообще посмотреть есть ли там что-то?

Все равно не понимаю при чем тут кольцо.
Но входные данные какие-то изумительно странные. Спектр считается по всей выборке. 40к (буфер) - это одна секунда. Данные 1 ms.
Как не считай, но "пип" на 1/1000, конечно, в спектре отразится, но будет сущей мелочью на фоне шума.
Да и в любом случае, 1ms - это 20 периодов от 20 кГц. Детектировать это выглядит не очень реальным от слова вообще.
alxumuk2 писал(а)
Ты пробовал снимать сигналы и в какой-то тулзине вообще посмотреть есть ли там что-то?

да, я даже эмулировал это 2-мя девайсами, на одном жмакал кнопку и он пищал (не слышно мне, я уже от 18КГц не очень слышу), на другом - видел в спектре чётко на нужной частоте наличие сигнала.

p.s. но нужен детект всё таки на некоторой полосе спектра, т.к. Допплера никто не отменял.
alxumuk2
29.10.2016
"жамкал кнопку" на 1 ms? Или все-таки подольше?
Допплер в разумных пределах не проблема - та же корреляция небольшой разнос по частоте вполне схавает.
Но если что-то более серьезное, то тогда надо делать детектор несущей, синхронизацию по ней и вообще все сложно, и требует сигналов большей длительности
alxumuk2 писал(а)
"жамкал кнопку" на 1 ms? Или все-таки подольше?

ну конечно же не чаще 200-300мс я могу жмакать чисто физически.
это была лишь концептуальная проверка железа, что динамик и микрофон так могут.
alxumuk2
29.10.2016
200-300 ms - это уже реальнее. Рассчитывать на 1ms я бы вообще не стал.
В любом случае, кстати, бери окно сравнимое со временем сигнала (лучше даже меньшее). Теоретический спектр - это на бесконечном времени. Т.е. для того, чтобы получить одну гармонику, надо, чтобы сигнал звучал все время. Если сигнал звучит только часть его - спектр размывается. Т.к. надо детектировать высокие частоты, то большого окна и не надо.
alxumuk2 писал(а)
Рассчитывать на 1ms я бы вообще не стал.

если 20 КГц, то период 1 / 20000 = 0,00005 секунды (но это ещё запроцессить надо realtime, да)
и за одну миллисекунду будет довольно много периодов синусоиды.
alxumuk2
29.10.2016
За одну миллисекунду будет 20 периодов, как я уже выше писал.
Это весьма немного.
alxumuk2 писал(а)
что-то типа вычисления корреляции сигнала с заданной синусоидой может пройти

а вот это уже интереснее, спасибо.

вопрос: эффект Допплера (пусть даже минимальный) при этом не сломает весь кайф? :)
alxumuk2
29.10.2016
Как я уже говорил. небольшой Допплер не сломает. Но надо смотреть по факту, конечно.
Вообще-то лучше взять что-то типа LabView и сэмулировать там. "посмотрел на спектр в аудио-редакторе" - это наивность.
Заодно можно подогнать будет всякие коэффициенты.
alxumuk2 писал(а)
что-то типа вычисления корреляции сигнала с заданной синусоидой

вопросы:
- таки корреляции или свёртки? ;-) корреляция - число, свёртка - функция (результат свёртки).
- ок, а фаза как будет учитываться ?
alxumuk2
29.10.2016
Если говорим о сигнале длительностью в 20 периодов или что-то такое - погугли "синхронный детектор". По большому счету, там будет вычисляться корреляция, ЕМНИП.
По уму надо бы, поймав сигнал, держать синхронизацию, чтобы данные декодировать. Но в твоем случае (короткие сигналы, только 1 или 0), может быть проще тупо работать с окном в каждый отсчет.

Хотя, как я уже говорил, вся эта хрень весьма сомнительная. Ну, или я ее не понимаю...
alxumuk2 писал(а)
Про кольцевой буфер не понял.

для экономии памяти он в данном случае, ну и для избежания malloc()/free() на хиленькой системе (считай МК, но один из топовых).
alxumuk2
29.10.2016
Дык, алгоритму ты будешь отсчеты скармливать, а не то, что malloc выделил под буфер. И тут он кольцевой или какой-то еще - пофигу.
ну да, ты прав. кольцевой вообще можно на 44100 * 2 отсчётов завести и по нему 44100 окном ходить с небольшим смещением (441 отсчёт, например, 1мс)...
alxumuk2
29.10.2016
Кстати, если не секрет, а как задача изначально ставится? Все-таки фильтр или детектирование конкретной частоты (по сути, детектирование амплитудно модулируемого сигнала)?
Может фильтры и прочее - по сути "гланды через жопу удалять"?
alxumuk2 писал(а)
Все-таки фильтр или детектирование конкретной частоты

Узкополосный фильтр разве не задетектит частоту? (допустим на полосе 20000Гц-20100Гц тупо смотрим наличие/отсутствие сигнала)
alxumuk2
29.10.2016
Можно и гланды через жопу удалять, но зачем?
Во-первых, попытка сделать полосовой фильтр с верхней частотой выше того, что позволяет дискретизация - чушь. Бери тогда уж ФВЧ.
Во-вторый, фильтр - штука достаточно широкая, чтобы детектить одну частоту (фильтр, который детектит лишь одну частоту вообще физически нереализуем).
Надо смотреть на алгоритмы именно детектирования частоты. Возможно, перед этим стоит профильтровать простым ФВЧ, чтобы лишний мусор не лез.
alxumuk2 писал(а)
фильтр - штука достаточно широкая, чтобы детектить одну частоту

я тестировал в звуковом редакторе (Audacity), всё норм.
тест: записал фоновый шум в помещении (шум был), дискретизация 44100, наложил 19КГц синусодиду местами - её не слышно и не видно.
затем просто сделал парочку cutoff по краям диапазона 18950-19050 Гц, вуаля - я _визуально_ наблюдал сигнал (где была наложена синусоида).
alxumuk2
29.10.2016
Ну, можно попробовать, но в твоем случае я бы все-таки сделал, как минимум. ФВЧ, а не полосовой, т.к. все равно на границе дискретизации, а фильтр будет значительно проще.
alxumuk2
29.10.2016
Кстати, по поводу "наложил синусоиду", это в редакторе или таки микрофон снял, а ЦАП оцифровал?
Здесь может быть "ньюанс", и весьма неприятный.
Не говоря уж о том, кто этот ультразвук будет пищать.
alxumuk2 писал(а)
Кстати, по поводу "наложил синусоиду", это в редакторе или таки микрофон снял, а ЦАП оцифровал?

пробовал и искусственно накладывать в редакторе и реально при записи пищать из https://play.google.com/store/apps/details?id=com.creativelab.impulse
всё отлично, после обычного cutoff фильтра (ФВЧ) видно (прям в визуализации редактора) только этот сигнал.
IRL не нашёл места с ВЧ помехами, но не исключено, что есть места где такие помехи есть.
alxumuk2
29.10.2016
Помехи per se не проблема. Аудио помех сейчас в этом диапазоне мало - строчники ЭЛТ ушли в прошлое, так что, я полагаю, это диапазон достаточно чист.

Проблема может быть в НЧ фильтре на входе перед АЦП (ибо сигнал на границе). Ну, и плюс инерционность излучателя, микрофона и прочее (ибо тоже на границах заявляемых характеристик).

Если реально работает - то тогда очень хорошо. Можно тупо фигачить ФВЧ.
alxumuk2 писал(а)
ЭЛТ

эт да! я в детстве слышал как в соседней комнате работает телевизор (такое характерное "псфсс..." в ушах), хотя батя включал его будучи в наушниках...
alxumuk2
29.10.2016
А вообще, зайди в Политех на радиофак (как уж там он называется), посмотри кто преподает ЦОС, ПДС, ТЭС, или что-то в этом роде, опиши проблему и предложи денег.
Судя по всему задача чуть сложнее лабораторки, но чуть легче курсовика. Но велосипедов изобретать не потребуется.
да я и сам справлюсь, тут сомнения не в "природе звука" или математике (на ПК это работает стопудово, даже "влоб" если решать, есть статьи и исследования), а в пефомансе выбранных методов (по CPU и RAM) на маломощных девайсах.
alxumuk2
29.10.2016
*алхимик хотел разбить себе лицо фейспалмом еще раз, но решил, что все не так плохо, и на сегодня достаточно*

Чувак, спору нет, ты сам справишься. Велосипед с квадратными колесами - дело нехитрое - я сам здесь несколько их накидал. Но если тебе действительно нужен перформанс - иди к людям по специальностям, которые я перечислил. Ибо там уже давно (давно я имею в виду десятки лет) придуманы алгоритмы, мат. аппарат и прочая хрень.
И этот мат. аппарат и алгоритмы, как несложно догадаться, разрабатывался не под современные вычислительные мощности. А уж детектирование гармоники... ну да ладно...

А по поводу того, что сомнения не в "природе звука"... Ну... я уже много чего сказал: и по поводу применения полосового фильтра, когда сигнал идет около теоретической границы оцифровки, и по поводу длительности сигнала (то, что работает на 200-300 ms не значит, что вообще теоретически возможно на 1-2 ms)... Да и много всякой хрени есть...

Вобщем, все, что я мог сказать, я сказал. Дальше каждый сам себе пNoздец своему счастью.
Meg@VaD
29.10.2016
Эх, все, кто из знакомых работал с dsp, занимаются сейчас чем-то ещё...А я поигрался и забыл. Но платформы остались)) CPU->PCI->PowerPC->Motorola 56k и обратно. Жаль - платформа закрытая, а реверс я пока не осилил.
alxumuk2
29.10.2016
Здесь, боюсь, проблема не платформы, а понимания обработки сигналов per se.
Я так понимаю, обработку девел0пер собирается делать на general purpose CPU, а не на DSP процессоре/сопроцессоре. И проблема не в том, чтобы сделать хорошо, а в том, что вообще сделать...

Эх, отмотать бы лет 15 назад - я бы подсказал правильное решение за разумные деньги... но времени не вернуть... :-(
Meg@VaD
29.10.2016
Это я в контексте "наименьших затрат CPU" упомянул об этих популрных платформах для музыкантов. Хотя есть с SDK платформы, которые по firewire сигнал на мощные dsp шлют, типа creamware xite, или miniDSP, они могут позволить сохранить cpu за некоторую сумму денег, но для такой задачи они слишком круты. И в звуковой карте e-mu есть dsp и kx-project, который позволяет делать модули для dsp.
По коду я тоже пока не помощник.
alxumuk2
29.10.2016
Ну, очевидно, что музыканты юзают соответствующие карты, в которых DSP это норма, и SDK под них тоже, наверняка есть. И тут да, все слишком круто.

Но, насколько я предполагаю, скорее всего, ТС хочет сделать канал связи по аудио для какой-то платформы, название которой можно прочитать в какой-то соседней теме :-).

Ну, и начал с азбуки морзе на границе слышимости, но в пределах формально доступных частот ЦАП/АЦП.
Не сказать, чтобы совсем дурная идея, но проблем, мне кажется, больше, чем решений...
alxumuk2 писал(а)
general purpose CPU, а не на DSP процессоре/сопроцессоре

даже я бы сказал на GP MCU :)
alxumuk2 писал(а)
проблема не в том, чтобы сделать хорошо, а в том, что вообще сделать...

ты так не шути! :)
это демка для новой работы (я предпочёл попробовать кое-куда "влезть сам", а не откликаться на уже пришедшие офферы, ну вот такой я дурак...), т.к. покемон-проджект то загнётся походу :-(
да, все могут начинать злорадствовать. а жаль, платформа-то отличная получилась (по соотношению себестоимость / фичи вообще не перестаю удивляться), но вот маркетинг "просрал все полимеры" похоже...
так что я в неспешном поиске буду с середины ноября. ну если чуда не произойдёт конечно...

p.s. да, из всех предложений мне это понравилось больше всего, там кроме игр с ультразвуком планируются и покошернее исследования... я тут за неделю больше математики вспомнил, чем за год в политехе...
alxumuk2
29.10.2016
Если на новой работе хотят DSP, и ты припрешься с каналом связи с длительностью импульса в 20 периодов и детектированием с помощью полосового фильтра...
Ну, дело хозяйское, но я бы лучше вообще на собеседование не приходил...
последнюю фразу не понял, типа мне не ходить, чтобы не позориться намекаешь? :))
alxumuk2
29.10.2016
Если там требуются хотя бы элементарные знания DSP, то да - не позорься.
Меня лет 15-17 назад за то, что я здесь понаписал, по пересдачам бы гоняли в хвост и гриву. И были бы правы.
А у тебя, похоже, все еще печальнее...
там глубокое знание DSP не требуется, всё проще. задача вполне прикладная. на ПК её уже давно решили, есть статьи.

p.s. ну или я правда тупой и нормальная (интересная) работа мне не светит... :(((
Если для ардуиновского железа, то советую взглянуть на готовые либы
playground.arduino.cc/Code/Filters
спасибо.
думаю ардуинки не понятнут ВЧ, ими можно играться на низких и средних частотах спектра, ну там с музыкой...
Может легче собрать аналоговый фильтр?
8битный DAC/ADC, кондер + резюк и особо не мудрить?
Я не силен в обработке сигналов, просто если попал бы в тупик с цифровой мощностью - начал бы копать в аналоговых вариантах.
надо на стандартном железе. понятно, что RC фильтр (а лучше вообще гетеродин) мог бы решить часть проблемм...
Все уже придумано до нас. Chirp z-transform вам в помощь https://en.wikipedia.org/wiki/Chirp_Z-transform

Что касается ДПФ, то для выделения конкретной частоты можно использовать специальным образом сконструированный БИХ фильтр. Собственно CZT на этом и основано.
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Гидравлика сервис.

Гидравлика сервис ООО на протяжении 13 лет занимается ремонтом гидронасосов, гидромоторов и гидрораспределителей. За время работы наше...

Восстановление отверстий спецтехники

Услуга мобильного наплавочно-расточного комплекса по восстановлению, ремонту отверстий на спецтехнике и промышленном...
Цена: 10 000 руб.

Быстровозводимые здания под ключ

Добрый день! Предлагаем Вам быстровозводимые здания для Вашего бизнеса! Мы проектируем и...
Цена: 800 000 руб.

Битум 90/10

Продам битум марки БН 90/10. Производитель Московский битумный завод. Цена 45,5 с НДС. Возможен наличный и безналичный...

Программист-разработчик Full-Stack ГК "Kolobox"
70000 -
100000 руб.
Высшее образование, стаж работы более 5 лет, полная занятость
Разработчик .net Profit Search
70000 -
100000 руб.
Неполное среднее образование, стаж работы 3-5 лет, полная занятость
Frontend-разработчик Profit Search
40000 -
50000 руб.
Стаж работы 3-5 лет, частичная занятость
Программист 1С НПП ПРО-М
от 110 000 руб.
Высшее образование, стаж работы 3-5 лет, полная занятость