Перейти к содержанию
    

Точно измерить частоту.

Имеем на выходе датчика синусоиду примерно 2кГц в течении 0.5 сек. , т.е. цуг из примерно 1000 периодов. В зависимости от физ. величины частота меняется на +-10% Считается, что во время цуга частота не меняется. Надо определить частоту с точностью хотя бы до 0.01Гц. На данный момент метод используетсяпрямое измерение периода каждого колебания с дальнейшей статистической обработкой. При существующем уровне помех, наводок и т.д. точность получается не лучше 0.1Гц. Вопрос: как методами ЦОС уточнить результат измерения? Это вообще возможно теоретически? Сразу должен оговориться, что я о цифровой обработке имею весьма общие представления и никакой практики. Мне в голову приходит только свертка с синусоидами от (f0 – 0.1Гц) до ( f0 + 0.1Гц) с шагом 0.01Гц (f0-приблицительно измеренная частота) и поиском "резонанса". Может быть можно как по другому, попроще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имеем на выходе датчика синусоиду примерно 2кГц в течении 0.5 сек. , т.е. цуг из примерно 1000 периодов...Может быть можно как по другому, попроще?

 

У Вас есть все необходимое для такого измерения (Tизмх примерно 0.5 сек и вполне приемлемая частота Fx входного сигнала). Далее, предположим, у Вас есть опорная, точно известная частота Fo=1/To.

Если Tизмх=Тх*Nx ( Nx- отсчитываемое счетчиком1 периоды измеряемой частоты), Tизмo=To*nxo ( nxo- отсчитываемое счетчиком2 периоды опорной частоты за время прохождения Nx периодов) и, обеспечив условие Tизмх=Tизмo, получаем после несложного преобразования Fx=Fo*Nx/nxo.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Существует теоретический предел точности измерения частоты по максимуму правдоподобия - предел Крамера-Рао (CRLB).

var(W) = 6/(N*(N-1)*(N-1)*(Es/No))

W=2*pi*f - частота, pi- это пи, N- длина блока данных, Es/No-отношение сигнал/шум

В принципе, если сигнал/шум стремится к бесконечности точность может быть как угодно хорошей.

Существуют и алгоритмы приближающие эту оценку.

В частности, могут измеряться отсчёты DFT вблизи области интереса, находится максимум спектра и по трём точкам вблизи максимума строится парабола - аналитическое положение вершины параболы принимается за оценку частоты

Здесь есть матлабовские модели

http://home.comcast.net/~kootsoop/EricJ2/index.htm

и здесь

http://home.comcast.net/~kootsoop/freqalgs.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по тому, что вы производите статистическую обработку каждого периода, они у вас разные получаются. Значит сигнал-то не чистая синусойда, а имеет фазовые шумы. Боюсь что 1000 периодов для требуемой точности будет недостаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Существует теоретический предел точности измерения частоты по максимуму правдоподобия - предел Крамера-Рао (CRLB).

var(W) = 6/(N*(N-1)*(N-1)*(Es/No))

W=2*pi*f - частота, pi- это пи, N- длина блока данных, Es/No-отношение сигнал/шум

В принципе, если сигнал/шум стремится к бесконечности точность может быть как угодно хорошей.

Существуют и алгоритмы приближающие эту оценку.

В частности, могут измеряться отсчёты DFT вблизи области интереса, находится максимум спектра и по трём точкам вблизи максимума строится парабола - аналитическое положение вершины параболы принимается за оценку частоты

Здесь есть матлабовские модели

http://home.comcast.net/~kootsoop/EricJ2/index.htm

и здесь

http://home.comcast.net/~kootsoop/freqalgs.htm

 

А каковы требования к длине выборки при оценке частоты сигнала путём оценки максимума спектра?

Как я понимаю чем выборка больше тем лучше?

 

Но вот скажем сигнал: синус частотой 40...60Гц. Требуемая точность =>0,01Гц.

Частота дискретизации 6400 (для примера примеру).

 

для fontp: какова должна быть длина выборки, что бы Macleods estimtor дал результат с требуемой точностью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А каковы требования к длине выборки при оценке частоты сигнала путём оценки максимума спектра?

Как я понимаю чем выборка больше тем лучше?

 

Но вот скажем сигнал: синус частотой 40...60Гц. Требуемая точность =>0,01Гц.

Частота дискретизации 6400 (для примера примеру).

 

для fontp: какова должна быть длина выборки, что бы Macleods estimtor дал результат с требуемой точностью?

 

Чем больше выборка, естественно тем лучше. Спектральное разрешение всегда на сложных спектрах у нас

определяется критерием Релея df*T порядка 1. Но на простых сингулярных спектрах - когда спектральный пик 1, или даже несколько, но расположеных далеко, точность измерения частоты может быть значительно выше и определяется приведеным выше статистическим критерием Крамера-Рао. Он определяет теоретический предел для измерения параметров в присутствии шума. Для такого параметра как частота я его привёл, в нормированых единицах. Все стремятся добиться чего-то похожего на этот критерий.

 

При возрастании отношения сигнал/шум к бесконечности предельная точность может быть как угодно высокой при любой длине блока. Это по теории. А практические методы могут отличаться в трех отношениях

 

1. При очень низком SNR не работают никакие методы. Поэтому можно говорить о пороговом снизу значении SNR когда отказывает метод. Понятно, что для каждого метода этот параметр разный.

2. Энергетические потери в рабочем диапазоне. Хорошие методы в этой промежуточной области SNR все дают меньше 1 дб потерь. Или наоборот приличный метод по порядку с точностью до десятков процентов ложится на CRLB

Иначе их не публикуют в научных журналах.

3. Систематические ошибки при достаточно высоких SNR. При высоких SNR кривая CRLB уходит сама по себе, а точность реального метода становится постоянной и более от SNR не зависит.

Если не делать никакой интерполяции - то эта систематическая ошибка плохая и равна примерно половине размера бина преобразования. Если не добавлять нулей, то метод Маклеода - лучший среди известных. Умелым добавлением нулей можно добиться и более хороших результатов. Но это затратно вычислительно

 

Давайте посчитаем пример

 

Стандартное отклонение df/Fs = sqrt(6/((2*pi)**2*N*N*N*SNR))

0.01/6400 = примерно sqrt(1/6.6*N*N*N*SNR)

 

Если SNR=100

N**1.5 = 25000, N ~ 800

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чем больше выборка, естественно тем лучше. Спектральное разрешение всегда на сложных спектрах у нас

определяется критерием Релея df*T порядка 1. Но на простых сингулярных спектрах - когда спектральный пик 1, или даже несколько, но расположеных далеко, точность измерения частоты значительно выше и определяется приведённым статистическим критерием Крамера-Рао. Он определяет теоретический предел для измерения параметров в присутствии шума. Для такого параметра как частота я его привёл, в нормированых единицах. Все стремятся добиться чего-то похожего на этот критерий.

 

При возрастании отношения сигнал/шум к бесконечности предельная точность может быть как угодно высокой при любой длине блока. Это по теории. А практические методы могут отличаться в трех отношениях

 

1. При очень низком SNR не работают никакие методы. Поэтому можно говорить о пороговом снизу значении SNR когда отказывает метод. Понятно, что для каждого метода этот параметр разный.

2. Энергетические потери в рабочем диапазоне. Хорошие методы в этой промежуточной области SNR все дают меньше 1 дб потерь. Или наоборот приличный метод по порядку с точностью до десятков процентов ложится на CRLB

3. Систематические ошибки при достаточно высоких SNR

 

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

 

Спасибо.

Да, ссылки на оценщики больше не работают. Может выложите статью из журнала...?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

Да, ссылки на оценщики больше не работают. Может выложите статью из журнала...?

 

 

так она выложена в другой, новой теме, недавно, вместе с другими

http://electronix.ru/forum/index.php?showt...mp;#entry695667

 

Ссылку на исчерпывающий систематический подход к квадратичной интерполяции спектра с дополнением сигнала нулями я тоже давал

https://ccrma.stanford.edu/STANM/stanm/node3.html

Документы от STANM-114 до STANM-118

Там есть всё - от использования окон и борьбы со смещением до влияния нестабильности параметров и модуляции

"... Это все, что я могу сказать про войну во Вьетнаме"© :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как насчёт способа когда определяем две опорные точки (максимумы или переходы через ноль), далее интерполируем в окрестностях этих точек (что бы уточнить положение) и по ним определяем частоту.

Этот способ может дать выигрыш в скорости? (по сравнению с алгоритмом по максимуму БПФ)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как насчёт способа когда определяем две опорные точки (максимумы или переходы через ноль), далее интерполируем в окрестностях этих точек (что бы уточнить положение) и по ним определяем частоту.

Этот способ может дать выигрыш в скорости? (по сравнению с алгоритмом по максимуму БПФ)

 

Это всё может работать только когда практически отсутствует шум. Это же дифференцирование сигнала.

Причём двойное - один раз сигнала для определения точки пересечения с нулём, а второй раз разность во времени делта-Т для определения периода.

Здесь на форуме приводились же работы китайцев по численному дифференцированию сетевого напряжения.

У них там очень хорошие результаты, когда шума нет.

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

Какая-то недостоверная статистически китайская ерунда.

С шумом китайцы не разобрались, про шум им, видимо, не читали, бакалаврам

При средних и сильных шумах обычно используется ДПФ

 

Есть ещё подходы с параметрическим моделированием спектра.

В книге Марпла (неоднократно здесь цитировавшейся) описаны все эти методы, но они в сильных шумах тоже не очень работают. Только при среднем и слабом шуме.

 

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

Но всегда нужно стремиться в качестве ориентира к CRLB, поскольку эта предельная оценка максимального правдоподобия от метода не зависит. Хотя, конечно, если шума нет, то этот критерий не играет и всё определяется только систематической погрешностью метода - тогда ДПФ лучше не использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имеем на выходе датчика синусоиду примерно 2кГц в течении 0.5 сек. , т.е. цуг из примерно 1000 периодов. В зависимости от физ. величины частота меняется на +-10% Считается, что во время цуга частота не меняется. Надо определить частоту с точностью хотя бы до 0.01Гц. На данный момент метод используетсяпрямое измерение периода каждого колебания с дальнейшей статистической обработкой. При существующем уровне помех, наводок и т.д. точность получается не лучше 0.1Гц. Вопрос: как методами ЦОС уточнить результат измерения? Это вообще возможно теоретически? Сразу должен оговориться, что я о цифровой обработке имею весьма общие представления и никакой практики. Мне в голову приходит только свертка с синусоидами от (f0 – 0.1Гц) до ( f0 + 0.1Гц) с шагом 0.01Гц (f0-приблицительно измеренная частота) и поиском "резонанса". Может быть можно как по другому, попроще?

 

Если частота меняется на +/- 10%, то разбейте ваш сигнал на куски по 20 периодов. Далее, для каждого такого куска сосчитайте скалярное произведение первой половины на вторую его половину. Возьмите аргумент получившегося комплексного числа и поделите его на количество сэмплов в половине куска. Вы получите набег фазы на сэмпл. Сосчитайте эту величину для каждого куска и усредните. Поделите на 2*pi и умножьте на частоту дискретизации. Вы получите значение частоты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если частота меняется на +/- 10%, то разбейте ваш сигнал на куски по 20 периодов. Далее, для каждого такого куска сосчитайте скалярное произведение первой половины на вторую его половину. Возьмите аргумент получившегося комплексного числа и поделите его на количество сэмплов в половине куска. Вы получите набег фазы на сэмпл. Сосчитайте эту величину для каждого куска и усредните. Поделите на 2*pi и умножьте на частоту дискретизации. Вы получите значение частоты.

 

Это тоже приемлемый метод. Delay-Multiply-Add (DMA). Но он при заданной длине блока в области низких и средних уровней шума даёт немного меньшую (но соизмеримую) точность чем интерполяция спектра Фурье. При высоком отношении SNR может быть даже предпочтительней по точности, хотя никогда не выходит на предельный уровень CRLB. Вычислительно проще спектральных оценок, но требует вычисления арктангенса.

Подробно описан например в атачменте применительно к модемостроению

 

Существует модификация метода, позволяющая измерять таким способом частоту в любом широком диапазоне.

"Энергетические потери" по отношению к CRLB не превышают 0.5 дб при SNR>1, правда они на последнем этапе дополнили метод таки квадратичной интерполяцией спектра вблизи получившегося значения частоты (это так называемое ML-extension можно навесить в принципе на любой измеритель частоты).

Я приводил когда-то статью по этому Delay-Multiply-Add-Rotate-Add-Decimate(DMA-RAD). Смысл в том, что чем больше сдвиг в вычисляемых корреляциях, тем выше точность, но меньше диапазон измерения. Вот и проводятся вычисления итеративно начиная от малых задержек в корреляции к большим, убирая сначала большие смещения частоты, измеренные с меньшей точностью и последовательно уточняя оценку в меньшем диапазоне

 

http://electronix.ru/forum/index.php?act=A...st&id=20411

Fcarrierrecovery.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю, что это всё рекомендации для общего случая.

 

А у меня сигнал известен - синусоида сетевой частоты (42.5... 57.5Гц). Синусоида может содержать гаромники кратные 5Гц. Амплитуда гармоник не превышает 10% от основной.

Погрешность вычисления частоты должна быть >0,01Гц.

Алгоритм тестируется с гауссовым шумом при ОСШ >40дБ.

 

А если отфильтровать сигнал полосовиком! Диапазон частоты ведь известен. Скажем полосовой БИХ-фильтр на частоту 40-70 Гц. Тогда же можно будет мерять частоту по двум опорным точкам (если нтерполировать вблизи них). Да! Частота должна ещё усредняться по нескольким десяткам периодов.

 

P.S. Просто здаётся мне: что БПФ, что автокореляция - это много процессорного времени.

Изменено пользователем TigerSHARC

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вариант такой есть. Умножить на комплексную экспоненту и взять фазу. Угол наклона фазы покажет разность частоты синусоиды и частоты комплексной экспоненты. соответсвенно df = dPhi/dT. Таким образом увеличивая интервал обработки вы получите сколь угодно высокую точность. Такую обработка лучше чем просто бпф.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вариант такой есть. Умножить на комплексную экспоненту и взять фазу. Угол наклона фазы покажет разность частоты синусоиды и частоты комплексной экспоненты. соответсвенно df = dPhi/dT. Таким образом увеличивая интервал обработки вы получите сколь угодно высокую точность. Такую обработка лучше чем просто бпф.

 

Увеличивая интервал обработки можно получить как-угодную точность каким-угодно методом. В этих задачах

оптимальность означает - как быстро растёт точность при увеличении интервала. Оптимальность это не только научные понты для ученых. Мы не можем реально значительно увеличивать интервал измерения, только в пределах стабильности самих параметров сигнала (амплитуды, частоты)

 

Такая обработка ничем не лучше спектрального оценивания, хотя по определению должна давать точность по максимуму правдоподобия (CRLB), если честно подогнать минимум квадратов. Только вычислительно это даже сложнее, ибо Вы должны

1. Умножить на центральную комплексную экспоненту (снести сигнал в 0) и отфильтровать ФНЧ.

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

3. Подогнать линейную регрессию Ф=at+B, a - частота

Вычислительно это будет скорее сложнее чем спектральное оценивание, а не проще, даже с применением CORDIC для арктангенса. (Не говоря уже о том, что это будет работать только при достаточно высоком SNR)

 

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

 

1. Умножить на центральную комплексную экспоненту (снести сигнал в 0) и отфильтровать ФНЧ. Соответственно прорежение.

2. Взять 5-7 сумм типа ДПФ в интервале [-7.5, 7.5]. Оценка энергии

3. Найти максимум энергии и по трём точкам построить параболу. Аргумент максимума - частота

 

Точность будет примерно такая-же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...