Сглаживание fft

gena321
Offline
Зарегистрирован: 19.01.2019
Добрый день
В предыдущем посте с Вашей помощью сделал первый шаг изучения fft, возникла проблема шумов, пытаюсь устронить их с помощью функций smooth но она пука не работает.
Вот что я сделал.
#include "arduinoFFT.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);
#define SAMPLES 128 //Must be a power of 2, # of bins = samples/by 2 = 64
#define SAMPLING_FREQUENCY 1000 //Hz, must be less than 10000 due to ADC
//////////////////////
const int numReadings = 10;
int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average
//////////////////////
int i;
arduinoFFT FFT = arduinoFFT();

unsigned int sampling_period_us;
unsigned long microseconds;

double vReal[SAMPLES];
double vImag[SAMPLES];

void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
  sampling_period_us = round(1000000 * (1.0 / SAMPLING_FREQUENCY));
  //////////////////////
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
    /////////////////////
  }

  void loop() {

    /*SAMPLING*/
    for (int i = 0; i < SAMPLES; i++)
    {
      microseconds = micros();    //Overflows after around 70 minutes!

      // vReal[i] = analogRead(0);
      vReal[i] = analogRead(PA7);
      vImag[i] = 0;

      while (micros() < (microseconds + sampling_period_us)) {
      }
    }

    /*FFT*/
    FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
    FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
    FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
    double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);

    /*PRINT RESULTS*/
    // Serial.println(peak);     //Print out what frequency is the most dominant.

    //for (int i = 0; i < (SAMPLES / 2); i++)
    //   for (int i = 0; i < (36); i++)
    {
      /*View all these three lines in serial terminal to see which frequencies has which amplitudes*/

      //Serial.print((i * 1.0 * SAMPLING_FREQUENCY) / SAMPLES, 1);

      //Serial.print(" ");
     // Serial.println(vReal[35], 1);    //View only this line in serial plotter to visualize the bins

    }
  ///////////////////
 // subtract the last reading:
  total = total - readings[readIndex];
  // read from the sensor:
  //readings[readIndex] = analogRead(inputPin);
   readings[readIndex] = (vReal[35], 1);
  // add the reading to the total:
  total = total + readings[readIndex];
  // advance to the next position in the array:
  readIndex = readIndex + 1;

  // if we're at the end of the array...
  if (readIndex >= numReadings) {
    // ...wrap around to the beginning:
    readIndex = 0;
  }

  // calculate the average:
  average = total / numReadings;
  // send it to the computer as ASCII digits
  Serial.println(average);
  delay(1);        // delay in between reads for stability
  ///////////////////
    //delay(1000);  //Repeat the process every second OR:
    // while(1);       //Run code once
    lcd.setCursor(0, 0);
    lcd.print("V");
    lcd.setCursor(3, 0);
    lcd.print(vReal[35], 1); //
    lcd.setCursor(0, 1);
    lcd.print(peak); // frequency
   
  }

 

Шумов нет, прямая линия бесь шумов  на уровне 1В, но она не реагирует на подачу сигнала.
Где ошибка ? 
ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Вам сказали, "изучите книгу, и пока не изучите - не возвращайтесь". Вы игнорируете, ну дело Ваше.

gena321 пишет:

Где ошибка ? 

В Вашем подходе к делу, в Ваших мозгах. Исправите её, остальные - не проблема.

Совершенно прав был коллега, писавший Вам

andriano пишет:

Невозможно научить танцевать человека, который не то что ходить, а еще ползать не научился.

Здесь форум, а не школа. Заявки типа "хочу научиться танцевать" принимаются только от людей, которые уже умеют ходить.

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

Строки, 72, 73, 88.

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

gena321 пишет:

Строки, 72, 73, 88.

Я даже не спрашиваю Вас, что именно написано в строке 73

readings[readIndex] = (vReal[35], 1);

т.к. один хрен Вы этого не знаете.

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

gena321
Offline
Зарегистрирован: 19.01.2019
 
ЕвгенийП аватар
Онлайн
Зарегистрирован:25.05.2015
Нет уважения к другим. Такие комментарии бесполезные. 
 

 

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

А чем Вы, простите, заслужили уважение? Тем что ни хрена не знаете и отказываетесь читать литературу? Или тем, что врёте на прямой вопрос?

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

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

gena321 - тут не комменты бесполезные, а ваши сообщения на форуме. У вас в коде написана откровенная чушь - а с FFT взялись работать.

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

Критиковать легче чем дать ответ по теме. 

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

gena321 пишет:

Критиковать легче чем дать ответ по теме. 

каких, нафик, советов по теме можно дать человеку, который не знаеткак буква "а" выговаривается? Ваша строчка 73 всегда возврашщает единицу! - достаточно по теме или все еще недостаточно разжевано для лентяев ?

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

73 всегда возврашщает единицу! 

Это я и сказал раньше, а  должна средное значение бина #35  

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

gena321 пишет:

Критиковать легче чем дать ответ по теме. 

Вы так думаете?

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

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

gena321 пишет:

73 всегда возврашщает единицу! 

Это я и сказал раньше, а  должна средное значение бина #35  

должна? - бить пробовали?

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

gena321
Offline
Зарегистрирован: 19.01.2019
Работает, сам разобрался.
Продолжайте свои...............
ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

gena321 пишет:
а  должна средное значение бина #35 
Кому это, интерсено, она так задолжала?

Я Вам уже говорил, не хотите выглядеть идиотом и клоуном - учите язык. Хотите - у Вас получается