Как убрать постоянную составляющую ?

gena321
Offline
Зарегистрирован: 19.01.2019
Здравствуйте
Подскажите пожалуйста как убрать постоянную составляющую сигнал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);    
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

канденсатором

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

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

gena321
Offline
Зарегистрирован: 19.01.2019

А существует конденсаторная программа?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Может, окажется полезным: http://arduino.ru/forum/proekty/konstruktsiya-vykhodnogo-dnya-prostoi-spektranalizator-480-polos-60-db-na-stm32f103-i-

Но вообще-то есть такая арифметическая операция - называется "вычитание".

gena321
Offline
Зарегистрирован: 19.01.2019

нулевой гармоники здесь нет, она в первом бин а я использую бин # 40

gena321
Offline
Зарегистрирован: 19.01.2019

вычитание не совсем подходит, постоянная зависит от амплитуды сигнала

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

gena321 пишет:

А существует конденсаторная программа?

А то!

Logik
Offline
Зарегистрирован: 05.08.2014

gena321 пишет:

вычитание не совсем подходит, постоянная зависит от амплитуды сигнала

 

Подходит, то Вы готовить не умеете. Считайте среднее и его вычитайте. Хотя для фуре её убирать не обязательно, если ДД хватает.

gena321
Offline
Зарегистрирован: 19.01.2019

Вот средние значение и что дальше ?

Logik
Offline
Зарегистрирован: 05.08.2014

вычитать её.

gena321
Offline
Зарегистрирован: 19.01.2019

Красный минус ?

Logik
Offline
Зарегистрирован: 05.08.2014

Да. А Вы уверены что сигнал верно оцифрован, без искажений? А то мне он не нравится.

Logik
Offline
Зарегистрирован: 05.08.2014

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

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

gena321 пишет:

вычитание не совсем подходит, постоянная зависит от амплитуды сигнала

 

Тогда она совсем не постоянная.

Могу предположить, что Вам нужен ФВЧ.

gena321
Offline
Зарегистрирован: 19.01.2019

Попробую синий - красный.

ФВЧ - может делал что то не так но он вносил большое опаздание,  боле 10 сек.

.https://learn.openenergymonitor.org/electricity-monitoring/ctac/files/integermath01.png

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

gena321 пишет:
вычитание не совсем подходит, постоянная зависит от амплитуды сигнала

Вы сами себя слышите?

Выберете что одно, либо она постоянная, либо она от чего-то зависит. Вместе то и другое не бывает.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

ТС, вы сначала определитесь с целью, для чего вы ее хотите "УБРАТЬ" ? На самом деле все решается очень просто. В 90% вас спасет вылавливание максимумов и минимумов колебаний сигнала. Это простейшие задачи.Минимум это если прошлое значение менее текущего, максимум наоборот. Имеете ближайший минимум и ближайший максимум к текущему моменту. Имея эти показания получите все что захотите.

gena321
Offline
Зарегистрирован: 19.01.2019

Посмотрите сообщение #6, картинка говорит что я имел в виду.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Не шельмуйте понятия. Я спросил не что вы имеете в виду, а какова цель ваших изысканий. Просто приземлите цель. Например " мой импульсный блок пинания имеет плохой фильтр и я хочу измерить постоянное напряжение, на выходе БП, не учитывая дефекты возникающие в этой связи ". Я понимаю, что у вас несколько иная задача. Вы хотите измерить амплитуду помехи вокруг постоянного уровня ? Хто вы хотите ? Какая у вас конечная цель ?

gena321
Offline
Зарегистрирован: 19.01.2019

Голубое на картинках это помехи от FFT хочу их убрать.

nik182
Offline
Зарегистрирован: 04.05.2015

Это не помехи. Это реальность данная нам в ощущениях. Спектр правильно можно получить взяв много выборок и просто усреднить по каждой гармонике. В конце получится практически гладкая кривая с отдельными пиками, соответствующими максимумам энергии в спектре. FFT на одном интервале имеет слишком рваный вид из за особенностеней математический реализации алгоритма и несоответствия базовых функций физической картине мира. Согласен с коллегами по поводу формулировки задачи. Конечный результат зависит от того что требуется. Например может быть нужна магнитуда какой то из гармоник DTFM сигнала?

Если нужен бин #40, зачем рисовать остальные? 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Включите логику. Невозможно решить задачу с двумя неизвестными. Вы хотите из одного неизвестного "убрать" другое :) Довольствуйтесь тем красным графиком. Лучше у вас не получится :) Мне в свое время "старшие товарищи" весь мозг пропилили и я запомнил, что "ЧУДЕС НА СВЕТЕ НЕ БЫВАЕТ" !

gena321
Offline
Зарегистрирован: 19.01.2019

Serial.println(vReal[40], 1); 

А где остальные ?

 

 

Logik
Offline
Зарегистрирован: 05.08.2014

brokly пишет:

 весь мозг пропилили и я запомнил, что "ЧУДЕС НА СВЕТЕ НЕ БЫВАЕТ" !

то они шутили ))) На форуме все по тристо раз уже разжевано, а никто ничего найти не может. Это вам не чудеса? Просто чудеса надо уметь видеть, у старших товарищей глаз замыливается ;)

gena321
Offline
Зарегистрирован: 19.01.2019
brokly
Это не совсем так, сообщение #1 и #15.
Сам ФВЧ работает без задержки но  после добавления его в FFT почему то становится медленным.
 
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Пока чувствуется, что Вы не совсем понимаете, что Вы делаете, и чего хотите. И тем более не можете объяснить это окружающим, поэтому думаете, что графики вместо Вас объяснят, что Вам нужно.  Это не так. Попытайтесь сформулировать своими словами:

1. Чего Вы хотите.

2. Что на самом деле получается.

3. Чем 2 отличается от 1.

gena321
Offline
Зарегистрирован: 19.01.2019
1 = сообщение #20
2= сообщение #25 = с левой стороны красная  линия колеблется на уровне 0, подал сигнал пошла в верх и стремится к нулю, но очень медленно.
Как сказал сам ФВЧ работает без задержки, включил сигнал красная линия достигает нулевой оси в мгновение глаза.
3 = разница между красной и синей линиями.

 

b707
Offline
Зарегистрирован: 26.05.2017

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

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

 

gena321
Offline
Зарегистрирован: 19.01.2019

сам ФВЧ, у меня это опоздание менее 0,1 сек.

то что нужно в #25

gena321
Offline
Зарегистрирован: 19.01.2019

вот опоздание 0.5 сек

nik182
Offline
Зарегистрирован: 04.05.2015

Почитайте уже что то про цифровую фильтрацию. Эти секунды называются постоянной времени фильтра и зависят от частоты оцифровки и полосы среза фильтра. В цифровых фильтрах это  диапазон от нуля до 0.5 Fc. Чем круче срез фильтра, тем больше точек необходимо взять в окно обработки. Что бы в вашем случае приблизится к идеалу нужно выбрать частоту среза фильтра так, что бы он был максимально близко к той частоте флуктуациий, каторую вы ещё хотите видеть на графике, но не подавлял магнитуду гармоники. В этом случае реакция фильтра будет максимально быстрой. Будет ли это соответствовать вашим ожиданиям красивой картинки, не знаю. Но по другому ни как.