Xenia 45 13 марта, 2013 Опубликовано 13 марта, 2013 · Жалоба Со цифровой обработкой звука раньше дела не имела, поэтому боюсь изобретать велосипед там, где проблема давно решена. Потому и обращаюсь за советом к тем, кто со звуком раньше работал. Есть в наличии WAV-файл, содержащий звуковую запись. Сигнал, если его построить на графике, выглядит примерно так: Т.е. наличествует сигнал веретёнообразнозной формы, от которого мне нужна огибающая (сверху или снизу - без разницы). Под огибающей я имею ввиду линию, проходящую по границе белого и черного (см. рисунок). При этом я отдаю себе отчет в том, что график предварительно придется сжать в горизонтальном направлении на столько, чтобы провалы до нуля в нем исчезли, а линии от соседнх периодов слились вместе (с учетом дискретности построения) - т.е. именно то, что уже произошло на приведенном мною графике. Самое простое, что приходит в голову - аналогия с детекторным приемником :) - либо обрезать нижнюю часть (один диод), либо получить абсолютную величину (диодный мост). Впрочем, и возведение в квадрат мне тоже годится. Но и после этого фигура по-прежнему черным-черна, поскольку продолжает дрожать между амплитудным значением и нулём. Пыталась сделать ее выпуклой, пропустив через самодельный фильтр, который каждую "провалившуюся" точку, находящуюся ниже, чем средняя между ее соседями (слева и справа), заменяет на это среднее. Но, к сожалению, такой фильтр не привел к видимому изменению сигнала, хотя я его гоняла 10 раз подряд. Находить торчащие вверх вершины и строить по ним полином - слишком трудоёмко по вычислениям (в моём WAV-файле около 11 млн. точек). Чувствую, что решение должно быть какое-то простое, но более ничего приличного придумать не смогла. Совет годится без объяснения - хотя бы поскажите термины, которые я могла бы поискать в интернете. А так я даже не соображу, как эту задачу назвать можно. Даже тем, как эту тему назвала, недовольна - громкость это все-таки чуть другое, чем то, что я ищу. Мне скорее нужна текущая мощность сигнала (пусть не мгновенная, а хотя бы с минимальным шагом, который бы превышал период звука). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Чувствую, что решение должно быть какое-то простое, но более ничего приличного придумать не смогла. Совет годится без объяснения - хотя бы поскажите термины, которые я могла бы поискать в интернете. А так я даже не соображу, как эту задачу назвать можно. Даже тем, как эту тему назвала, недовольна - громкость это все-таки чуть другое, чем то, что я ищу. Мне скорее нужна текущая мощность сигнала (пусть не мгновенная, а хотя бы с минимальным шагом, который бы превышал период звука). Со звуком не работаю. Я их издаю и принимаю. Вам нужен средний квадрат, именуемый еще разными словами. Езжайте в Монте-Карло, если не хотите (не можете) честно зарабатывать деньги. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба (в моём WAV-файле около 11 млн. точек). Выбирайте из 100 (?) точек одну, самую "громкую". Дальше - из следующих 100. Типа... пикового детектора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба В детекторном приемнике ещё емкость стоит :) Правильно, фильтр. Только у фильтра есть т.н. постоянная времени, вот её и нужно сделать больше расстояний между пиками. Или другими словами, нужно сделать ФНЧ, который не будет пропускать частоту модуляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Ну так в обычном амплитудном детекторе после диода ставят ФНЧ. Вам конкретно надо посчитать частоту среза, чтобы реальные звуковые частоты не путать с огибающей. Если на входе - голосовой сигнал с микрофона, то построение ФНЧ простое, т.к. спектр голоса начинается где-то с 300 Гц. Если на входе - современная музыка с обилием НЧ и ударных, то придется давить в ФНЧ все, что выше 20 Гц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Проще - выбрать максимум из стольких точек сигнала, сколько их "утаптывается" в один столбик на картинке. P.S. пиковый детектор бывает со сбросом. :) P.P.S. Со звуком не работаю, даже радио выключаю. Со звуком я отдыхаю. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zzzzzzzz 0 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Проще - выбрать максимум из стольких точек сигнала, сколько их "утаптывается" в один столбик на картинке. ... Лучше немного не так: 1. В потоке отсчетов убрать все минусы - модуль, ||. Это выпрямление, если говорить о физической реализации. 2. Брать интеграл по группе отсчетов. Это будет ФНЧ. Количество отсчетов определяется необходимой "подробностью" огибающей. Полагаю, что вам нужен всё-таки не пиковый детектор, а интегратор. Похожую задачу решают "распознаватели" речи. В итоге, например, можно довольно большие "куски" фонограммы описывать простой интерполяционной функцией и сравнивать её с фонемной из "банка" (корреляция). Я этого сам не делал пока. Так, мысли вслух - может пригодится. Если я угадал, то ещё мысля - параллельно, для выбранного участка интегрирования, определять функцию основной несущей частоты (простым подсчетом пересечений нуля) и добавить эту функцию в коррелятор с фонемой из "банка". Должна повыситься точность распознавания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Пыталась сделать ее выпуклой, пропустив через самодельный фильтр, который каждую "провалившуюся" точку, находящуюся ниже, чем средняя между ее соседями (слева и справа), заменяет на это среднее. Но, к сожалению, такой фильтр не привел к видимому изменению сигнала, хотя я его гоняла 10 раз подряд. Мне скорее нужна текущая мощность сигнала (пусть не мгновенная, а хотя бы с минимальным шагом, который бы превышал период звука). Так нужна обработка сигнала или обработка графика? Если обработка графика чтоб красивая гладкая огибающая была, то надо учитывать масштаб представления графика на экране, как я думаю. Т.е. надо для начала узнать сколько точек реально на экранном представлении графика помещается. А потом медианным фильтром пройтись по положительным полупериодам, так чтобы получить необходимое количество точек графика. А потом уже сгладить экспоненциальным фильтром. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Вы все надо мной пожалуйства не смейтесь :), но на самом деле мне частоту пульса надо узнать из данных ФКГ (ФоноКардиоГраммы), которая записывается с микрофона: Прямое FFT этого сигнала дает слишком пеструю картину. Конечно, нужная частота в той куче есть, однако там она отнюдь не самая большая по амплитуде. А если бы я той частоты заранее не знала, то, скорее всего, выбрать нужную из FFT-спектра не смогла. Вот и решила с горя сперва "почистить" исходные данные, чтобы спектр получился почетче. Линейный фильтр НЧ здесь не помощник, т.к. фильтрация такого рода банально сводится к примитивным операциям над FFT-спектром. А вот пиковый детектор (который мне уже успели посоветовать) - совсем другое дело. Очень возможно, что он окажется полезен. Проблема здесь в том, что "вигли" в разных сердечных сокращениях по фазе обычно не совпадают. Т.е. огибающая вспроизводится хорошо, но шум внутри нее дергается по разному. Поэтому корреляция таких сигналов (при наложении друг на друга) получается случайной: хорошо совпадут по фазе - получится большой, а не совпадут - получится малой. Грубо говоря, если в первом ударе пульса веретено образует синусоида, а во втором ударе - косинусоида, но корреляция получится нулевой. А мне хочется где-нибудь привязаться, чтобы эти кадры засинхронизироваться, чтобы их в последствии можно было накладывать друг на друга. А в итоге вытащить идельный/средний/типичный кадр, в котором меньше всего посторонних шумов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Разве самая низкая частота в спектре кардиограммы не есть частота пульса? Или частота дыхания влияет? Или ... биопроцессы в других органах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Проблема здесь в том, что "вигли" в разных сердечных сокращениях по фазе обычно не совпадают. Т.е. огибающая вспроизводится хорошо, но шум внутри нее дергается по разному. Поэтому корреляция таких сигналов (при наложении друг на друга) получается случайной: хорошо совпадут по фазе - получится большой, а не совпадут - получится малой. Грубо говоря, если в первом ударе пульса веретено образует синусоида, а во втором ударе - косинусоида, но корреляция получится нулевой. А мне хочется где-нибудь привязаться, чтобы эти кадры засинхронизироваться, чтобы их в последствии можно было накладывать друг на друга. А в итоге вытащий идельный/средний/типичный кадр, в котором меньше всего посторонних шумов. Так и сделайте огибающую, а от нее уже Фурье. Квадратичным детектором - это мгновенная мощность Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Разве самая низкая частота в спектре кардиограммы не есть частота пульса? Или частота дыхания влияет? Или ... биопроцессы в других органах? К сожалению нет. FFT показывает и меньшие частоты тоже. А на счет биопроцессов вы прямо провидец. Вся бяка в том, что микрофон в данном случае ставится не на грудь напротив сердца, а на ... живот. Живот роженицы или будущей матери на последних сроках беременности. И требуется выделить ФКГ плода от ФКГ материи и прочего пердежа в ее кишках :). Но если этот пердёж асинхронен к сердечному ритму, и на этом основании довольно легко отфильтровывается, то ФКГ сердца матери довольно сильно мешает. А тут я в обычной ФКГ (где микрофон на грудь ставится) разобраться не могу, т.к. FFT у него слишком сложная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба Вам верно посоветовали - амплитудная демодуляция ( исходя из представленного графика ) Делал по всякому, если примитивно, в качестве примера: procedure Filter_AMD_NLPF_LPF; var i: integer; Ya, Y, Yi, A: TFloat; begin Yi := 0; for i := 0 to High(arY) do begin // выпрямление Ya := abs(arY); // нелинейный ФНЧ-I if Yi < Ya then A := 0.05 else A := 0.003; Y := A * Ya + (1 - A) * Yi; Yi := Y; // линейный ФНЧ-I arYF := LPF.Next(Y); end; end; P.S. Что касается Вашей задачи в целом, то система должна быть двухканальной: один канал на сердце матери, второй на живот. Из сигнала "живота" вычитать сигнал сердца матери. Ну это так, на пальцах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zzzzzzzz 0 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба А что это за генерёж такой у вас в сигнале? Правильная микрофонная система так работать не должна. Или это измерение проводится в среде, наполненной посторонними, более высокочастотными шумами? Если же это специально введенная несущая (по каким-то техническим соображениям), то нужно задрать вверх её частоту, а потом избавиться, отфильтровать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 14 марта, 2013 Опубликовано 14 марта, 2013 · Жалоба > А что это за генерёж такой у вас в сигнале? Это мать очень быстро дышит:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться