No to teraz sporo się wyjaśniło.
Nie mam niestety doświadczenia w budowaniu filtrów cyfrowych, może poza prostymi "średnimi", ale można trochę podywagować o Twoim rozwiązaniu.
Jak już wyliczałem, dla próbkowania 44100 Hz należy zbierać sample co 22 us, czyli masz mniej więcej tyle czasu na zebranie danych i obliczenia.
Oczywiście to wszystko przy założeniu, że procesor nic innego nie robi. Spójrzmy na obsługę przerwania:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Można spróbować kilku optymalizacji.
1. Usunięcie typu
double. Procki STM32 nie są zoptymalizowane do tego typu, czy faktycznie potrzebujesz tak dużego zakresu do swoich obliczeń? Może
uint32_t wystarczy, a może
float32_t? O tym drugim nieco niżej.
2. Używasz pętli, można spróbować rozwinąć pętle, szczególnie te duże wartości 10 i więcej, można by rozpisać do prostych poleceń, tak by procesor nie tracił czasu na skoki. Wielkość kodu wzrośnie, a można zaoszczędzić trochę czasu procesora.
Można stworzyć funkcje
static inline z rozwinięciami, zależne od rzędu filtru.
3. Nic nie piszesz o optymalizacjach, które zastosowałeś.
Czy próbowałeś używać bibliotek matematycznych dostarczanych z
CMSIS?
Czy włączasz obsługę sprzętową zmiennoprzecinkową, możesz o tym poczytać tutaj:
https://forum.sunduino.pl/viewtopic.php?f=9&t=59Jeśli włączysz obsługę
FPU, to jest szansa, że operacje na
float32_t przyśpieszą.
4. Może w ogóle zainteresuj się
CMSIS, masz tam obsługę filtrów cyfrowych zoptymalizowaną pod STM32:
https://developer.arm.com/embedded/cmsisSekcja:
CMSIS-DSP: Fast implementation of digital signal processing
Lepiej tego pewnie nie napiszesz (a kto tutaj napisze
![Szczęśliwy :)](https://forum.atnel.pl/images/smilies/icon_e_smile.gif)
), niestety to podejście wymaga studiowania tematu.
Ja to już troszkę liznąłem, ale nie na tyle żeby wiele podpowiedzieć.
Mogę napisać dodatkowo, że biblioteka jest obszerna, optymalizacje są zależne od wybranej precyzji (8, 16, 32 bitowej).
Mamy tam szereg podstawowych, zoptymalizowanych funkcji matematyczny jak sinus, średnia, tranformata Fouriera, filtry cyfrowe itp.