Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Аномалии с обертонами
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Страницы: 1, 2
Rst7
QUOTE
Так что все нормально


Именно. А господину Andrey_1 рекомендую внимательнее читать обсуждение.


Moderator to Andrey_1: А так же выбирать выражения и не переходить на личности.
Ulysses
Цитата(Taradov Alexander @ Jan 10 2011, 00:01) *
Придумать метод, который позволит восстановить из исходного сигнала информацию о фазе и мгновенной амплитуде гармоник.
Мне пока это видится как что-то сильно переборное, то-есть выделяем небольшой кусок сигнала, сначала ищем фазы и амплитуды чистых синусов, получается некое приближение. Потом начинаем немного изменять амплитуды, чтобы более точно подогнать результат к оригиналу. Криерии - минимум СКО, фазы, амплитуды должны быть гладкими, как в пределах анализируемого куска, так и на стыках.
Может есть более простое решение? Или известны стандартные алгоритмы для этого?

Если известны частоты гармоник, то нахождение их амплитуд и фаз сводится к линейной задаче метода наименьших квадратов относительно комплексных амплитуд, которая дает решение с наименьшим СКО.
ataradov
QUOTE (Ulysses @ Jan 15 2011, 07:27) *
Если известны частоты гармоник, то нахождение их амплитуд и фаз сводится к линейной задаче метода наименьших квадратов относительно комплексных амплитуд, которая дает решение с наименьшим СКО.


Проблема в том, что амплитуды меняются со временем. Я пока не могу сообразить как правильно работать с таким сигналом.

Я попробовал брать отрезки сигнала длинной равной периоду текущей гармоники и прсто перебором фазы от 0 до 2*Pi с шагом 0.01 рад и амплитуды от 0 до 1 с шагом 0.001 искать параметры при которых СКО минимально. Это дает общее представление о форме амплитуды (как и множество других методов), но амплитуда иногда изменяется бысрее периода. Кроме того фаза получается не точной, так как оценка идет для независимых кусков, хотя она и изменяется плавно.

Видимо этот метод подойдет для грубой оценки и нужно что-то придумать для более точной.

Кроме того часота немного изменяется со временем, но это можно выразить как набег фазы.
Ulysses
Оценки амплитуд могут убывать со временем из-за затухания гармоник. Чтобы учитывать затухания необходимо проводить нелинейное оценивание комплексных частот (это в самом деле сложная проблема и для большого числа учитываемых гармоник метод перебора не подойдет).
Можно было бы сказать что-то больше, если бы посмотреть сами данные.
ataradov
QUOTE (Ulysses @ Jan 15 2011, 20:53) *
Оценки амплитуд могут убывать со временем из-за затухания гармоник.
Они естественно затухают, грубо я их с помощью сонограммы построил, но это грубо и из сонограммы информацию о фазе трудно тоже извлечь (можно из результатов БПФ, но так как размер окна БПФ не кратен периоду, то получается набор фаз для кусков, но они не связанны между собой).

Грубую оценку должно быть можно использовать, чтобы уменьшить число вариантов в переборе.

QUOTE (Ulysses @ Jan 15 2011, 20:53) *
Можно было бы сказать что-то больше, если бы посмотреть сами данные.

Собственно данные я могу предоставить в любом удобном формате.
Ulysses
Цитата(Taradov Alexander @ Jan 15 2011, 20:07) *
Собственно данные я могу предоставить в любом удобном формате.

В файле *.mat (для MATLAB): вектор со значениями сигнала и вектор с временными отсчетами.
ataradov
QUOTE (Ulysses @ Jan 15 2011, 21:41) *
В файле *.mat (для MATLAB): вектор со значениями сигнала и вектор с временными отсчетами.

Вот.

d - запись ноты C4, t - время, freq - частоты 47 гармоник (старшие гармоники не кратны нулевой), F- основная частота, Fs - частота дискретизации.


Andrey_1
Цитата(Taradov Alexander @ Jan 15 2011, 18:43) *
Проблема в том, что амплитуды меняются со временем. Я пока не могу сообразить как правильно работать с таким сигналом.

выделите гармоники гребенчатым фильтром например и на каждой частоте выполните преобразование Гильберта для узкополосного процесса, которое даст амплитуду и фазу гармоники
Найдите частоту и коэффициент затухания каждой гармоники и представьте в виде
x(t)=A*e(-alfa*t)*sin(w*t) далее суммируйте их все.
Как уже было сказано начальная фаза не должна влиять на качество звука
Кстати а что у Вас там на спектрограмме такой высокий уровень шума - это так сам сигнал синтезируется или звуковая карта на которую писали дерьмовенькая?
ataradov
QUOTE (Andrey_1 @ Jan 16 2011, 07:17) *
x(t)=A*e(-alfa*t)*sin(w*t) далее суммируйте их все.
В процессе колебания струны частота основного тона немного меняется. никакие преобразования, работающие над всей выборкой сразу не способны заметить этого изменения. А замечать его нужно.

QUOTE (Andrey_1 @ Jan 16 2011, 07:17) *
Как уже было сказано начальная фаза не должна влиять на качество звука
Должна-не должна - это сейчас не важно. Я хочу восстановить сигнал с минимаьными отклонениями от исходного. А для этого нужна фаза.

QUOTE (Andrey_1 @ Jan 16 2011, 07:17) *
Кстати а что у Вас там на спектрограмме такой высокий уровень шума - это так сам сигнал синтезируется или звуковая карта на которую писали дерьмовенькая?

Еще раз: сигнал получен с программного синтезатора, это самый чистый сигнал из всех которые я видел за это время. Это не шумы, это так выглядит спектр фортепиано.
Oldring
Цитата(Taradov Alexander @ Jan 15 2011, 21:07) *
Они естественно затухают, грубо я их с помощью сонограммы построил, но это грубо и из сонограммы информацию о фазе трудно тоже извлечь (можно из результатов БПФ, но так как размер окна БПФ не кратен периоду, то получается набор фаз для кусков, но они не связанны между собой).


Я уже спрашивал про "три струны". По ссылке в Википедии выше упоминалось их влияние. wink.gif
Три труны дают три моды колебаний со слегка отличающимися частотами и с сильно отличающимися скоростями отдачи энергии и, следовательно, затухания. В результате имеем не затыхающую экспоненту, а некоторую сложную огибающую. Вы это учитываете в модели?
ataradov
QUOTE (Oldring @ Jan 16 2011, 15:14) *
Я уже спрашивал про "три струны". По ссылке в Википедии выше упоминалось их влияние. wink.gif
Три труны дают три моды колебаний со слегка отличающимися частотами и с сильно отличающимися скоростями отдачи энергии и, следовательно, затухания. В результате имеем не затыхающую экспоненту, а некоторую сложную огибающую. Вы это учитываете в модели?

Да, я увлекся нотой C4. Видимо можно посмотреть на однострунные ноты. Вопрос: с какой ноты начинается одна струна обычно? Не хочется брать самые высокие - очень все быстро затухает.

Но с другой стороны, наличие 3-х струн не должно помешать построению такого-же сигнала, как и оригинальный (максимально близкого) из огибающих гармоник. Да, сама форма огибающих будет сложнее, но какое это имеет значение.
Oldring
Цитата(Taradov Alexander @ Jan 16 2011, 15:22) *
Но с другой стороны, наличие 3-х струн не должно помешать построению такого-же сигнала, как и оригинальный (максимально близкого) из огибающих гармоник. Да, сама форма огибающих будет сложнее, но какое это имеет значение.


Так вы уже восстановили огибающие гармоник? Достаточно точно? Чтобы больше это не имело значения?
ataradov
QUOTE (Oldring @ Jan 16 2011, 16:03) *
Так вы уже восстановили огибающие гармоник? Достаточно точно? Чтобы больше это не имело значения?

Это сарказм? Нет, так как очевидно, одних огибающих не хватает, нужно еще точно отслеживать частоту. Но для C6 частота тоже изменятеся со временем, но она лучше для экспериментов, там отчетливо видно всего 12 гармоник.
petrov
Цитата(Taradov Alexander @ Jan 16 2011, 16:47) *
Это сарказм? Нет, так как очевидно, одних огибающих не хватает, нужно еще точно отслеживать частоту. Но для C6 частота тоже изменятеся со временем, но она лучше для экспериментов, там отчетливо видно всего 12 гармоник.


Огибающая и есть искомая вами фаза и амплитуда которую вы будете использовать при синтезе, что страшного в сдвиге частоты?. Сносите в ноль интересующие гармоники, фильтруйте хорошими фильтрами и децимируйте так чтобы не было искажений.
ataradov
QUOTE (petrov @ Jan 16 2011, 16:54) *
Огибающая и есть искомая вами фаза и амплитуда которую вы будете использовать при синтезе, что страшного в сдвиге частоты?. Сносите в ноль интересующие гармоники, фильтруйте хорошими фильтрами и децимируйте так чтобы не было искажений.

Да, чего-то я ступил тут, отсутствие практики сказывается. Спасибо большое.

Поточечно синтез с оригиналом естественно не совпадают, но результат синтеза звучит просто отменно.
Ulysses
Цитата(Taradov Alexander @ Jan 15 2011, 17:54) *
Вот.
d - запись ноты C4, t - время, freq - частоты 47 гармоник (старшие гармоники не кратны нулевой), F- основная частота, Fs - частота дискретизации.

Для этих данных результаты подгонки модели a*exp(j*2*pi*f*t)
здесь (a = |a|*exp(j*arg(a)) и f = freq+j*ext - комлексные параметры):
Нажмите для просмотра прикрепленного файла
Рядом с результатами нелинейного оценивания параметров модели приведены результаты использования линейного метода наименьших квадратов по значениям частот гармоник, которые были в файле с данными.
Реализуется линейный МНК в MATLAB очень просто:
F = [-freq(end:-1:1)'; freq'];
E = exp(j*2*pi*F*t).';
H = E'*E;
g = E'*s;
a = H\g;
Вектор амплитуд дает вам абсолютное значение амплитуды |a| и ее фазу.
Приведенные результаты показывают, что для небольшого интервала времени (50 мс) затухание слабо проявляется и можно обойтись без трудоемкого и времязатратного нелинейного оценивания, чтобы получить параметры модели, позволяющие имитировать исходный сигнал с отклонением не более десятых долей единиц процентов от общей энергии сигнала.
Для интервалов порядка 0.4 с не учет затухания дает ошибку в десятки процентов, в то время как учет - 0.5%.
Анализ оценок амплитуд гармоник для разных интервалов времени показывает, что со временем происходит процесс перераспределения энергий гармоник между ними.
ataradov
QUOTE (Ulysses @ Jan 16 2011, 21:34) *
Для этих данных результаты подгонки модели a*exp(j*2*pi*f*t)
Спасибо, посмотрю.

QUOTE (Ulysses @ Jan 16 2011, 21:34) *
F = [-freq(end:-1:1)'; freq'];
E = exp(j*2*pi*F*t).';
После первой строчки F становится вектором длинны 2*length(freq) и произведение F*t дает ошибку о несогласованности размерностей перемножаемых векторов (t тоже вектор, но длинный). Можно тут пояснить?


Касательно предложения petrov: хочу проверить правильно-ли я понял, результат есть, но может еще лучше можно.

Что я сделал: перемножил исходный сигнал на sin(wt) и cos(wt), отфильтровал составляющие удвоенной частоты, получил снесенные в 0 квадратуры. Дальше, так как начальная фаза неизвестна, то пришлось возвести их в квадрат и сложить, после извлечения корня получился модуль амплитуды огибающей. Это в принципе прокатывает, так как все переходы этого модуля через 0 приходятся на момент почти затухшего звучания и проблемы с фазой в этих местах не слышны.

Это лучшее что можно сделать в данной ситации или можно лучше? Наверное можно попробовать ФАПЧ и следить за фазой, но очень похоже на overkill для данной задачи.
petrov
Taradov Alexander

Если вас так фаза интересует то зачем же вы модуль вычисляли? Аргумент комплексной огибающей и есть фаза безо всяких ФАПЧей. С начальной фазой никаких проблем нет, вы определяли комплексные огибающие гармоник относительно известных вам гетеродинов, относительно их и восстанавливайте, вы очень точно восстановите исходный сигнал за исключением лишь незначительного шума который задавлен фильтрами. Теперь изучайте как гармоники модулированы по фазе(и значит частоте) и амплитуде и как это проще всего синтезировать или может вам будет достаточно просто записи продецимированных комплексных огибающих гармоник, это ведь гораздо меньше памяти будет занимать чем исходный сэмпл.
ataradov
QUOTE (petrov @ Jan 17 2011, 00:46) *
Если вас так фаза интересует то зачем же вы модуль вычисляли?

Да, не сообразил, что можно оставить обе квадратуры.

Теперь буду экспериментировать со сжатием sm.gif
Ulysses
Цитата(Taradov Alexander @ Jan 16 2011, 21:28) *
После первой строчки F становится вектором длинны 2*length(freq) и произведение F*t дает ошибку о несогласованности размерностей перемножаемых векторов (t тоже вектор, но длинный). Можно тут пояснить?

После считывания ваших данных
load('c4_data');
я их для собственного удобства переприсваивал
s = d; t = t';
Вектор t должен быть строкой, чтобы результат вычисления E = exp(j*2*pi*F*t)
был матрицей комплексных экспонент.
Andrey_1
Сдвиг частоты происходит еще из-за различного коэффициента демпфирования струны на разных частотах
Его можно определить по спаду огибающей каждой гармоники во временной области

ПС Откуда в колебаниях струны фортепьяно пъедестал белого шума? Такое только в органных трубах бывает
за счет аэродинамики потока нагнетаемого воздуха
ataradov
QUOTE (Andrey_1 @ Jan 18 2011, 15:14) *
ПС Откуда в колебаниях струны фортепьяно пъедестал белого шума?

Это шумы квантования 16 битного.
phantom
Цитата(Taradov Alexander @ Jan 16 2011, 14:39) *
Поточечно синтез с оригиналом естественно не совпадают, но результат синтеза звучит просто отменно.

Если результат устраивает, то в чем тогда проблемы? Разве задача не решена? Повторите создание модели для групп струн (например пооктавно - для ноты До и менять ей частоту звучания в пределах октавы или еще меньше, с учетом изменения технологии навивки струн) и все наверное.
ataradov
QUOTE (phantom @ Jan 18 2011, 20:13) *
Разве задача не решена?

Промежуточная (построить огибающие) - решена. Полная (понять как эти огибающие получились из физики и математики, или хотя-бы обобщить их для всего диапазона) - пока нет.
Andrey_1
Если это шумы квантования и их уровень 4 относительно максимума первой гармоники 8 даже если шкала по вертикальной оси линейная то динам диапазон всего 6 дБ? Это 16 бит?

Огибающая во временной области синтезируется через преобразование Гильберта
спадающая по экспоненте огибающая каждой гармоники определяется ее механическим демпфированием - потерями энергии в колебательном контуре, собственная частота натяжением струны и плотностью материала (идеальая модель)
комплексным модулем Юнга E=E0*(1+j*etta) плотностью и моментом инерции сечения струны (модель изгибных колебаний)
Звук струны получается на основе принципа суперпозиции гармоник - сиречь суммированием парциальных комплексных амплитуд
ataradov
QUOTE (Andrey_1 @ Jan 19 2011, 02:08) *
Если это шумы квантования и их уровень 4 относительно максимума первой гармоники 8 даже если шкала по вертикальной оси линейная то динам диапазон всего 6 дБ? Это 16 бит?
Пожалуйста читайте все-таки тему. Еще раз: График в попугаях, приведен только для оценки расхождения частот. Уровень шумов там -55 дБ относительно основной гармоники при отстройке 100 Гц от нее.

QUOTE (Andrey_1 @ Jan 19 2011, 02:08) *
собственная частота натяжением струны и плотностью материала (идеальая модель)
комплексным модулем Юнга E=E0*(1+j*etta) плотностью и моментом инерции сечения струны (модель изгибных колебаний)

Я знаю теорию, весь этот топик посвещен тому, что она не совпадает с практикой.

QUOTE (Andrey_1 @ Jan 19 2011, 02:08) *
Звук струны получается на основе принципа суперпозиции гармоник - сиречь суммированием парциальных комплексных амплитуд
А в русском алфавите есть буквы от А до Я, и что? Еще раз перечитайте топик. Тут почти с самого начала обсуждается вопрос как получить реальные огибающие, а не теоретические. То что их нужно просуммирвать никто не сомневался.
Andrey_1
Цитата(Taradov Alexander @ Jan 19 2011, 08:22) *
Пожалуйста читайте все-таки тему. Еще раз: График в попугаях, приведен только для оценки расхождения частот. Уровень шумов там -55 дБ относительно основной гармоники при отстройке 100 Гц от нее.


Я знаю теорию, весь этот топик посвещен тому, что она не совпадает с практикой.

А в русском алфавите есть буквы от А до Я, и что? Еще раз перечитайте топик. Тут почти с самого начала обсуждается вопрос как получить реальные огибающие, а не теоретические. То что их нужно просуммирвать никто не сомневался.


Picture worthy than thousand words - если вы технарь, потрудитесь шкалы приводить в физических единицах - тогда не надо будет писать записки в зал

Я не говорю о теоретических огибающих - Вам бало предложено профильтровать каждую гармонику полосовым фильтром или взять Фурье достаточно длинной временной реализации с бОльшим разрешением по частоте
Потом определите методом ширины резонансной кривой добротность каждой гармоники и вперед через комплексные огибающие во времени
ataradov
QUOTE (Andrey_1 @ Jan 19 2011, 15:01) *
Picture worthy than thousand words - если вы технарь, потрудитесь шкалы приводить в физических единицах - тогда не надо будет писать записки в зал
В ответ могу предложить читать что написано, а не только на картинки смотреть. Не в детском саду уже.

Самый нормальный и хорошо работающий метод предложил petrov, за что ему еще раз спасибо. Больше методов уже не нужно sm.gif

PS: Ну и если уж придираться к мелочам, то английский нужно либо учить либо не использовать без явной необходимости.
ataradov
Я продолжаю ковырять синтезированные сэмплы и наблюдаю следующее явление: в левом и правом канале (стерео) разность фаз и отношение амплитуд гармоник близки к постоянной, но иногда с ними случается странное - разность фаз плавно изменяется на 2*Pi, в результате чего возвращается в исходное значение, конечно, но само ее такое поведение мне не понятно. На картинках красным изображена разность фаз (ось Y в радианах), синим - отношение амплитуд, по оси X - отсчеты 44.1 кГц.

Метод получения:
1. Входной сигнал d = [dl, dr], где dl и dr - вектора (все остальные вычисления тоже работают с векторами) значений отсчетов левого и правого каналов.

2. Для dl и dr получаем квадратуры первой гармоники:
CODE
  il' = dl * sin(2*pi*f0*t);
  ql' = dl * cos(2*pi*f0*t);
  il = 2*filter(H, il');
  ql = 2*filter(H, ql']);

аналогично получаем ir и qr.

3. Получаем амплитуды: al = sqrt(il.^2 + ql.^2) и фазы: pl = atan2(il, ql). Аналогично ar и pr.

4. Строим al/ar и pl-pr.

При построении фаз использовалась функция матлаба unwrap() для того, чтобы избежать резких скачков при переходе от 2*Pi к 0.

Характер таких переходов зависит от силы удара по струне и жесткости молоточка (параметрs задаются в эталонном синтезаторе), все приведенные катринки полученны для ноты C4.

На реальных записях я такого не наблюдаю, там разность фаз примерно одинакова.

У этого эффекта есть объяснения?
orthodox
Цитата(Taradov Alexander @ Jan 31 2011, 21:26) *
У этого эффекта есть объяснения?

Может и не стоит объяснять.
просто откидывать 2*пи , так как они там воображаемые.
или, точнее, артефакты.
ataradov
QUOTE (orthodox @ Feb 1 2011, 01:45) *
Может и не стоит объяснять.
Наверное, просто думал может кто узнает в этом поведении какой-нибудь известный эффект. Просто уж больно они характерные артефакты эти.
gregory
Цитата(Taradov Alexander @ Feb 1 2011, 11:05) *
Наверное, просто думал может кто узнает в этом поведении какой-нибудь известный эффект. Просто уж больно они характерные артефакты эти.




Все плохие инструменты одинаково плохи. Копировать их не стоит.
А все хорошие -индивидуальны. их скопировать не удается.

Частота колебаний (звучания) зависит от многих вторичных факторов- Амплитуды колебаний, величины потерь, которые нелинейны, ширины и формы спектральных линий, которые могут меняться в процессе колебания и тд.
Кроме того, длина Вашей выборки во времени тоже повлияет на эти факторы. Те , несмотря на полезные советы, Вам придется самому выбрать модель , на которой остановиться, и при этом надо отсечь все лишнее. Иначе задачку не решить. Кроме того, Не факт , что Ваш спектр дает хорошее звучание.
В общем, задача сложная-удачи!
ataradov
QUOTE (Taradov Alexander @ Feb 1 2011, 09:05) *
Наверное, просто думал может кто узнает в этом поведении какой-нибудь известный эффект. Просто уж больно они характерные артефакты эти.


Небольшой update. Такие перескоки фазы возникают из-за биений 3-х струн.

EDIT: Я уже запутался sm.gif. Перескоки разности фаз стерео каналов модель струны естественно не воспроизводит, воспроизводятся другие характерные перескоки фаз в процессе колебания.

Чтобы лучше понять что происходит я взял статью в которй рассматривется ДУ колебания жесткой струны и небольшим матлабовским скриптиком построил решение исходя чисто из физических параметров струны.

Аналогичный эффект наблюдается на модели для 3-х струн немного расстроенных.

Модель так-же воспроизводит негарманичность, довольно интересно с ней играться sm.gif

Из модели получается перемещение любой точки струны во времени, я сейчас соответственно смотрю как моделируют деку (soundboard по-английски, не знаю как правильно на русском), а пока смотрю на перемещение точки в районе мостика (место где вибрация передается на деку).

Если записать это перемещение в wav файл и послушать, то получается довольно интересно, но на фортепиано не похоже ни разу, разумеется sm.gif
Andrey_1
Цитата(gregory @ Feb 7 2011, 12:24) *
Частота колебаний (звучания) зависит от многих вторичных факторов- Амплитуды колебаний, величины потерь, которые нелинейны, ширины и формы спектральных линий, которые могут меняться в процессе колебания и тд.

??????!!!!!!
Santik
Гармоники гитарной струны (первой).
Что-то непонятно ничего... crying.gif
Santik
Цитата(Santik @ Mar 30 2012, 16:50) *
Гармоники гитарной струны (первой).
Что-то непонятно ничего... crying.gif


Исходник : http://dl.dropbox.com/u/29529555/44k-1.rar
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.