Небольшая авантюра :)
Dec. 6th, 2008 01:33 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
И до чего же мне остопи... осточертели разнообразные глюки виндового контрола ListView. В один прекрасный день я осознал, что на периодический отлов и исправление подобных глюков было потрачено много дней. Ну и решился я на такую авантюру: написать этот класс "ручками", так сказать, под себя. Пока получается. Позавчера сделал отображение и скроллинг, вчера - множественный выбор и перетаскивание/растягивание заголовков. Как там говорится в одной программистской поговорке: никогда не находится время, чтобы сделать что-то необходимое, но всегда находится время, чтобы переделать ;)

Это, кстати, к вопросу, как дела с bard-ом. Нормально дела, вовсю идет работа над новой версией.

Это, кстати, к вопросу, как дела с bard-ом. Нормально дела, вовсю идет работа над новой версией.
no subject
Date: 2008-12-06 10:59 am (UTC)no subject
Date: 2008-12-06 11:06 am (UTC)no subject
Date: 2008-12-06 01:41 pm (UTC)no subject
Date: 2008-12-06 06:45 pm (UTC)no subject
Date: 2008-12-06 09:17 pm (UTC)no subject
Date: 2008-12-07 11:14 am (UTC)no subject
Date: 2008-12-07 04:22 pm (UTC)no subject
Date: 2008-12-08 12:06 pm (UTC)no subject
Date: 2008-12-08 12:16 pm (UTC)no subject
Date: 2008-12-08 01:14 pm (UTC)no subject
Date: 2008-12-09 02:05 am (UTC)no subject
Date: 2008-12-09 01:06 pm (UTC)no subject
Date: 2008-12-09 01:09 pm (UTC)no subject
Date: 2008-12-09 03:17 pm (UTC)no subject
Date: 2008-12-09 03:19 pm (UTC)no subject
Date: 2008-12-09 03:23 pm (UTC)no subject
Date: 2008-12-09 03:25 pm (UTC)no subject
Date: 2008-12-09 03:43 pm (UTC)no subject
Date: 2008-12-09 03:47 pm (UTC)no subject
Date: 2008-12-09 03:58 pm (UTC)На тему "привык чужой код читать" вспомнилось с баш.орга: если при чтении чужого кода матерные восклицания звучат не чаще двух раз в минуту, это качественный код :)
no subject
Date: 2008-12-09 04:41 pm (UTC)>кросс-платформенности среди них нет и не будет
Qt — ещё и мощный тулкит, где зиллионы всего уже написаны и отлажены. %-)
алсо, QT — это QuickTime. %-)
>сли при чтении чужого кода матерные восклицания звучат не чаще двух раз в минуту,
>это качественный код :)
обычно если мне надо лезть в чужой код, то суточный запас матов я уже израсходовал. ибо я что, по доброй воле лезу? ежели работает — не трогаю.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Не в тему, сорри
Date: 2008-12-11 10:21 pm (UTC)Итак, имеется непрерывный температурный сигнал от датчика. Этот сигнал абсолютно негармоничен, то бишь колеблется вверх и вниз. В зависимости от условий происходящих процессов сигнал меняет частоту и амплитуду. При падении амплитуды и частоты до определённых значений требуются вмешательство в процесс (действие), которое влияет на процесс и изменяет структуру сигнала в сторону увеличения амплитуды и изменения частоты.
Задача: проанализировать сигнал и составить четкий алгоритм, когда производить действие над процессом.
После долгих рысканий в инете вышел на дискретное быстрое преобразование Фурье. То бишь разделить непериодическую функцию на значения и составить из них функцию (как я понял, но не факт). В экселе есть функция для Фурье трансформации (ФФТ).
Эта трансформация выдаёт комплексные числа, которые состоят из реальной и представляемой компоненты. По длине вектора (по теореме Пифагора) можно судить об амплитуде исходных данных. Почти вся литература в интернете о Фурье преобразовании относится к обработке звука, и там такое преобразование показывает частоту, на которой встречаются определенные амплитуды. Но какая частота у температуры? Сигнал считыватся раз в секунду. И второй, самый главный вопрос, как использовать представляемую компоненту комплексного числа для анализа?
спасибо!
no subject
Date: 2008-12-19 05:49 pm (UTC)Значит, идея ФФТ состоит в том, чтобы представить некое колебание (все равно, какое) в виде суммы синусоид. На входе ФФТ нужно изменение величины во времени с некоторым интервалом. В вашем случае - изменение температуры. Берут некий промежуток времени длиной T, делят его на N фрагментов, записывают значения температуры в N точках на этом интервале T. То есть, делают обычную дискретизацию.
На выходе получится набор из N комплексных величин. Из этого набора надо взять первые N/2 - по определенным причинам остальные не несут полезной информации. В каждой величине зашифрована фаза, амплитуда и частота - отдельно. То есть, у вас получится N/2 разных колебаний, из которых состоит то колебание, которое вы изначально взяли.
Далее, каждое комплексное число надо расшифровать (см. формулу в самом конце страницы по ссылке). Получим для каждого числа одну амплитуду, одну фазу и одну частоту. Фаза обычно не несет полезной информации. Также, если амплитуда маленькая (сравнительно с другими), это комплексное число можно проигнорировать. В результате останется некоторое количество "осмысленных" пар: амплитуда и частота. Это есть так называемые "гармоники". По ним можно судить, из чего состоял исходный сигнал - из каких амплитуд и частот.
Что касается вашей задачи, то там надо смотреть, а правда ли, что ФФТ - подходящий метод для решения задачи? Например, если вам нужна некая амплитуда "в целом", то, возможно, есть смысл посчитать просто средний размах колебаний? А часоты - тут мне неясно, какой практический смысл имеет частота температуры? То есть вот температура возрастает, убывает с некоторой периодичностью, а зачем может быть нужен период этих колебаний? Есть я пойму смысл задачи, возможно, я вам посоветую метод лучше, чем FFT.
http://psi-logic.shadanakar.org/fft/fft7.htm
no subject
Date: 2008-12-24 07:38 am (UTC)Для начала описание проблемы:
измеряется разница температур между двумя близко расположенными термодатчиками. Цель - наблюдать изменение температурного напора независимо от абсолютных значений температур. Сигнал (дельта Т) изменяется со временем в сторону уменьшения амплитуды и возможно частоты (макс амплитуды на определенных частотах пока не получилось отфильтровать). Потом производится дествие в системе и сигнал возвращается на прежний уровень амплитуд (частот?). Сигналы считываются 1 раз в секунду. Анализ проводится из 4096 точек в экселе. После Фурье анализа и построения зависимости "амплитуда (реальная компонента комплексного числа) - частота", получаю 4 пика, но они сильно засорены шумом, так что примерно можно вычислить пики, но математический аппарат надо еще подстроить. Прочитал про Окно Хамминга, но так и не понял как его применять. Как японял, надо разбить 4096 точек на например 128 сегменты, умножить каждый на окно и потом взять Фурье от каждого сегмента. Но не уверен, что именно так. С этим и связаны в данный момент основные вопросы. Окно Хамминга математически уже выразил, это несложно. Предствавляемая компонента комплексного числа вроде бы не несет полезной (в данном случае инфо).
Вот такие дела.
no subject
Date: 2008-12-24 12:26 pm (UTC)То, что получаемый спектр "зашумлен", это нормально, обычно так и получается на реальных сигналах. Связано это с тем, что сигнал может быть суммой всего нескольких колебаний, но БПФ представляет его как сумму "не тех" колебаний. Например, сигнал есть сумма колебаний с периодом в 5,5 и 12,3 секунд, а после БПФ получаются ненулевые результаты для периодов 2, 3, 4, 5, 6,... 20 секунд, но с пиками в районе 5 - 6 и 12 - 13. К сожалению, БПФ не умеет точно угадывать частоты, это ее недостаток.
Хамминг, по идее, увеличивает высокие пики и опускает низкие, отфильтровывает спектрльный шум. Для этого надо умножить ваши 4096 точек на функцию Хамминга перед тем, как делать БПФ.
Разбиение на сегменты нужно, если вы хотите проследить изменение частот во времени. Т.е. если вы хотите посмотреть, не менялась ли частота/амплитуда колебаний за ваш час с небольшим. Тогда вы делите на двухминутные сегменты по 128 отсчетов и смотрите: в первые 2 минуты частота/амплитуда была такие, в следующие 2 минуты - такие, и так далее.
Но вообще-то все это мне кажется излишним. Если вам нужен именно некий "градиент" температуры, то есть, перейти от абсолютных показаний к относительным и от статики к динамике, то частоты вам, извиняюсь, не припеклись, как и преобразовнаие Фурье и окна Хамминга :) Вам нужно просто взять отрезок в 60 отсчетов, посчитать среднее. Потом взять следующий отрезок в 60 отсчетов, посчитать среднее. Потом сравнить результаты либо вычитанием, либо делением. При вычитании получите изменение в абсолютных единицах, при делении - в процентах.