Как отделить сигнал определенной частоты от суммирования нескольких сигналов?

Я хочу рассчитать THD. ИТАК, как же мне изолировать основную частоту от сигнала с гармониками? У меня есть сигнал V, который представляет собой сумму V1, V2 и V3. V1=A1sin(w1t+phi1), V2=A2sin(w2t+phi2) и V3=A3sin(w3t+phi3). Я хочу узнать величину/амплитуду известной частоты w1 в сигнале. Как мне поступить? Должен ли я использовать библиотеку БПФ? Если да, то как?

, 👍2

Обсуждение

Хотя на самом деле это не совсем специфично для Arduino: Да, я думаю, что вам нужно сделать БПФ на сигнале. Когда вы гуглите что-то вроде "Arduino FFT", вы получаете, например, [эту библиотеку](https://github.com/kosme/arduinoFFT). У него тоже есть примеры. Вы можете использовать его или запрограммировать БПФ самостоятельно. Это был бы чистый вопрос программирования на C/C++., @chrisl

Каковы значения частот ω₁/2π...? С какой точностью они известны? Постоянны ли они? Как долго длится сигнал? Достаточно ли она устойчива, чтобы вы могли измерять v₁, v₂ и v₃ последовательно, а не одновременно? С какой точностью вам нужно измерение THD?, @Edgar Bonet

@chrisl: Возможно, ему и не нужен БПФ. БПФ вычисляет амплитуду человеческих частот. Если оператору нужны только три частоты, то БПФ, скорее всего, будет излишним., @Edgar Bonet


1 ответ


1

Что именно вы пытаетесь сделать? Если вы хотите измерить THD по внешнему сигналу, Arduino, вероятно, не лучший выбор. В нем есть только 10-разрядные АЦП, и они подключены к постоянному току. Вы можете построить простую схему (https://www.daqarta.com/dw_rrll.htm) , чтобы переключить вход с переменным током на постоянный для Arduino, но у вас все равно будет только 10-битное разрешение. Я недостаточно глубоко заглянул в библиотеку, о которой упоминает Крисл, чтобы увидеть, насколько большой БПФ он может выполнять в ограниченной оперативной памяти Arduino, но я подозреваю, что спектральное разрешение будет настолько плохим, что будет бесполезно для измерений THD в реальном мире.

То, как вы описываете сигнал, заставляет меня думать, что это академическое упражнение, а не проблема реального мира. Если это так, вам не нужен Arduino или какое-либо другое оборудование, просто запустите FFT на своем главном компьютере. Если вам действительно нужно провести измерения в реальном мире, лучше всего использовать обычную звуковую карту на вашем компьютере. См. https://www.daqarta.com/dw_0d0t.htm для примера. Подход к звуковой карте имеет дополнительное преимущество в том, что он может генерировать тестовый сигнал с низким уровнем искажений для управления устройством, искажения которого вы пытаетесь измерить. Это позволяет "трюку" (в примере называемому "Блокировкой спектральной линии") получить еще лучшее разрешение, сделав тестовый сигнал синхронным с частотой дискретизации, поэтому вам не нужны оконные функции.

Если вы действительно хотите измерить THD с помощью Arduino, рассмотрите подход, используемый в том, что раньше называлось "анализатором волн". Структурная схема показана здесь: https://www.daqarta.com/dw_0h0p.htm. По сути, это анализатор с одной спектральной линией, который на самом деле может быть более избирательным, чем БПФ. Вы в основном умножаете входной сигнал на синус и косинус опорной частоты (основной), а затем исправляете и фильтруете результаты и объединяете по среднеквадратическому значению. Это дает вам фундаментальное значение (или любую отдельную гармонику, на которую вы настраиваете ссылку), поэтому для получения THD вы делите на среднеквадратическое значение общего входного сигнала.

,

Подход описываемого вами волнового анализатора называется “[обнаружение гомодины](https://en.wikipedia.org/wiki/Homodyne_detection)”. Он [может использоваться для анализа сигнала в режиме реального времени на Uno](http://arduinoprosto.ru/q/21175), если требования к частоте дискретизации и точности не слишком жесткие., @Edgar Bonet