Нужен алгоритм

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Нужен алгоритм

Сообщение Faust » 25.04.2004 (Вс) 11:19

Имеется последовательность считываемых через равные промежутки времени значений некоторого осциллирующего параметра. Надо узнать период колебаний.
Эту задачу я решал так: пускай параметр F(t)=A*Sin(w*t), тогда F'(t)=A*w*Cos(w*t); F''(t)=-A*w*w*Sin(w*t). Взяв F''(t) "вручную" (по таблице значений F(t)), получаю w=Sqrt(-F''(t)/F(t)); T=2*pi/w.
Это во-первых, просто, во-вторых - позволяет определять период во время снятия показаний параметра (правды ради, следует отметить, что точность этого способа неважная).
ПРОБЛЕМЫ начинаются тогда, когда входной сигнал является наложением 2 (а на практике бывает и N) разных колебаний. Может, кто предложит лучшее решение задачи с одним сигналом или хоть какое-то - с несколькими.
Листинги не горят!

Aqualung
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 27.02.2004 (Пт) 23:56

Сообщение Aqualung » 25.04.2004 (Вс) 12:12

Насколько я понимаю, речь идет о колебаниях разной частоты? Иначе, соотношение F''(t)=-w*w*F(t) сохраняется.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 25.04.2004 (Вс) 23:31

Нужно повторить высшую математику и осуществить преобразование из временного представления в частотную. По -моему, это что-то типа преобразования Фурье или чего-нибудь в этом роде. Так или иначе, нужно сигнал разложить в ряд по частотам. В своё время в институте изучалась такая дисциплина, как Радитехнические цепи и сигналы, а также много математики. Однако, двано это было.

Aqualung
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 27.02.2004 (Пт) 23:56

Сообщение Aqualung » 26.04.2004 (Пн) 10:30

Ну, вообще-то, да... Апроксимировать функцию, например, при помощи многочлена Лагранжа, потом, разложить в ряд Фурье и получить частоты всех гармоник. Но работка та еще. Одним уравнением не отделаешься. ...Даже десятью. :(

Aqualung
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 27.02.2004 (Пт) 23:56

Сообщение Aqualung » 26.04.2004 (Пн) 10:52

Да, кажется есть интеграл, считающий период напрямую, в рамках метода Фурье.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 27.04.2004 (Вт) 19:29

Хрошо бы уточнить:
1) состоит ли сигнал из гармоник, т.е. из синусоид с кратными частотами или , напрмер, это сумма двух колебаний с близкими частотами;
2) известно ли соотношение амплитуд между колебаниями.
3) каков относительный диапазон времени наблюдения по сравнению с ожидаемым значением периода

Какие вообще априорные сведения есть об этом сигнале?

Вообще говоря, частотомер измерят так: берётся некоторый диапапзон времени, гораздо превышающий период колебаний, и подсчитывается количествор пересечений через нуль. Затем находится среднее значение

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 29.04.2004 (Чт) 14:32

For Alexanbar:
1) как карта ляжет... Хотя их можно считать кратными весьма малому периоду, но, по-моему, это ничего не дает...
2) с этим повезло - амплитуды всех колебаний одинаковы;
3) Возможны составляющие с периодом, приближающимся к времени считывания сигнала, но они не должны быть больше, чем это время.
О характере сигнала: заранее не известно число генераторов и их частоты (хотя имеется верхний предел частоты), а вот в процессе измерения количество генераторов не изменяется. Иными словами: подключили к некой цепи и меряем сигнал на её выходе некоторое заведомо достаточное время.
Листинги не горят!

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 01.05.2004 (Сб) 14:02

В самом общем виде, т.е. для частот от 0 до Fв, трудно решить задачу определения периода суммарного колебания. А вот для случая, когда возможные колебания лежат в диапазоне от Fн до Fв, причём Fв-Fн <<Fв, по сути речь идёт о периоде огибающей. Его можно найти следующим образом:
1) с помощью конденсатора отсекаем постоянную составляющую, если она есть.
2) пропускаем сигнал на выпрямитель с полосой пропускания ФНЧ порядка Fв-Fн.
3) мерим частоту или период сигнала частотомером.

Естественно, пункты 1-3 можно реализовать программно.

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

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 03.05.2004 (Пн) 15:47

Всем спасибо!
Оказывается, решением моей задачи занимается такой раздел математики, как гармонический анализ. В "Справочнике по математике для инженеров и студентов ВТУЗов" Бронштейна имеется исчерпывающая статья по данному поводу в разделе о рядах Фурье, которой я и воспользовался. Если кого-нибудь заинтересует решение, пишите в ЛС или на мейл.
Листинги не горят!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList