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

 
 
> Оконное взвешивание, алгоритм применения
Zelepuk
сообщение Aug 10 2011, 14:35
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Есть задача: нужно посчитать THD в промышленной сети 50Гц.
THD считается по 10 гармоникам (кратным оновной частоте). Основная частота меняется в пределах 45...55Гц.
Я хочу применить алгоритм:

-оцифровываю сигнал с частотой 4096Гц (это априорная величина задана жёстко),
-затем оконное взвешивание (использую flattopwin в MATLAB - окно с плоской вершиной),
-делаю БПФ на 512 точек (окно в 0,125с.)

Теперь самое интересное, если гармоник 10, то нужно просто найти 10 пиков в спектре и вокруг взять корень квадратный из суммы квадратов окружающих эти пики бинов. Но если частота основной гармоники плавает от 45 до 55 Гц, то получается например для 9-й гармоники бины на которых основная энергия меняются от 52 до 59 (при частоте основной гармоники 45-55Гц), а для 10-й Гармоники основная энергия распределяется на 58-70 бинах (в зависимости от изменения основной гармоники), 11-я гармоника уже бегает с 63 (при 45 гц основной гармоники) до 77 (при 55 гц основной гармоники) бина.

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

laughing.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Signal
сообщение Aug 24 2011, 22:48
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-08-11
Из: Рига, Латвия
Пользователь №: 66 843



Цитата(Zelepuk @ Aug 10 2011, 17:35) *
Есть задача: нужно посчитать THD в промышленной сети 50Гц.
THD считается по 10 гармоникам (кратным оновной частоте). Основная частота меняется в пределах 45...55Гц.

Здесь было предложено уже достаточно грамотных решений на основе преобразования Фурье. Я не буду повторять их. Также не буду говорить про затратные альтернативы типа MUSIC (мне самому стало интересно, как его упростить или построить новый алгоритм для случая кратных гармоник, может получится и не очень затратно). Позволю себе пофантазировать.
В описании сигнала ничего не сказано о шуме. Слукавлю и буду считать его несущественным (он таки может быть несущественным по сравнению с нелинейностью). Тогда достаточно сравнить мощность первой гармоники с мощностью остального сигнала без учета шума. Заметьте, знать точно частоту "основного тона" и мощности каждой гармоники в этом случае не нужно.

Потребуется три фильтра (не считая ФНЧ перед/после АЦП). Первый (простейший рекурсивный без умножителей) вырезает "постоянку" (смещение АЦП), не трогая первую гармонику и выше. Второй может быть вычислительно совмещен с третим (зависит от реализации), основное назначение - разделить сигнал на две полосы: ниже 55 и выше 90 Гц. Как вариант, при независимой реализации ФНЧ/ФВЧ, выход КИХ ФНЧ можно считать сразу децимированным (опять же для экономии). Далее усредняем мощность с выходов двух фильтров и делим. Либо, что экономнее, итеративно находим усреднение отношения двух мощностей без деления. Ценой одного умножения этим же методом можно получить и квадратный корень отношения двух мощностей. Либо, если хочется иметь значения в dB, то вычислить разность двух логарифмов. Возможно, потребуется согласовать задержки фильтров, чтобы скомпенсировать ошибки при изменении амплитуд. Естественно, точность измерения будет зависеть от избирательности фильтров (это верно и при выборе оконной функции при использовании преобразования Фурье), неравномерности в полосе пропускания, длины окна усреднения, точности арифметики. Ну и конечно же от шума, пренебрежение которым было разрешающим для подхода. При непрерывной (поотсчетной) обработке использование рекурсивных фильтров должно быть значительно экономнее по затратам, однако... однако не буду отвлекаться на вопросы реализации рекурсивных фильтров на малобитной арифметике (MCU в сопутствующей теме назван слабым).

Фантазирую дальше. Первый ФВЧ, удаляющий постоянную составляющую, можно совместить с последующим ФНЧ, что открывает возможность для добавления Гильбертовой пары для обоих полос, и от непрерывной обработки можно перейти к блочной. Для неперекрывающихся окон затраты, не считая накладных расходов, окажутся: 4 умножения и 4 сложения на отсчет для фильтров, 4 умножения, 2 сложения и одно деление (или два логарифма) на блок для вычисления мощностей и их отношения. При этом затраты памяти - одна ячейка для текущего отсчета и 4 аккумулятора по одному на каждый фильтр. Если же сначала сохранять в память отсчеты на всю длину фильтров, скажем N, то потребуется 2 умножения вместо 4 на каждый отсчет (за счет симметрии коэффициентов фильтров), но больше накладных расходов на организацию вычислений - сдается мне, экономии не получится, наоборот, зависит от процессора. При равной длине фильтров N, их коэффициенты займут в ROM 2N ячеек.

Как ни странно, в итоге получилось именно оконное взвешивание, как в заголовке темы. Такое взвешивание оказывается достаточно самостоятельным методом, а не только сопутствующим ДПФ. Для тех, кому все-таки странно, могу сказать даже, что это ДПФ сопутствует оконному взвешиванию для более эффективного с точки зрения экономии вычислений (и унифицированного!) формирования требуемых окон. Не имея необходимости во множестве унифицированных окон (часто так и бывает), достаточно сформировать необходимые окна заранее (а не в процессе обработки) и "взвешивать" ими без использования ДПФ. На чем и сэкономить... если получится wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Zelepuk   Оконное взвешивание   Aug 10 2011, 14:35
- - Alexey Lukin   Гармоники в спектре ищутся как локальные максимумы...   Aug 10 2011, 20:32
- - Zelepuk   Я так и хотел делать - разбивать спектр на группы ...   Aug 11 2011, 05:25
|- - bahurin   Вообще надо исходить из того с какой точностью вам...   Aug 11 2011, 08:57
|- - _4afc_   Цитата(Zelepuk @ Aug 11 2011, 09:25) Оста...   Aug 11 2011, 08:59
|- - Alexey Lukin   Цитата(Zelepuk @ Aug 11 2011, 09:25) Я та...   Aug 11 2011, 17:23
|- - bahurin   Цитата(Alexey Lukin @ Aug 11 2011, 21:23)...   Aug 12 2011, 05:16
- - sup-sup   Можно сделать FIR фильтр в частотной области. Для ...   Aug 12 2011, 05:09
- - Zelepuk   Я эспериментирую в CBuilder над FFT и окнами. Нашё...   Aug 12 2011, 09:16
|- - bahurin   Цитата(Zelepuk @ Aug 12 2011, 13:16) Когд...   Aug 12 2011, 10:08
|- - Alexey Lukin   Цитата(Zelepuk @ Aug 12 2011, 13:16) Как ...   Aug 12 2011, 18:35
- - Zelepuk   к сожалению с целыми числами полноценно работать в...   Aug 12 2011, 10:31
|- - bahurin   Цитата(Zelepuk @ Aug 12 2011, 14:31) к со...   Aug 12 2011, 11:06
- - ivan219   Zelepuk а как вы получаете гармоники? Из нулевой г...   Aug 12 2011, 11:18
|- - Zelepuk   Цитата(ivan219 @ Aug 12 2011, 15:18) Zele...   Aug 12 2011, 11:58
|- - bahurin   Цитата(Zelepuk @ Aug 12 2011, 15:58) По в...   Aug 12 2011, 12:52
- - ivan219   Цитата(Zelepuk @ Aug 12 2011, 15:58) всмы...   Aug 12 2011, 13:10
|- - Zelepuk   Цитата(ivan219 @ Aug 12 2011, 17:10) Я но...   Aug 12 2011, 13:29
|- - SPACUM   Цитата(Zelepuk @ Aug 12 2011, 17:29) в ма...   Aug 17 2011, 12:04
|- - Alexey Lukin   Цитата(SPACUM @ Aug 17 2011, 16:04) А я с...   Aug 17 2011, 13:53
|- - SPACUM   Цитата(Alexey Lukin @ Aug 17 2011, 17:53)...   Aug 17 2011, 15:43
|- - petrov   Цитата(SPACUM @ Aug 17 2011, 19:43) Для с...   Aug 17 2011, 16:06
|- - Alexey Lukin   Цитата(SPACUM @ Aug 17 2011, 19:43) Шутит...   Aug 17 2011, 18:55
|- - SPACUM   Цитата(Alexey Lukin @ Aug 17 2011, 22:55)...   Aug 17 2011, 20:28
- - Alex11   Позвольте не согласиться с т. bahurin по поводу то...   Aug 13 2011, 10:43
|- - petrov   Цитата(Alex11 @ Aug 13 2011, 14:43) При н...   Aug 13 2011, 12:50
|- - Alexey Lukin   Цитата(Alex11 @ Aug 13 2011, 14:43) Корен...   Aug 13 2011, 14:32
|- - petrov   Цитата(Alexey Lukin @ Aug 13 2011, 18:32)...   Aug 13 2011, 15:29
|- - bahurin   Цитата(Alexey Lukin @ Aug 13 2011, 17:32)...   Aug 13 2011, 17:34
|- - Alexey Lukin   Цитата(bahurin @ Aug 13 2011, 21:34) Вот ...   Aug 14 2011, 15:25
|- - bahurin   Цитата(Alexey Lukin @ Aug 14 2011, 18:25)...   Aug 14 2011, 16:20
|- - Alexey Lukin   Цитата(bahurin @ Aug 14 2011, 20:20) 1. Н...   Aug 14 2011, 17:47
|- - bahurin   Цитата(Alexey Lukin @ Aug 14 2011, 20:47)...   Aug 14 2011, 18:10
- - Дмитрий_Б   Почему бы просто не найти 10 локальных максимумов ...   Aug 13 2011, 14:11
- - Дмитрий_Б   Цитата(bahurin @ Aug 13 2011, 21:34) Заме...   Aug 14 2011, 14:54
- - Alexey Lukin   Спасибо, просветили! Так в чём же вопрос зак...   Aug 14 2011, 18:26
|- - bahurin   Цитата(Alexey Lukin @ Aug 14 2011, 21:26)...   Aug 15 2011, 06:11
- - Alexey Lukin   Если это сливающиеся синусоиды и нет возможности у...   Aug 15 2011, 13:46
|- - bahurin   Цитата(Alexey Lukin @ Aug 15 2011, 16:46)...   Aug 16 2011, 04:08
- - Zelepuk   Alex11 говорил о том, что сделано в железе с приме...   Aug 17 2011, 12:08
|- - SPACUM   Цитата(Zelepuk @ Aug 17 2011, 16:08) Alex...   Aug 17 2011, 16:15
|- - petrov   Цитата(SPACUM @ Aug 17 2011, 20:15) Возьм...   Aug 17 2011, 16:28
|- - SPACUM   Цитата(petrov @ Aug 17 2011, 20:28) Ну и ...   Aug 17 2011, 16:30
|- - petrov   Цитата(SPACUM @ Aug 17 2011, 20:30) Прове...   Aug 17 2011, 16:59
|- - SPACUM   Цитата(petrov @ Aug 17 2011, 20:59) Даже ...   Aug 17 2011, 17:11
|- - petrov   Цитата(SPACUM @ Aug 17 2011, 21:11) Переп...   Aug 17 2011, 18:57
- - Alex11   Коли спрашивали, признаюсь: оцифровка на частоте 2...   Aug 17 2011, 21:52
|- - SPACUM   Цитата(Alex11 @ Aug 18 2011, 01:52) Коли ...   Aug 18 2011, 07:37
|- - Signal   Цитата(Signal @ Aug 25 2011, 01:48) Фанта...   Aug 25 2011, 13:58
- - Alexey Lukin   Таким образом вычисляется THD+N. Если нет шума, то...   Aug 25 2011, 05:01


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

 


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


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