![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помощь [D5, Win95/98, NT4, Win2k, WinXP]
Mambo © (2002-05-14 21:25:00)Братаны програмеры, помогите! Нуно переобразовать цифровой прямоугольный импульс на синусоидальный и вывести его на звукаш. Любые идеи прийму. Плиз!!!!
KilkennyCat (2002-05-24 17:44:00) [1]А если посмотреть из области радиовещания: амплитудная модуляция? там ведь приглаживают несущую частоту амплитудой звукового сигнала.... тогда задача решается... а если меняется период имульса, то тогда из той же опреы, но частотной модуляцией... а вообще, меня дико заинтриговала проблема. Я подумаю серъезно над этой фигней.
Mambo (2002-05-23 14:26:00) [2]>>KilkennyCat © (20.05.02 17:17) ....А вообще, я бы решил это аппаратно.
В том то и прикол, что наши препады платить не хотят! Им холяву подавай...... :-)
KilkennyCat (2002-05-21 16:55:00) [3]А вот еще вариант: сделать по методу АЦП.
KilkennyCat (2002-05-21 16:51:00) [4]Убедил. Но все-равно апельсин! :)
Digitman (2002-05-21 13:56:00) [5]>KilkennyCat
1. Задержка хотя бы в период - уже не real-time processing. И в ряде случаев может серьезно влиять на результирующие характеристики сквозного тракта обработки.
2. Реально задержка будет составлять гораздо более ощутимое время, т.к. напрямую зависит от прецизионности амплитудно-временной характеристики вх.сигнала, при "плавании" которой (пусть даже в незначительных пределах !), придется применять адаптивные методы определения средне-вычисленных значений периода следования фронтов и скважности исходной "дискретной" последовательности. Для любых же адаптивных методов характерны ощутимые погрешности из-за динамически расчитываемых размеров фреймов предвыборки.
3. Отказ от адаптивных методов не позволит (
ни аппаратно ни программно) получить на выходе синусоиду; максимум, что можно получить : близкая к экспоненте "пила", характерная для аппаратно реализованных интегрирующих цепей ФНЧ, использующих в своей основе вышеупомянутые конденсаторы.
4. По поводу "фронтов" и "спадов" синусоиды. Еще раз следует подчеркнуть, что значение синуса как тригонометрической ф-ции углового аргумента зависит как минимум от этого самого углового аргумента (область определения - 0...2П), который в дан.случае может быть определен только если известен период дискретизации и период следования фронтов вх.импульсов (скважностью можно, imho, пренебречь). Период дискретизации определяется простым чтением тек.установок WaveIn-канала (GetDeviceCaps), а вот точный период следования фронтов - особенно, если вх.сигнал заметно "шумит" и "плавает" - только интегрированием вх.ф-ции и, возможно, последующим "пропусканием" через каскад, реализующий гистерезис (иначе "шумы" превратят вых.ф-цию из синусоиды черт те во что)
KilkennyCat (2002-05-20 17:17:00) [6]Ха, разумеется! но, во-первых, одним периодом можно пожертвовать,
во-вторых, в таком случае никакая обработка сигналов не может происходить в реальном времени, а в-третьих вот алгоритм синусоиды в реальном времени (правда синусоида несколько кривая будет):
в момент, когда уровень сигнала максимальный начинается рисоваться фронт синусоиды, при спаде сигнала синусоида "закругляется", при минимальном уровне рисуется фронт синусоиды и при фронте импульса она закругляется снова... и т.д.
Разумеется, дикость, будет нехило плясать по амплитуде, но тем не менее она даже информативнее будет :)...
А вообще, я бы решил это аппаратно.
Digitman (2002-05-20 08:18:00) [7]>KilkennyCat
Нет, нерешаема. Даже в случае, близком к идеальному (период следования импульсов и скважность вх.сигнала - постоянны с минимально возможной погрешностью преобразования), задержка результирующего вых.сигнала будет не менее одного периода вх.сигнала.
KilkennyCat (2002-05-20 02:16:00) [8]Не согласен. Задача решаема в реальном времени.
Mambo (2002-05-18 19:59:00) [9]>Anatoly Podgoretsky Большое спасибо за прожку, но это генератор синусоидальных колебаний, я мне нужно принять звуковой поток прямоугольных импульсовна звукаш, поймать максимумы и минимумы, а уж потом по ним накладывать синусоиду.
Я согласен с "Digitman © (18.05.02 13:23)" и поэтому зашол в тупик....
Digitman (2002-05-18 13:23:00) [10]В реальном времени задача неосуществима. Потому что заранее неизвестно значение длительности импульса, от которого, вконечном итоге, должен зависеть период результ.сигнала
Digitman (2002-05-18 13:22:00) [11]В реальном времени задача неосуществима. Потому что неизвестны ни значения длительности импульса.
KilkennyCat (2002-05-18 03:05:00) [12]импуль можно ловить как угодно, наверное. Это же Ваша задача, я не знаю, что и как она должна делать. А вот из-за того, что амплитуда или период импульса могут изменяться я предложил делать синусоиду с задержкой, хотя бы в полпериода импульса.
тогда будут известны: разница амплитуды, длительность. Под них надо подстроить синусоиду, но это уже сплошная математика...
Anatoly Podgoretsky (2002-05-17 22:38:00) [13]Mambo © (14.05.02 21:25)
У меня на сайте есть Sweep Generator, наверно тебе подойдет
Mambo (2002-05-17 22:27:00) [14]>>KilkennyCat Большое спасибо что откликнулся, но тут то и проблем, у меня импульс меняется в разных пределах и я точно незнаю каке его максимальное значение должно быть.
P.S. этот импульс надо ловить на лету или с файла?
KilkennyCat (2002-05-17 16:33:00) [15]Да, еще: поскольку период цифрового импульса может меняться, лучше формирровать синусоиду на один период позже. Таким образом можно без проблем вычислить период импульса.
KilkennyCat (2002-05-17 16:30:00) [16]ну... мне лень делать глобально... но к примеру:
Пусть прямоугольный импульс изменяется от -1 к 1 и т.д....
ловим начало перехода от -1 к 1 (фронт импульса)
и запускаем:
x := -1;
10
repeat
у := sin(x);
x := x + nnn;
until x <> 1; (или x = 1, все забываю условие выполнения цикла :)
repeat
у := sin(x);
x := x - nnn;
until x <> -1;
гоуту 10
вся проблема в определении nnn - оно должно равнятся период импулса деленный на количество желаемых выборок.
Mambo (2002-05-17 15:54:00) [17]KilkennyCat © (17.05.02 06:26)
Сам процес я знаю, но как это реализовать програмно на Delphi? Если не лень кинь функцию или ссылочку для наччитки, плиззззззз....
KilkennyCat (2002-05-17 06:26:00) [18]Элементарно! повесить на импульс конденсатор. : )
А если серъезно, то тоже елементарно, если цифровой импульс прямоугольный, то берем любую синусоиду, ее амплитуду приравниваем к амплитуде импульса, а потом просто синхронизируем ее переходы с переходами импульса.