Сглаживание fft
- Войдите на сайт для отправки комментариев
Вс, 10/03/2019 - 22:11
Добрый день
В предыдущем посте с Вашей помощью сделал первый шаг изучения 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В, но она не реагирует на подачу сигнала.
Где ошибка ?
Вам сказали, "изучите книгу, и пока не изучите - не возвращайтесь". Вы игнорируете, ну дело Ваше.
В Вашем подходе к делу, в Ваших мозгах. Исправите её, остальные - не проблема.
Совершенно прав был коллега, писавший Вам
Невозможно научить танцевать человека, который не то что ходить, а еще ползать не научился.
Здесь форум, а не школа. Заявки типа "хочу научиться танцевать" принимаются только от людей, которые уже умеют ходить.
Строки, 72, 73, 88.
Строки, 72, 73, 88.
Я даже не спрашиваю Вас, что именно написано в строке 73
т.к. один хрен Вы этого не знаете.
Изучите язык хотя бы на уровне школьника. И пока не изучите, Вам здесь нечего делать, поверьте.
0
0
А чем Вы, простите, заслужили уважение? Тем что ни хрена не знаете и отказываетесь читать литературу? Или тем, что врёте на прямой вопрос?
Действительно - можно уважать начинающего, который старается что-то узнать. А к человеку, который отказывается узнавать, а просто нагло клянчит халяву - никакого уважения нет и быть не может.
gena321 - тут не комменты бесполезные, а ваши сообщения на форуме. У вас в коде написана откровенная чушь - а с FFT взялись работать.
Критиковать легче чем дать ответ по теме.
Критиковать легче чем дать ответ по теме.
каких, нафик, советов по теме можно дать человеку, который не знаеткак буква "а" выговаривается? Ваша строчка 73 всегда возврашщает единицу! - достаточно по теме или все еще недостаточно разжевано для лентяев ?
73 всегда возврашщает единицу!
Это я и сказал раньше, а должна средное значение бина #35
Критиковать легче чем дать ответ по теме.
Для того, чтобы дать Вам ответ, который бы ВЫ смогли понять, нужно пересказать учебник. Но даже это, думаю, без толку, т.к. у Вас все равно не хватит терпения дочитать такой ответ до конца.
73 всегда возврашщает единицу!
Это я и сказал раньше, а должна средное значение бина #35
должна? - бить пробовали?
Хотя нет - вы ж иронию не понимаете. Напишу тупо и "по теме" - чтобы строчка что-то делала, программист должен это запрограммировать.
Я Вам уже говорил, не хотите выглядеть идиотом и клоуном - учите язык. Хотите - у Вас получается