Официальный сайт компании Arduino по адресу arduino.cc
Как убрать постоянную составляющую ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 12/05/2019 - 17:59
Здравствуйте
Подскажите пожалуйста как убрать постоянную составляющую сигналa ?
#include "arduinoFFT.h" #define SAMPLES1 128 #define SAMPLING_FREQUENCY 40000 arduinoFFT FFT = arduinoFFT(); unsigned int sampling_period_us; unsigned long microseconds; double vReal[SAMPLES1]; double vImag[SAMPLES1]; void setup() { Serial.begin(115200); sampling_period_us = round(1000000 * (1.0 / SAMPLING_FREQUENCY)); } void loop() { /*SAMPLING*/ for (int i = 0; i < SAMPLES1; i++) { microseconds = micros(); vReal[i] = analogRead(PA7); vImag[i] = 0; while (micros() < (microseconds + sampling_period_us)) { } } /*FFT*/ FFT.Windowing(vReal, SAMPLES1, FFT_WIN_TYP_HAMMING, FFT_FORWARD); FFT.Compute(vReal, vImag, SAMPLES1, FFT_FORWARD); FFT.ComplexToMagnitude(vReal, vImag, SAMPLES1); double peak = FFT.MajorPeak(vReal, SAMPLES1, SAMPLING_FREQUENCY); //Serial.print(" "); Serial.println(vReal[40], 1); }
канденсатором
Так Вы ж преобразование Фурье считаете. Ну, и убирайте нулевую гармонику. Или Вы не до конца понимаете смысла преобразования?
А существует конденсаторная программа?
Может, окажется полезным: http://arduino.ru/forum/proekty/konstruktsiya-vykhodnogo-dnya-prostoi-spektranalizator-480-polos-60-db-na-stm32f103-i-
Но вообще-то есть такая арифметическая операция - называется "вычитание".
нулевой гармоники здесь нет, она в первом бин а я использую бин # 40
вычитание не совсем подходит, постоянная зависит от амплитуды сигнала
А существует конденсаторная программа?
А то!
вычитание не совсем подходит, постоянная зависит от амплитуды сигнала
Подходит, то Вы готовить не умеете. Считайте среднее и его вычитайте. Хотя для фуре её убирать не обязательно, если ДД хватает.
Вот средние значение и что дальше ?
вычитать её.
Красный минус ?
Да. А Вы уверены что сигнал верно оцифрован, без искажений? А то мне он не нравится.
Похоже что сигнал у Вас уходит в минус относительно земли ардуино, а АЦП такой сигнал не умеет вводить. Поэтому к нему и добавляют ту постоянную составляющую с которой Вы боретесь. Амплитуда сигнала получается слишком большая.
вычитание не совсем подходит, постоянная зависит от амплитуды сигнала
Тогда она совсем не постоянная.
Могу предположить, что Вам нужен ФВЧ.
Попробую синий - красный.
ФВЧ - может делал что то не так но он вносил большое опаздание, боле 10 сек.
.https://learn.openenergymonitor.org/electricity-monitoring/ctac/files/integermath01.png
Вы сами себя слышите?
Выберете что одно, либо она постоянная, либо она от чего-то зависит. Вместе то и другое не бывает.
ТС, вы сначала определитесь с целью, для чего вы ее хотите "УБРАТЬ" ? На самом деле все решается очень просто. В 90% вас спасет вылавливание максимумов и минимумов колебаний сигнала. Это простейшие задачи.Минимум это если прошлое значение менее текущего, максимум наоборот. Имеете ближайший минимум и ближайший максимум к текущему моменту. Имея эти показания получите все что захотите.
Посмотрите сообщение #6, картинка говорит что я имел в виду.
Не шельмуйте понятия. Я спросил не что вы имеете в виду, а какова цель ваших изысканий. Просто приземлите цель. Например " мой импульсный блок пинания имеет плохой фильтр и я хочу измерить постоянное напряжение, на выходе БП, не учитывая дефекты возникающие в этой связи ". Я понимаю, что у вас несколько иная задача. Вы хотите измерить амплитуду помехи вокруг постоянного уровня ? Хто вы хотите ? Какая у вас конечная цель ?
Голубое на картинках это помехи от FFT хочу их убрать.
Это не помехи. Это реальность данная нам в ощущениях. Спектр правильно можно получить взяв много выборок и просто усреднить по каждой гармонике. В конце получится практически гладкая кривая с отдельными пиками, соответствующими максимумам энергии в спектре. FFT на одном интервале имеет слишком рваный вид из за особенностеней математический реализации алгоритма и несоответствия базовых функций физической картине мира. Согласен с коллегами по поводу формулировки задачи. Конечный результат зависит от того что требуется. Например может быть нужна магнитуда какой то из гармоник DTFM сигнала?
Если нужен бин #40, зачем рисовать остальные?
Включите логику. Невозможно решить задачу с двумя неизвестными. Вы хотите из одного неизвестного "убрать" другое :) Довольствуйтесь тем красным графиком. Лучше у вас не получится :) Мне в свое время "старшие товарищи" весь мозг пропилили и я запомнил, что "ЧУДЕС НА СВЕТЕ НЕ БЫВАЕТ" !
Serial.println(vReal[40], 1);
А где остальные ?
весь мозг пропилили и я запомнил, что "ЧУДЕС НА СВЕТЕ НЕ БЫВАЕТ" !
то они шутили ))) На форуме все по тристо раз уже разжевано, а никто ничего найти не может. Это вам не чудеса? Просто чудеса надо уметь видеть, у старших товарищей глаз замыливается ;)
gena321, попытайтесь рассказать, что Вы делаете и для чего, тогда, возможно, советы будут более осмысленными.
Пока чувствуется, что Вы не совсем понимаете, что Вы делаете, и чего хотите. И тем более не можете объяснить это окружающим, поэтому думаете, что графики вместо Вас объяснят, что Вам нужно. Это не так. Попытайтесь сформулировать своими словами:
1. Чего Вы хотите.
2. Что на самом деле получается.
3. Чем 2 отличается от 1.
Гена, у вас на спектре отношение сигнал/шум очень низкое. из такого спектра крайне сложно извлечь полезную информацию. Вот вам для ориентира - спектр с более-менее приличным "сигнал/шум
Но если сигнал слабый, то для получения приличной картинки его нужно "копить" - то есть сканировать одно и то же десятки. сотни, а иногда десятки тысяч раз. При этом полезные сигналы растут пропорционально числу экспериментов, а шум - пропорционально корню из числа накоплений, так что с числом экспериментов отношение сигнал-шум растет, хотя и не очень быстро
сам ФВЧ, у меня это опоздание менее 0,1 сек.
то что нужно в #25
вот опоздание 0.5 сек
Почитайте уже что то про цифровую фильтрацию. Эти секунды называются постоянной времени фильтра и зависят от частоты оцифровки и полосы среза фильтра. В цифровых фильтрах это диапазон от нуля до 0.5 Fc. Чем круче срез фильтра, тем больше точек необходимо взять в окно обработки. Что бы в вашем случае приблизится к идеалу нужно выбрать частоту среза фильтра так, что бы он был максимально близко к той частоте флуктуациий, каторую вы ещё хотите видеть на графике, но не подавлял магнитуду гармоники. В этом случае реакция фильтра будет максимально быстрой. Будет ли это соответствовать вашим ожиданиям красивой картинки, не знаю. Но по другому ни как.