Skocz do zawartości

[C] liczba zespolona float complex z unsigned int?


antMan

Pomocna odpowiedź

A co to jest wg Ciebie "liczba typu complex" w C i jak ma wyglądać konwersja w sensie matematycznym? Nie jest to standardowy typ w tym języku więc musiałaś go sobie zrobić. No to jeśli zrobiłaś, to wiesz z czego się składa. A jeśli wiesz z czego się składa to sposób konwersji wydaje się oczywisty. Najprostszym sposób to zamiana uint'a na float i wstawienie tego do części rzeczywistej z jednoczesnym wyzerowaniem części urojonej, ale to zależy od aplikacji.

Może napisz więcej do czego tego potrzebujesz? Zwykle taki problem ma miejsce gdy np. dysponujesz spróbkowanym sygnałem pochodzącym z rzeczywistego świata (np. audio lub jakieś pomiary z czujnika) a chcesz z robić coś w dziedzinie zespolonej, np. FFT.

Link do komentarza
Share on other sites

C jak najbardziej obsługuje liczby całkowite. Co prawda "dopiero" od wersji C99, ale to jakieś 18 lat, więc chyba można już uznać za standard. Inna sprawa, że nigdy ich nie używałem, więc się nie wypowiem. Ale jestem przekonany że da się zamienić int na complex.

Link do komentarza
Share on other sites

No ale równie dobrze mogła sobie napisać:

typedef struct {float re, im;} complex_type;
complex_type x;

Wtedy (wielka mi) konwersja może wyglądać tak:

x.re = (float)jakis_int;
x.im = 0.0;

Implementacja AVR-GCC nie zawiera nagłówka standaryzującego typ liczb zespolonych, więc zależy o jakim C mówimy. Gdyby był załączony, wtedy robi się jeszcze prościej:

float complex x;
x = (float)jakis_int + 0.0*I;

Zbyt ogólne pytania prowadzą do ogólnych odpowiedzi. Potrzebne szczegóły.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Oczywiście, już mówię o szczegółach. Otóż, dostaję sygnał z przetwornika ADC do mikrokontrolera w postaci uin16_t. Muszę zrobić właśnie analizę FFT tego sygnału, w związku z tym potrzebuję przekonwertować tą uint na typ complex.

ALBO jak uzyskać dane o typie complex z przetwornika?

Chodzi o mikrokontroler STM32F030, płytka ewaluacyjna Nucleo.

Link do komentarza
Share on other sites

"..jak uzyskać dane o typie complex z przetwornika"

A czy w ogóle rozumiesz co chcesz zrobić? Przetwornik oddaje liczby rzeczywiste (w sensie nie-zespolone) - to jasne, bo rzeczywisty jest sygnał na którym on pracuje. Do zespolonego FFT wprowadzasz taki sygnał przez ustawienie części rzeczywistych na to co oddał przetwornik i części urojonych na zero, tak jak napisałem w przykładzie.

Napisz coś więcej. Co to za sygnał? Jak szybko go próbkujesz? Czy sygnał jest prawidłowo filtrowany przed ADC? Jakim filtrem? Jak długi masz bufor ADC? Jak długa jest Twoja FFT? Jakie okienkowanie robisz przed startem transformaty? Co chcesz wyciągnąć z wyników? Jakiej cechy szukasz? itd..

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.