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

минимизация погрешности

Здесь конкретно 50 Гц и фазовый шум - нестабильность турбогенератора - минимальный.

Сигнал до того сильный, что к нему помехи не прилипают, кроме как гармоники от нелинейностей.

Ну разве что там сварка, станки, лифты...

Если делать чистый скользящий ДПФ - то на выходе реальная и мнимая части - имеются натурально.

Скользящий ДПФ - та же узкополосная фильтрация, чем длиннее ДПФ - тем уже полоса.

А измерение 3-х гармоник в соседних ДПФ-каналах - это только для оценки амплитуды.

Опыт показывает, что такая оценка даже лучше, чем промышленным вольтметром переменного напряжения.

 

абсолютно верно! Чем длине ДПФ тем уже полоса и точнее оценка. Но изначально люди хотят на 20 мс получить оценку частоты с высокой точностью в интервале 45-55 Гц.

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


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

Если делать чистый скользящий ДПФ - то на выходе реальная и мнимая части - имеются натурально.

 

Это, очевидно, не то.

Действительная синусоида - это не одна спектральная линия, а пара. Причём, если они достаточно близко к нулевой частоте, то они начнут "сливаться" и рассматриваемые выше методы интерполяции работать не будут. А мы говорим о ПРЕДЕЛЬНО ТОЧНЫХ оценках, а не о каких попало.

 

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

 

 

Скользящий ДПФ - та же узкополосная фильтрация, чем длиннее ДПФ - тем уже полоса.

А измерение 3-х гармоник в соседних ДПФ-каналах - это только для оценки амплитуды.

Опыт показывает, что такая оценка даже лучше, чем промышленным вольтметром переменного напряжения.

 

Это не имеет отношения к делу. Мы обычно ищем максимально точную оценку частоты при возможно более коротком ДПФ

 

Дальше логика такая -

 

1. у нас есть алгоритмы для оценки частоты комплексной экспоненты, имеющие уже предельную точность

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

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

частота сигнала всё таки не изменяется широко

Real_Freq_est.zip

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


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

Это тоже не совсем правильно. Добавляя нулей вы не вносите никакой дополнительной информации, поэтому вы не можете рассчитывать на увеличение точности оценки частоты. При этом если вы имеете идеальную синусоиду, то такой подход вполне оправдан, но если частота меняется, то никакая интерполяция не поможет. Только увеличение времени анализа

Добавляя нули мы доводим интерполяцию до нужной нам точности. Используем только ту информацию, что у нас имеется. Не добавляем, но и не убиваем. Нам нужна только первая гармоника, вот мы и строим фильтр после добавления нулей на нее только. Остальные выборки улучшат отношение сигнал / шум. Можно фильтровать, применив свертку, а можно сделать аналогичную операцию с помощью FFT - это не изменит результата. Больше информации, чем есть в выборке конкретной длины, естественно, не добыть, но использовать можно всю, или почти всю.

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

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

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


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

принцип неопределенности справедлив для всех процессов в известной нам вселенной.

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

 

Попробую вам пояснить вашу проблему. Вы хотите померить частоту сигнала. Вы предполагаете что сигнал это одна синусоида, т.е. ее частота не меняется. Исходя из этого вы строите алгоритм и пытаетесь найти одну частоту, потому что считаете что она не меняется.

 

Совершенно верно, использовать математику можно только в рамках абстрактной математической модели. У любой модели есть ограничения. Чем проще модель - тем легче с ней работать....

 

Действительная синусоида - это не одна спектральная линия, а пара. Причём, если они достаточно близко к нулевой частоте, то они начнут "сливаться" и рассматриваемые выше методы интерполяции работать не будут. А мы говорим о ПРЕДЕЛЬНО ТОЧНЫХ оценках, а не о каких попало.

 

Мне кажется в статье "Optimum Windows for Carrier Frequency Estimation," http://lcs.syr.edu/faculty/sarkar/1983.html механизм влияния отрицательных частот изложен более понятно чем в прилепленной статье (см. параграф 'noiseless case' и fig.3). Наверное товарищи So и Chan эту статью не читали, иначе не стали бы занижать эффективность периодограммы, используя прямоугольное окно...

 

 

Типичная ошибка. По двум отсчётам (АЦП) невозможно (гарантированно) определить ни амплитуду, ни фазу, ни разность фаз самого наидеального синуса. Есть конечно предельный случай с вероятностью 0, когда эти два отсчёта совпадут с экстремумами синуса, но на это глупо уповать.

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

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


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

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

 

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

Т е если функция локализована во времени (дельта-функция), то спектр ее будет неограничен по частоте. И наоборот - локализация в частотной области даст неограниченный во времени сигнал.

Посчитать частоту гармонического дискретного вещественного сигнала x(n) без шумов c неизвестной амлитудой и фазой - не проблема. Достаточно 3-х последовательных отсчетов :

 

f=0.5*real( acos( (x(n)+x(n+2) )/(2*x(n+1))) )*Fd/pi

 

 

Проблема появляется при появлении шумов и помех.

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


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

Мне кажется в статье "Optimum Windows for Carrier Frequency Estimation," http://lcs.syr.edu/faculty/sarkar/1983.html механизм влияния отрицательных частот изложен более понятно чем в прилепленной статье (см. параграф 'noiseless case' и fig.3). Наверное товарищи So и Chan эту статью не читали, иначе не стали бы занижать эффективность периодограммы, используя прямоугольное окно...

 

Странный Вы человек, противоречивый.

So&Chan не пользуясь не нужными окнами и не читая ненужных статей вышли на теоретически предельно возможные по эффектиивности оценки частоты. Сама по себе периодограмма (без интерполяции) такую точность никогда не даст, какие окна не прикручивай. Ошибка будет оставаться порядка бина DFT. Окна всего лишь дают компромисс между шириной центрального лепества и боковиками.

 

А Вы говорите "занижать". Они не могли бы получить более точных оценок, чем по Крамеру-Рао, если бы даже на пупе извертелись ))

Хотя, конечно, могут быть разные подходы к интерполяции. И некоторые могут оказаться проще при реализации.

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


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

Странные какие-то споры.

Сигнал 50 Гц - это, в общем-то, стационарный сигнал, по крайней мере, на участке несколько минут.

Выбрать его период, пусть даже приблизителдьно, повторить сколько надо раз и анализируй вдоль и впоперек с какой хочешь точностью через ДПФ, БПФ с учетом его эргодичности.

Если период неизвестен, можно корреляцию посчитать с частотой дискретизации герц 500-2000.

Затем можно найти спектр по методу авторегрессии - как у Марпла написано.

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


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

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

Сейчас там сравниваются метод поиска максимума периодограммы, несколько интерполяторов, и еще два алгоритма параметрических оценок, кстати из другой статьи того же So (параметрические естественно не будут работать если вход не соответствует модели 1 тон + шум).

Тест заключается в генерации тестового тона с заданными параметрами и с добавлением шума, затем частота тона оценивается алгоритмом и сравнивается с известной. Тест выполняется многократно для случайно изменяющейся частоты (в пределах 1-го бина) и начальной фазы, после усреднения получается оценка среднеквадратичной ошибки оценки частоты для заданного SNR. Такой тест выполняется для SNR от -6 до +inf dB, с использованием прямоугольного и других окон.

 

 

 

freq_est.zip

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


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

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

Здесь таких нет. Поэтому кол-во скачиваний должно остаться равно нулю :)

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


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

Есть сигнал. Частота основной гармоники 50 гц.

Используется алгоритм ДПФ. При смещении частоты на 1-5 Гц. Появляется дополнительная погрешность по модулю ДПФ. Оконное сглаживание не годится.

частота дискретизации 1200гц задана жёстко и не меняется, выборок строго 24 за период.

Слышал про алгоритм интерполяции, но так ничего конкретного не нашёл.

Может кто сталкивался или известен источник.????

Необходимо минимизировать погрешность БПФ при смещении частоты сигнала при постоянной частоте дискретизации.

 

Вы забыли написать про время измерения. 24 точки на период, а сколько всего точек?

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


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

Вы забыли написать про время измерения. 24 точки на период, а сколько всего точек?

 

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

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


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

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

 

Пытаться измерять частоту по одному периоду - это очень плохо. Тем более при помощи БПФ на 24 точки. Гармоники близко, они будут мешать интерполировать спектр.

 

Ну а хоть про то, что БПФ на 24 точки - это уже не Кули-Тьюки, а немного более сложная структура быстрого алгоритма, Вы в курсе?

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


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

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

А зачем в таком случае БПФ?

Тут наверное что-то следящее больше подходит, типа цифровой ФАПЧ.

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


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

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

Дык ведь, если доступен поток данных непрерывный. то и делаем интерполяционный фильтр с какой надо точностью (то есть, с необходимым нам увеличением частоты отсчетов, а потом анализируем. Проблем то нет. Лучше, все равно, не получится. Самое прямое и понятное решение. После интерполяции размер БПФ увеличенный берем, опять, такой какой нам нужен для точности.

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

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


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

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

 

Если надо получить оценку амплитуды каждые 20 мс делайте с перекрытием. Например БПФ на 64 точки, которое каждый раз сдвигается на 24 точки, т.е. постоянное перекрытие интервалов обработки. Таким образом длина БПФ отвязана от одного периода и можно делать весовое сглаживание для высокой точности амплитуды. Вот матлаб пример:

clear all; clc;
fs = 1200;  %частота дискретизации
N = 1000;   % обработка в течении 1000 отсчетов
L = 64;     % окно анализа 64 отсчета
t = (0:N-1)/fs; %время
K = 24; %смещаем окно анализа на 24 отсчета
X =1;   % начальное смещение
i =1;   % номер итерации
f = 50+(rand(1,1)-0.5*10); %случайная частота 50+-5 Гц

% сигнал с небольшим гулянием амплитуды
s0 = 1.4*sin(2*pi*f*t).*(1+0.5*cos(0.5*pi*t+rand(1,1)*2*pi));
%цикл анализа
while((X+L)<N) % пока есть отсчеты для анализа
   
    s = s0(X:X+L-1);    %выбираю превое окно длины L = 64 отсчета
    w = window(@flattopwin ,L)'; % максимально плоское весовое окно чтобы получить максимально-точную оценку амплитуды
    S = abs(fft(s.*w))/(sum(w)); % БПФ   
    A(i) = max(S);  % амплитуда в данном окне такая вот
    T(i) = (X+L/2)/fs; %первое окно с задержкой 64 отсчета
    i =i+1; % инкремент номера цикла анализа
    X=X+K;% смещаю окно на 20 мс теперь будет без задержек
end;
plot(t,s0,T,A*2,'r.-'),grid; % синим сигнал, красным его амплитуда. точки оценки амплитуды идут через 20 мс.

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


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

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

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

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

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

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

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

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

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

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