|
|
  |
передискретизация, как? |
|
|
|
Feb 24 2010, 16:58
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(thermit @ Feb 24 2010, 19:40)  Дык, пауз во времени и не будет. Меняться будет число отсчетов в окне. уменя выходит, что например в исходном сигнале за периодом основной частоты наблюдается сильный всплеск. если в овно умещается ровно период и ещё кусок этого всплеска, то после интерполяции получаю просто период, а о всплеске за периодом информация теряется... И число отсчётов в окне изначально у меня фиксированно а после ресемплинга всегда равно 128 (но соответсвенно для разной частоты дискретизации).... Вобщем получается что после ресемплинга вырезаю просто период. Довольно трудно объяснить такие вещи, но думаю у меня получилось) расскажите в чём неправ...
|
|
|
|
|
Feb 24 2010, 20:25
|
Участник

Группа: Участник
Сообщений: 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)
|
|
|
|
|
Feb 25 2010, 10:53
|
Знающий
   
Группа: Свой
Сообщений: 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 выборки на временное окно и так далее... Кольцевой буфер должен быть такого размера что бы хранит предысторию сигнала за некоторое время и должен выдавать её при запросе. Буфер заполняется постоянно и циклически. так вот проблема в том что скорее всего буфер заполняется быстрее, чем выборки извлекаются из него. Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)... как этого избежать при работе с кольцевым буфером.
|
|
|
|
|
Feb 25 2010, 11:52
|
.NET developer
  
Группа: Свой
Сообщений: 218
Регистрация: 20-10-07
Из: Новосибирск
Пользователь №: 31 532

|
Цитата Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)...
как этого избежать при работе с кольцевым буфером. взять кольцевой буфер бесконечного размера, применив бесконечное число микросхем памяти.
|
|
|
|
|
Feb 25 2010, 12:09
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата TigerSHARC: уфер заполняется постоянно и циклически. так вот проблема в том что скорее всего буфер заполняется быстрее, чем выборки извлекаются из него. Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)...
как этого избежать при работе с кольцевым буфером. Вопрос из области "как сделать так, чтоб 2*2 равнялось бы 5?" Ответ очевиден - никак. Чтобы буфер не переполнялся нужно забирать данные из него с той же средней скоростью, с которой они в буфер кладутся. Храните тада передискретизированные данные...
|
|
|
|
|
Feb 25 2010, 12:54
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(thermit @ Feb 25 2010, 15:47)  Если ориетироваться на число отсчетов связанное с частотой 1-й гармоники - то никаких проблем не будет. Советую почитать что-нибудь про системы автоматической подстройки частоты. Именно она у Вас и получается. Если бы можно было ФАПЧ использовать аппаратно... то проблем бы не было... А тут так альтернатива - программная подстройка... Короче надо как то проблему с циклическим буфером решить... и непонятно причем тут 1-я гармоника (выборка есть выборка) берём от 120 до 150 отсчётов в зависимости от обстоятельств(хоть там 50 гармоник). Может так: БПФ успевает выполниться, скажем к тому времени пришло 90 отсчётов след. окна. Тогда ждём пока не будет нужного количесвта выборок, которые "запрашивает" интерполятор. Выборка пришла - опять БПФ... итак по кругу... не выйдет так? Причём "окна " не должны перекрываться. Каждая выборка участвует в БПФ только со своей группой выборок (это так для справки)
Сообщение отредактировал TigerSHARC - Feb 25 2010, 12:55
|
|
|
|
|
Feb 25 2010, 12:59
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

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

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

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