Skocz do zawartości

[C] liczba zespolona float complex z unsigned int?


Pomocna odpowiedź

Napisano

Witam

Tak jak w temacie

Czy jest jakakolwiek możliwość przekonwertowania liczby typu unsigned int (uint) na liczbę typu complex?

Z góry dziękuję za odpowiedzi lub podpowiedzi

Pozdrawiam

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.

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.

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.

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.

"..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..

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...