FFT (Быстрое преобразование Фурье) на STM32F103C8T6
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Описание: Алгоритм быстрого преобразования Фурье (FFT Fast Fourier Transform).
Библиотека: arduinoFFT
Назначение:Преобразует сигнал из временной области в частотную область.
Выявляет частоты, присутствующие в сигнале, и их амплитуды.
1. analogPin аналоговыйPin
Описание: Аналоговый вход микроконтроллера, с которого считываются данные.
Назначение: Считывает аналоговый сигнал (напряжение) с указанного пина и преобразует его в цифровое значение (ADC - Analog-to-Digital Converter).
Диапазон значений: Зависит от разрядности АЦП (в данном случае 12 бит для stm32f103c8t6, диапазон: 0–4095).
Пример:0 → 0 В, 2048 → 1.65 В (при опорном напряжении 3.3 В), 4095 → 3.3 В.
2. samples образцы
Описание: Количество отсчётов (выборок) сигнала, которые используются для анализа.
Использование в коде: 1024;
Назначение: Указывает, сколько точек будет использоваться для вычисления FFT (быстрого преобразования Фурье).
Влияние: Увеличение samples повышает точность спектрального анализа.
Большие значения требуют больше памяти и времени обработки.
Пример: 256, 512, 1024 – типичные значения.
3. SamplingFrequency
Описание: Частота дискретизации сигнала.
Назначение: Определяет, с какой частотой будут собираться отсчёты с аналогового входа.
Единица измерения: Гц (герцы).
Закон Найквиста: Частота дискретизации должна быть как минимум вдвое выше максимальной частоты исследуемого сигнала.
Пример:2048 Гц позволяет анализировать сигнал с максимальной частотой до 1024 Гц.
4. referenceVoltage
Описание: Опорное напряжение АЦП (Analog-to-Digital Converter).
Использование в коде: (3.3)
Назначение: Определяет максимальное значение входного аналогового сигнала, которое может быть измерено АЦП.
Пример:
Если опорное напряжение 3.3 В и разрядность АЦП 12 бит, то:
0 → 0 В
4095 → 3.3 В
5. Frequency Частота
Описание: Частота, соответствующая каждому измерению величин после выполнения БПФ.
6. Amplitude Амплитуда
Описание: Амплитуда сигнала для каждого такта после БПФ
Назначение: Показывает расширение на каждой частоте после преобразования Фурье.
Единица измерения: Напряжение (В).
7. RMS (Root Mean Square — Среднеквадратичное значение) RMS (среднеквадратичное значение):
Назначение: Показывает эффективное значение переменного сигнала.
Особенно полезно для измерения мощности синусоидального сигнала.
Библиотека: arduinoFFT
Назначение:Преобразует сигнал из временной области в частотную область.
Выявляет частоты, присутствующие в сигнале, и их амплитуды.
1. analogPin аналоговыйPin
Описание: Аналоговый вход микроконтроллера, с которого считываются данные.
Назначение: Считывает аналоговый сигнал (напряжение) с указанного пина и преобразует его в цифровое значение (ADC - Analog-to-Digital Converter).
Диапазон значений: Зависит от разрядности АЦП (в данном случае 12 бит для stm32f103c8t6, диапазон: 0–4095).
Пример:0 → 0 В, 2048 → 1.65 В (при опорном напряжении 3.3 В), 4095 → 3.3 В.
2. samples образцы
Описание: Количество отсчётов (выборок) сигнала, которые используются для анализа.
Использование в коде: 1024;
Назначение: Указывает, сколько точек будет использоваться для вычисления FFT (быстрого преобразования Фурье).
Влияние: Увеличение samples повышает точность спектрального анализа.
Большие значения требуют больше памяти и времени обработки.
Пример: 256, 512, 1024 – типичные значения.
3. SamplingFrequency
Описание: Частота дискретизации сигнала.
Назначение: Определяет, с какой частотой будут собираться отсчёты с аналогового входа.
Единица измерения: Гц (герцы).
Закон Найквиста: Частота дискретизации должна быть как минимум вдвое выше максимальной частоты исследуемого сигнала.
Пример:2048 Гц позволяет анализировать сигнал с максимальной частотой до 1024 Гц.
4. referenceVoltage
Описание: Опорное напряжение АЦП (Analog-to-Digital Converter).
Использование в коде: (3.3)
Назначение: Определяет максимальное значение входного аналогового сигнала, которое может быть измерено АЦП.
Пример:
Если опорное напряжение 3.3 В и разрядность АЦП 12 бит, то:
0 → 0 В
4095 → 3.3 В
5. Frequency Частота
Описание: Частота, соответствующая каждому измерению величин после выполнения БПФ.
6. Amplitude Амплитуда
Описание: Амплитуда сигнала для каждого такта после БПФ
Назначение: Показывает расширение на каждой частоте после преобразования Фурье.
Единица измерения: Напряжение (В).
7. RMS (Root Mean Square — Среднеквадратичное значение) RMS (среднеквадратичное значение):
Назначение: Показывает эффективное значение переменного сигнала.
Особенно полезно для измерения мощности синусоидального сигнала.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось tol123 07 янв 2025, 15:14, всего редактировалось 2 раза.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
Тестирование версии 9.0.
#include <arduinoFFT.h> - с маленькой буквы надо.tol123 писал(а): 02 май 2024, 05:25 ArduinoFFT.h: No such file or directory
в чем проблема не пойму.
Но у вас там еще ошибки:
объявили выход кириллицей,
если версия либ 2x то клас тоже по другому надо.
В общем смотрите API
Win10-64, FLProg (portable)
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Проект Arduino, использующий алгоритм быстрого преобразования Фурье (FFT), предоставляет возможность анализировать аналоговые сигналы, определяя их частоты и амплитуды.
FFT (Быстрое преобразование Фурье): Это алгоритм, который анализирует временные сигналы и разбивает их на составляющие частоты. Он широко применяется для анализа частотного содержания сигналов и находит применение в различных областях, включая обработку сигналов, аудиообработку, медицинскую диагностику и др.
Частота дискретизации (Sampling frequency): Это количество сэмплов сигнала, собранных за единицу времени. Она определяет частоту, с которой аналоговый сигнал преобразуется в цифровой формат. Чем выше частота дискретизации, тем более подробно и точно мы можем анализировать сигнал.
Сэмплы (Samples): Это отдельные значения аналогового сигнала, собранные в течение определенного временного интервала. Количество сэмплов определяет разрешение анализа сигнала: чем больше сэмплов, тем выше разрешение и точность анализа.
В данном проекте микроконтроллер STM32F103C8T6 снимает аналоговый сигнал с помощью аналогового входа A0. Затем алгоритм FFT используется для анализа этого сигнала. Частота дискретизации установлена на 400 Гц, что обеспечивает адекватное представление о частотном содержании сигнала.
Количество сэмплов установлено на 1024, обеспечивая высокое разрешение анализа. Это позволяет детально изучать частотный спектр сигнала с высокой точностью.
Результаты анализа, включая максимальную обнаруженную частоту и амплитуды на различных частотах, выводятся через UART на ножки A9 и A10 микроконтроллера. Это предоставляет пользователю данные для дальнейшего анализа или визуализации на внешних устройствах.
Для дополнительного функционала в проекте использовался датчик напряжения ZMPT, подключенный к сети 220 Вольт. Этот датчик позволяет анализировать частотное содержание напряжения в электрической сети и мониторить ее качество и стабильность.
Уменьшение количества сэмплов ускоряет выполнение преобразования Фурье за счет снижения объема вычислений. Однако это может привести к потере точности анализа, поэтому при выборе количества сэмплов необходимо учитывать баланс между скоростью выполнения и точностью результатов в соответствии с требованиями конкретного приложения.
FFT (Быстрое преобразование Фурье): Это алгоритм, который анализирует временные сигналы и разбивает их на составляющие частоты. Он широко применяется для анализа частотного содержания сигналов и находит применение в различных областях, включая обработку сигналов, аудиообработку, медицинскую диагностику и др.
Частота дискретизации (Sampling frequency): Это количество сэмплов сигнала, собранных за единицу времени. Она определяет частоту, с которой аналоговый сигнал преобразуется в цифровой формат. Чем выше частота дискретизации, тем более подробно и точно мы можем анализировать сигнал.
Сэмплы (Samples): Это отдельные значения аналогового сигнала, собранные в течение определенного временного интервала. Количество сэмплов определяет разрешение анализа сигнала: чем больше сэмплов, тем выше разрешение и точность анализа.
В данном проекте микроконтроллер STM32F103C8T6 снимает аналоговый сигнал с помощью аналогового входа A0. Затем алгоритм FFT используется для анализа этого сигнала. Частота дискретизации установлена на 400 Гц, что обеспечивает адекватное представление о частотном содержании сигнала.
Количество сэмплов установлено на 1024, обеспечивая высокое разрешение анализа. Это позволяет детально изучать частотный спектр сигнала с высокой точностью.
Результаты анализа, включая максимальную обнаруженную частоту и амплитуды на различных частотах, выводятся через UART на ножки A9 и A10 микроконтроллера. Это предоставляет пользователю данные для дальнейшего анализа или визуализации на внешних устройствах.
Для дополнительного функционала в проекте использовался датчик напряжения ZMPT, подключенный к сети 220 Вольт. Этот датчик позволяет анализировать частотное содержание напряжения в электрической сети и мониторить ее качество и стабильность.
Уменьшение количества сэмплов ускоряет выполнение преобразования Фурье за счет снижения объема вычислений. Однако это может привести к потере точности анализа, поэтому при выборе количества сэмплов необходимо учитывать баланс между скоростью выполнения и точностью результатов в соответствии с требованиями конкретного приложения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Здравствуйте. Для реализации моего проекта в FLProg мне потребуются знания о создании пользовательских блоков. Однако, материалов, по которым я мог бы изучить это мало. Скорее всего, не будет проекта в нем.
-
- Полковник
- Сообщения: 3357
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 12 раз
- Поблагодарили: 100 раз
- Контактная информация:
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
У Вас скетч создан в стиле FLProg , я думал, что создавали на нем проект.
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Добавлю блок пользователя, не рабочий в случае того что кто-то заинтересуется им и подскажет что не так. Пока что не могу завершить блок пользователя из-за того что не получается выводить значения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- rw6cm
- Полковник
- Сообщения: 2372
- Зарегистрирован: 06 сен 2015, 20:25
- Имя: Владимир
- Поблагодарили: 41 раз
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
[ref]tol123[/ref],
Делайте проекты в релизе (например флп 8.2.3)
Не все здесь бета-тестеры.
В вашем проекте нет ПБ.
Делайте проекты в релизе (например флп 8.2.3)
Не все здесь бета-тестеры.
Win10-64, FLProg (portable)
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Исправил. Версия Flprog 9.0.0
У вас нет необходимых прав для просмотра вложений в этом сообщении.
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Поправил блок пользователя, пока что возможности проверить нету. Думаю должно работать проверю позже. Проверил не работает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось tol123 18 май 2024, 05:42, всего редактировалось 1 раз.
FFT (Быстрое преобразование Фурье) на STM32F103C8T6
в этой версии majorPeak выводит, а другое нет.
это код рабочий и должен выводить что то типа:
[spoiler]
488.28Hz 115.24
492.19Hz 272.67
496.09Hz 329.76
50.88
[/spoiler]
вот рабочий код. проблема может с тем как выводится массив и варианты его вывода в юарт. И как в блоке его оформить. пробовал выводить в конец секции loop - больше ошибок получается
мой блок дает только 50.88 а массив не выводит. цифры отдельные выводит неправильные.
это код рабочий и должен выводить что то типа:
[spoiler]
488.28Hz 115.24
492.19Hz 272.67
496.09Hz 329.76
50.88
[/spoiler]
Код: Выделить всё
#include "flprogUtilites.h"
#include "arduinoFFT.h"
#include "flprogUart.h"
FlprogUartExecutor FLProgUart;
#define FLPROG_UART_EXECUTOR FLProgUart
String Out_117014878_222076267;
String Out_36260122_222076267;
float Out_51940551_222076267;
String _stou3;
const int samples_222076267 = 256;
const int samplingFrequency_222076267 = 1000UL;
unsigned int sampling_period_us_222076267;
unsigned long microseconds_222076267;
float vReal_222076267[samples_222076267];
float vImag_222076267[samples_222076267];
ArduinoFFT<float> FFT_222076267 = ArduinoFFT<float>(vReal_222076267, vImag_222076267, samples_222076267, samplingFrequency_222076267);
void setup() {
FLProgUart.setSpeedUart(115200, 1);
FLProgUart.setDataBitUart(8, 1);
FLProgUart.setParityUart(0, 1);
FLProgUart.setStopBitUart(1, 1);
sampling_period_us_222076267 = round(1000000 * (1.0 / samplingFrequency_222076267));
}
void loop() {
microseconds_222076267 = micros();
for (uint16_t i = 0; i < samples_222076267; i++) {
vReal_222076267[i] = analogRead(A0); // заменить A0 на нужный канал
vImag_222076267[i] = 0;
while (micros() - microseconds_222076267 < sampling_period_us_222076267) {
}
microseconds_222076267 += sampling_period_us_222076267;
}
FFT_222076267.compute(FFTDirection::Forward);
FFT_222076267.complexToMagnitude();
for (uint16_t i = 0; i < (samples_222076267 >> 1); i++) {
Out_51940551_222076267 = ((i * 1.0 * samplingFrequency_222076267) / samples_222076267);
FLProgUart.printUart(String(Out_51940551_222076267), 1);
FLProgUart.printUart("Hz ", 1);
FLProgUart.printUart(String(vReal_222076267[i]), 1);
FLProgUart.printUart("\r\n", 1);
}
Out_117014878_222076267 = String(FFT_222076267.majorPeak());
FLProgUart.printUart(Out_117014878_222076267, 1);
FLProgUart.printUart("\r\n", 1);
delay(1000);
if (Out_36260122_222076267 != _stou3) {
FLProgUart.printUart(Out_36260122_222076267, 1);
FLProgUart.printUart("\r\n", 1);
_stou3 = Out_36260122_222076267;
}
}
мой блок дает только 50.88 а массив не выводит. цифры отдельные выводит неправильные.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Re: FFT (Быстрое преобразование Фурье) на STM32F103C8T6
Обновил в шапке FFT stm32.flp и Быстрое_преобразование_Фурье_(Code_-_Professional).ubi.
Работает для версии программы 9.0 для stm32а103c8t6. На ардуино не проверял.
Добавил:
8. Fundamental Frequency (основная частота):
Основная частота остается стабильной на уровне 50 Гц,
что соответствует частоте электросети. Если бы была значительная
гармоническая искаженность, частота могла бы изменяться.
Добавил:
9.FFT stm32 добавлен Index массива
Работает для версии программы 9.0 для stm32а103c8t6. На ардуино не проверял.
Добавил:
8. Fundamental Frequency (основная частота):
Основная частота остается стабильной на уровне 50 Гц,
что соответствует частоте электросети. Если бы была значительная
гармоническая искаженность, частота могла бы изменяться.
Добавил:
9.FFT stm32 добавлен Index массива
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость