Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помощь [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]

Элементарно! повесить на импульс конденсатор. : )

А если серъезно, то тоже елементарно, если цифровой импульс прямоугольный, то берем любую синусоиду, ее амплитуду приравниваем к амплитуде импульса, а потом просто синхронизируем ее переходы с переходами импульса.


Наверх

Титульная страница Поиск, карта сайта Написать письмо