реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> передискретизация, как?
TigerSHARC
сообщение Feb 24 2010, 16:32
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Уважаемый, leksa, если вы поняли суть алгоритма - поделитесь пожалуйста соображениями.

Я именно это и пытаюсь сделать. Только у меня, в приведённом выше коде, происходит как бы вырезание одного периода из временного окна. В результате во временном окне остаётся "не тронутой" небольшая область. Эта область тем больше, чем больше частота сигнала (максимальная когда f = 57.5).
А это недопустимо, так как по госту паузы между временными окнами недопускаются....

Вобщем тробный ресемплер (в частности фарроу) должен привести к тому, что окно наблюдения будет менять свою длительность в зависимости от частоты основной гармоники.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 24 2010, 16:36
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Уважаемый, leksa, если вы поняли суть алгоритма - поделитесь пожалуйста соображениями.

Я именно это и пытаюсь сделать. Только у меня, в приведённом выше коде, происходит как бы вырезание одного периода из временного окна. В результате во временном окне остаётся "не тронутой" небольшая область. Эта область тем больше, чем больше частота сигнала (максимальная когда f = 57.5).
А это недопустимо, так как по госту паузы между временными окнами недопускаются....

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

Сообщение отредактировал TigerSHARC - Feb 24 2010, 16:58
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 24 2010, 16:40
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Дык, пауз во времени и не будет. Меняться будет число отсчетов в окне.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 24 2010, 16:58
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(thermit @ Feb 24 2010, 19:40) *
Дык, пауз во времени и не будет. Меняться будет число отсчетов в окне.


уменя выходит, что например в исходном сигнале за периодом основной частоты наблюдается сильный всплеск. если в овно умещается ровно период и ещё кусок этого всплеска, то после интерполяции получаю просто период, а о всплеске за периодом информация теряется...
И число отсчётов в окне изначально у меня фиксированно а после ресемплинга всегда равно 128 (но соответсвенно для разной частоты дискретизации).... Вобщем получается что после ресемплинга вырезаю просто период.
Довольно трудно объяснить такие вещи, но думаю у меня получилось)

расскажите в чём неправ...
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 24 2010, 18:22
Сообщение #35


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Вобщем, прошу подсказать как сделать адаптивное временное окно на основе передискретизации сигнала.
(формулировка по-моему правильна)
Причём берём каждый раз постоянное число отсчётов с АЦП.

Сообщение отредактировал TigerSHARC - Feb 24 2010, 18:24
Go to the top of the page
 
+Quote Post
leksa
сообщение Feb 24 2010, 20:25
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 20-09-08
Пользователь №: 40 352



TigerSHARC
Извините, но мне все-таки не до конца ясны все условия вашей задачи, да и потом предлагать какие-то конкретные решения - их нужно проверять на практике применительно к вашей задаче, то есть сделать, а это время.
Но все же, вот какие моменты мне до сих пор не ясны -
1) Какой интервал наблюдения, за который вы должны получить оценку уровня сигнала?
2) Требуется оценить уровень первой гармоники, или еще какие-то параметры?
3) Какой период обновления полученных оценок? То есть через какой интервал времени нужно обновлять полученные оценки?
Если интервал наблюдения - это один период первой гармоники, то может быть делать так:
Предположим на вход алгоритма поступают отсчеты с частотой дискретизации 6400 Гц.
Алгоритм отслеживает переходы во входном сигнале через ноль, причем при переходе от отрицательного уровня к положительному, запускается накопление сигнала в некий буфер.
При следующем переходе через ноль от отрицательного уровня к положительному, накопление в буфер заканчивается.
На этот момент у вас в буфере 1 период синуса.
По числу накопленных отсчетов можно оценить частоту первой гармоники, правда довольно грубо так как погрешность оценки периода у вас +/- 1 отсчет. Может быть, оценку можно улучшить, если момент перехода через ноль уточнять линейной интерполяцией.
То есть у вас один отсчет был ниже нуля, следующий выше. Так как их уровни вам известны, то можно построить уравнение прямой линии через эти два отсчета и определить в какой момент линия пересекает нулевой уровень. Так нужно делать два раза в начале и конце периода. Потом период вычислите как разницу моментов перехода через ноль.
Теперь период сигнала известен. Вычисляем массив времени t=0:T1/N:(T1/N)*(N-1), где T1 - оценка периода первой гармоники, а N - размерность ДПФ, 128 например.
Используя этот массив времени и накопленный в буфере сигнал интерполятором получаем те N отсчетов одного периода, которые вам нужны для вычисления ДПФ, чтобы на интервал ДПФ попал точно 1 период.
По уровню первой гармоники ДПФ получаем искомую оценку уровня сигнала с частотой первой гармоники.
Сбрасываем содержание буфера и начинаем накопление заново, до нового перехода через ноль сигнала по направлению от отрицательных значений к положительным.
В таком варианте, оценка будет обновляться периодически, но не через 128 отсчетов входного сигнала, а через 1 период первой гармоники. Будет гармоника 45 Гц - будет реже обновляться, 52 Гц -чаще.
Данная схема чисто из головы, так что я не претендую на то что это наилучший способ.
Чтобы такое в матлабе набросать требуется время, а его мало.

Да, и при высоком уровне помех/искажений, моменты перехода через ноль будут "дрожать" слишком сильно, то есть оценка периода будет не точной, тогда и оценка уровня первой гармоники будет искажена. Как быстро может меняться частота первой гармоники? Если скажем на доли Гц в минуту, то тогда может быть все-таки накапливать побольше периодов, по переходам через ноль определять частоту первой гармоники. Такая оценка будет менее подвержена влиянию дрожания переходов через ноль.

Сообщение отредактировал leksa - Feb 24 2010, 20:46


--------------------
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away (Antoine de Saint-Exupery)
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 25 2010, 10:53
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Всё теперь стало ясно.
Объясняю суть проблемы. необходимо узнать все гармоники , которые можно полусчить с частотой дискретизации 6400. Гармоники кратны основной частоте (которая меняется от 42.5 до 57.5). Я подаю всего лишь три - такак это просто модель, что бы суть пока уловить.
Дело вот в чём - раньше я полагал, что выборка должна быть фиксирована по количеству отсчётов (жестко 128 например). Теперь понятно что происходит так :
1) Получаем частоту (fосн.), по некоторому алгоритму (давайте договоримся что частота известна с абсолютной точностью, так как частотный алгоритм - это отдельный разговор).
2) затем интерполятор на основе данных о частоте забирает выборку АЦП из кольцевого буфера (о буфере ниже). Причём забирает столько выборок сколько ему надо (в зависимости от частоты сигнала) - если частота изменяется от 42.5 до 57.5, то кол выборок может быть от 111 до 150.
3) Затем интерполятор выдаёт ровно 128 выборок (всегда!) на новой частоте дискретизации равной 128*fосн.
4) по этим выборкам получаем спектр.
_____________________________________

КОЛЬЦЕВОЙ БУФЕР

теперь главный вопрос:

Данные с АЦП поступают в кольцевой буфер. Буфер заполняется постоянно со скоростью, которая зависит от периода дискретизации (в моём случае 1/6400).
Допустим частота сигнала найдена и равна 43Гц. Интерполятору требуется 148 выборок для данного временного окна и он забирает первые 148 выборок из буфера, 149 выборка уже является первой для следующего временного окна, потом частота изменилась и скажем равна 45 Гц, тогда интерполятор берёт по 142 выборки на временное окно и так далее...
Кольцевой буфер должен быть такого размера что бы хранит предысторию сигнала за некоторое время и должен выдавать её при запросе.
Буфер заполняется постоянно и циклически. так вот проблема в том что скорее всего буфер заполняется быстрее, чем выборки извлекаются из него. Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)...

как этого избежать при работе с кольцевым буфером.
Go to the top of the page
 
+Quote Post
Andron_
сообщение Feb 25 2010, 11:52
Сообщение #38


.NET developer
***

Группа: Свой
Сообщений: 218
Регистрация: 20-10-07
Из: Новосибирск
Пользователь №: 31 532



Цитата
Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)...

как этого избежать при работе с кольцевым буфером.


взять кольцевой буфер бесконечного размера, применив бесконечное число микросхем памяти.
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 25 2010, 12:09
Сообщение #39


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
TigerSHARC:
уфер заполняется постоянно и циклически. так вот проблема в том что скорее всего буфер заполняется быстрее, чем выборки извлекаются из него. Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)...

как этого избежать при работе с кольцевым буфером.


Вопрос из области "как сделать так, чтоб 2*2 равнялось бы 5?"
Ответ очевиден - никак.

Чтобы буфер не переполнялся нужно забирать данные из него с той же средней скоростью, с которой они в буфер кладутся. Храните тада передискретизированные данные...
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 25 2010, 12:39
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



... а если делать так:
брать данные из буфера и выполнять вычисления с ними тогда когда в буфере накопились данные... дело в том что процессор успевает вычислить БПФ.
Получается так:
интерполятор запросил выборку (от 120 до 150 отсчётов), выполнилось БПФ, а пока выполнялось - копилась новая выборка, затем опять запрос выборки (от 120 до 150 отсчётов), и снова БПФ, и снова копиться выборка пока делаем БПФ...
Можно ли так сделать, если выборка берётся не фиксированной длинной (от 120 до 150 отсчётов)...?

Да это относиться не только к моему случаю... как вообще делается БПФ в реальном времени, там же тоже кольцевой буфер... и как там решена проблема с кольцевиком?

Сообщение отредактировал TigerSHARC - Feb 25 2010, 12:42
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 25 2010, 12:47
Сообщение #41


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Если ориетироваться на число отсчетов связанное с частотой 1-й гармоники - то никаких проблем не будет.
Советую почитать что-нибудь про системы автоматической подстройки частоты. Именно она у Вас и получается.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 25 2010, 12:54
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(thermit @ Feb 25 2010, 15:47) *
Если ориетироваться на число отсчетов связанное с частотой 1-й гармоники - то никаких проблем не будет.
Советую почитать что-нибудь про системы автоматической подстройки частоты. Именно она у Вас и получается.


Если бы можно было ФАПЧ использовать аппаратно... то проблем бы не было...
А тут так альтернатива - программная подстройка...

Короче надо как то проблему с циклическим буфером решить... и непонятно причем тут 1-я гармоника (выборка есть выборка) берём от 120 до 150 отсчётов в зависимости от обстоятельств(хоть там 50 гармоник).

Может так: БПФ успевает выполниться, скажем к тому времени пришло 90 отсчётов след. окна. Тогда ждём пока не будет нужного количесвта выборок, которые "запрашивает" интерполятор. Выборка пришла - опять БПФ... итак по кругу...
не выйдет так?

Причём "окна " не должны перекрываться. Каждая выборка участвует в БПФ только со своей группой выборок (это так для справки)

Сообщение отредактировал TigerSHARC - Feb 25 2010, 12:55
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 25 2010, 12:59
Сообщение #43


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
Тогда ждём пока не будет нужного количесвта выборок, которые "запрашивает" интерполятор. Выборка пришла - опять БПФ... итак по кругу...
не выйдет так?


Выйдет.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 25 2010, 19:17
Сообщение #44


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Подведём итог в теме.
Предисркретизация осужествляется дробным интерполятором. Который в свою очередь "решает" какое количество выборок с АЦП взять, в зависимости от частоты основной гармоники. Далее производиться БПФ сигнала.
При этом выборки с АЦП циклически заносятся в кольцевой буфер, корректная работа которого возможна в том случае, если БПФ успеет выполнится до прихода новой выборки (при этом исключается эффект когда новая выборка может когда-то записаться в "рабочую" область).

Если всё верно - всем спасибо.

________________________________

а как ещё кроме кольцевого буфера можно решить эту проблему?

Сообщение отредактировал TigerSHARC - Feb 25 2010, 19:31
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Feb 26 2010, 15:37
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



1. Время обработки всегда примерно одинаково, т.к. функции ресемплинга в любом случае надо сформировать 128 точек, выполнив 128*M математических операций (M - число математических операций на формирование одной выходной точки).
2. Время выполнения БПФ одинаково всегда
3. Если пропуски в наблюдении недопустимы, то суммарное время п.1 и п.2 не должно превышать время набора исходных данных для максимальной частоты основной гармоники, т.е. не должно быть больше, чем время набора 111 точек на частоте 6400
4. Если п.3 выполняется, то глубина буфера не должна быть меньше, чем число точек на минимальной частоте основной гармоники (150 точек) + число точек на максимальной частоте (111 точек), тогда пока выполняется обработка набранного окна, новые данные не затрут его.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 12:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016