5 godzin(y) temu
FFT - chyba never ending story ;-)
Ostatnio pisałem o uruchomieniu działania analizy fft i spróbowałem wykonać wizualizację otrzymanych wyników. Zacząłem od wykresu "słupkowego" bo wydał mi się najłatwiejszy do wykonania a w czasie programowania tej funkcjonalności pojawiły się kolejne problemy do rozwiązania o czym dalej.
[Obrazek: https://lx-net.pl/walet/image/fft_01.jpg]
Pole gdzie do tej pory pojawiały się kolorowe linie związane z siłą odbieranego sygnału zastąpiłem wykresem częstotliwościowo - amplitudowym gdzie oś częstotliwości to 10kHz a oś amplitudy to siła odbieranego sygnału od S1 do S9+20 (i wyżej). Ze względu na rozpiętość amplitudy wykres należy traktować jedynie informacyjnie. "Słupki lub prążki" sygnału mają kolor w zależności od jego siły od szarego przez zielony do żółtego i kończąc na czerwonym dla najsilniejszych. Ze względu na częstotliwość próbkowania można się spodziewać informacji co najwyżej z połowy tej częstotliwości a zatem do 12kHz ale ze względów praktycznych skala ma zakres do 10kHz bo dość łatwo było utworzyć obraz właśnie w tym zakresie przydzielając każdemu "prążkowi" dwa pixel-e szerokości.
[Obrazek: https://lx-net.pl/walet/image/fft_00.jpg]
Na potrzeby obrazowania fft powstała grafika o odpowiednim rozmiarze stanowiąca stałe "tło" analizy fft. Prążki rysowane są w sposób nie naruszający tej grafiki tak, że najpierw czyszczona jest przestrzeń wewnątrz wykresu czarnym prostokątem a kolejno wrysowywane są kolejne prążki z wyników analizy fft od pierwszego do prążka nr 107. Sama transformata liczy 128 prążków w paśmie do 12kHz a więc jeden prążek to ok. 12000/128 = 93.75Hz. 107 prążków to właśnie ok. 10kHz.
Grafika odświeżana jest ok. 3 razy na sekundę ale wydaje się, że można tą częstotliwość istotnie zwiększyć.
Przygotowałem kilka filmów z działania tej funkcjonalności i każdy z nich dodatkowo skomentuję uzupełniając nagrana treść dodatkowymi wyjaśnieniami. Do prób wykorzystałem pokazany wcześniej, podwójny generator funkcyjny FY6900 posiadający dwa niezależne generatory.
FFT - podstawowa funkcjonalność
Pierwszy z filmów pokazuje istotę działania FFT. Zaczynam z sygnałem ok. 2kHz poniżej częstotliwości pracy (filtr Hilberta wycina częstotliwości wyższe od częstotliwości pracy) i zwiększam amplitudę tego sygnału do poziomu S9 i wyżej a następnie przestrajam odbiornik pokazując jak prążek sygnału wędruje po wykresie. Kierunek "wędrówki" prążka można oczywiście odwrócić - jest to czynność do wyboru w trakcie programowania. Chciałbym zwrócić tu uwagę na dwa fakty. Po pierwsze im silniejszy sygnał tym więcej pobocznych prążków pojawia się na wykresie co wynika z działania fft na skończonej ilości danych, ze skończoną częstotliwością próbkowania itd. I choć wydaje się, że prążki poboczne są dość duże to trzeba zwrócić uwagę, że na przyjętej skali skok od S2 do S3 jest niemal tak samo widoczny jak z S7 do S9+20 więc dysponując ekranem o dużej rozdzielczości w pionie udałoby się istotnie "wyszczuplić" wizualizację odbieranego sygnału. Zdarza się również, że dla pewnych ustawień częstotliwości dla prążka znika otoczenie artefaktów i jest on samotny na skali co wynika z ograniczeń analizy (krok fft, częstotliwość próbkowania) - w tych przypadkach analiza fft idealnie "trafia" z obliczeniami w wielokrotność odbieranego sygnału. Powiększając dokładność analizy fft na pewno uda się zmniejszyć/wyeliminować opisane zjawiska ale zachodzi pytanie czy procesor "uciągnie" dokładniejszą analizę z jednej strony oraz czy jest to potrzebne dla zastosowanej dokładności grafiki.
FFT - dwa sygnały
W tej próbie używam dwóch sygnałów oddalonych od siebie o 2kHz. Oba sygnały leżą poniżej częstotliwości odbioru a więc nie są tłumione przez filtr transformaty Hilberta i słychać je dobrze w głośniku. Wspominałem wcześniej, że ze względu na częstotliwość próbkowania dobre wyniki ograniczone są do częstotliwości równej połowie tej częstotliwości i to należałoby zapewnić zanim sygnał z mieszacza dostanie się do części cyfrowej (DSP). Wspominałem też, że w Walecie odpowiedzialne za to są wzmacniacze wstępne z kondensatorami ograniczającymi pasmo pracy tych wzmacniaczy. Przy zastosowanych wartościach RC: R8/C8 i R9/C10 (10k/4.7n) częstotliwości graniczne to ok. 3.3kHz i widać to podczas oddalania się częstotliwości generatorów od częstotliwości odbioru. Spadek jest jednak wolny choć na tyle duży, że dla częstotliwości powyżej 12kHz jest już istotny. Dlatego po oddaleniu się od częstotliwości sygnałów powyżej 12kHz widać jedynie słaby ślad z prawej strony wykresu związany z tzw. aliasowaniem. Ale Walet to nie sprzęt wyczynowy ale raczej boisko treningowe i po prostu trzeba mieć świadomość ograniczeń zastosowanych narzędzi. Najlepszym wyjściem w tej sytuacji mogłyby na przykład być silne filtry analogowe dolnoprzepustowe z pasmem do ok. 10kHz za mieszaczem Tayloe.
FFT - dwa sygnały po obu stronach częstotliwości pracy
Ten film pokazuje kolejne ograniczenie związane z procedurą fft. Początkowo skupiałem się jedynie na uruchomieniu fft korzystając z narzędzi Arduino Audio Tools nie wchodząc w szczegóły wyników ale kiedy zacząłem analizować rezultaty tych procedur okazało się, że wszystkie dostępne procedury fft są typu rzeczywistego co oznacza, że procedura transformaty rozpoznaje jedynie częstotliwość składnika sygnału oraz jego amplitudę ale nie jest w stanie stwierdzić czy sygnał leży powyżej częstotliwości odbioru czy poniżej. W głośniku oczywiście daje się to rozróżnić bo filtr Hilberta wycina jedną ze stron i słychać to wyraźnie podczas prób z jednym sygnałem. Narzędzia fft z puli Arduino Audio Tools celują w analizę typowych sygnałów audio a więc skupione są na tworzeniu grafów dla muzyki i mowy i dopiera wnikliwa analiza opisów tych narzędzi pozwala na jednoznaczną interpretację wyników. Sygnał do analizy fft pobierany jest z jednego z kanałów (w naszym przypadku albo I albo Q) a każdy z kanałów zawiera sygnały zarówno poniżej jak i powyżej częstotliwości odbioru. Filtr Hiberta usuwa dolną lub górną składową odbieranego widma dlatego w głośniku jest efekt odbioru jednowstęgowego.
Rozwiązaniem w tej sytuacji jest tzw. kompleksowa (complex) analiza fft korzystająca z danych z obu kanałów I oraz Q. Jak się można domyślać to jakby dwie transformaty fft wykonywane jednocześnie, co należy rozpatrywać w kontekście mocy procesora, ale dające w wyniku dwukrotnie więcej danych dla częstotliwości poniżej i powyżej częstotliwości odbioru. Stan obecny, obrazujący wymieszane częstotliwości zapewnia ich rozróżnienie właśnie poprzez badanie kierunku przesuwania się prążków podczas strojenia.
FFT - co "widzi" fft po dołączeniu mojej anteny
Ten film to ciekawostka pokazująca stan zanieczyszczenia mojego środowiska radiowego. Na wejście antenowe urządzenia dołączyłem antenę. W paśmie pracy mam zakłócenia, o sile przekraczającej S9, wypełniające cały analizowany zakres odbioru.
Pisałem w tytule o fft jako o "never ending story" bo czeka mnie próba wykonania pełnej (complex) analizy fft dającej rzeczywiste, w funkcji częstotliwości, wyniki analizy odbieranych sygnałów. Zrobiłem już wstępne rozeznanie i mam narzędzie, czyli gotową do użycia funkcję complex fft z tym, że na razie nie mam pojęcia jak podpiąć ją pod istniejące struktury Audio Tools.
Niemniej, w najbliższych dniach opublikuję pełny opis osiągniętego już stanu. Funkcjonalność fft wymaga co najmniej pokazanej wyżej dodatkowej grafiki więc pewnie to co opublikuję będzie mieć wyższy numer wersji. Nowsza wersja, zawierająca fft, nie wymaga modyfikacji sprzętowych co może być w tej sytuacji pewnym pocieszeniem.
cdn. lj
Github
Ostatnio pisałem o uruchomieniu działania analizy fft i spróbowałem wykonać wizualizację otrzymanych wyników. Zacząłem od wykresu "słupkowego" bo wydał mi się najłatwiejszy do wykonania a w czasie programowania tej funkcjonalności pojawiły się kolejne problemy do rozwiązania o czym dalej.
[Obrazek: https://lx-net.pl/walet/image/fft_01.jpg]
Pole gdzie do tej pory pojawiały się kolorowe linie związane z siłą odbieranego sygnału zastąpiłem wykresem częstotliwościowo - amplitudowym gdzie oś częstotliwości to 10kHz a oś amplitudy to siła odbieranego sygnału od S1 do S9+20 (i wyżej). Ze względu na rozpiętość amplitudy wykres należy traktować jedynie informacyjnie. "Słupki lub prążki" sygnału mają kolor w zależności od jego siły od szarego przez zielony do żółtego i kończąc na czerwonym dla najsilniejszych. Ze względu na częstotliwość próbkowania można się spodziewać informacji co najwyżej z połowy tej częstotliwości a zatem do 12kHz ale ze względów praktycznych skala ma zakres do 10kHz bo dość łatwo było utworzyć obraz właśnie w tym zakresie przydzielając każdemu "prążkowi" dwa pixel-e szerokości.
[Obrazek: https://lx-net.pl/walet/image/fft_00.jpg]
Na potrzeby obrazowania fft powstała grafika o odpowiednim rozmiarze stanowiąca stałe "tło" analizy fft. Prążki rysowane są w sposób nie naruszający tej grafiki tak, że najpierw czyszczona jest przestrzeń wewnątrz wykresu czarnym prostokątem a kolejno wrysowywane są kolejne prążki z wyników analizy fft od pierwszego do prążka nr 107. Sama transformata liczy 128 prążków w paśmie do 12kHz a więc jeden prążek to ok. 12000/128 = 93.75Hz. 107 prążków to właśnie ok. 10kHz.
Grafika odświeżana jest ok. 3 razy na sekundę ale wydaje się, że można tą częstotliwość istotnie zwiększyć.
Przygotowałem kilka filmów z działania tej funkcjonalności i każdy z nich dodatkowo skomentuję uzupełniając nagrana treść dodatkowymi wyjaśnieniami. Do prób wykorzystałem pokazany wcześniej, podwójny generator funkcyjny FY6900 posiadający dwa niezależne generatory.
FFT - podstawowa funkcjonalność
Pierwszy z filmów pokazuje istotę działania FFT. Zaczynam z sygnałem ok. 2kHz poniżej częstotliwości pracy (filtr Hilberta wycina częstotliwości wyższe od częstotliwości pracy) i zwiększam amplitudę tego sygnału do poziomu S9 i wyżej a następnie przestrajam odbiornik pokazując jak prążek sygnału wędruje po wykresie. Kierunek "wędrówki" prążka można oczywiście odwrócić - jest to czynność do wyboru w trakcie programowania. Chciałbym zwrócić tu uwagę na dwa fakty. Po pierwsze im silniejszy sygnał tym więcej pobocznych prążków pojawia się na wykresie co wynika z działania fft na skończonej ilości danych, ze skończoną częstotliwością próbkowania itd. I choć wydaje się, że prążki poboczne są dość duże to trzeba zwrócić uwagę, że na przyjętej skali skok od S2 do S3 jest niemal tak samo widoczny jak z S7 do S9+20 więc dysponując ekranem o dużej rozdzielczości w pionie udałoby się istotnie "wyszczuplić" wizualizację odbieranego sygnału. Zdarza się również, że dla pewnych ustawień częstotliwości dla prążka znika otoczenie artefaktów i jest on samotny na skali co wynika z ograniczeń analizy (krok fft, częstotliwość próbkowania) - w tych przypadkach analiza fft idealnie "trafia" z obliczeniami w wielokrotność odbieranego sygnału. Powiększając dokładność analizy fft na pewno uda się zmniejszyć/wyeliminować opisane zjawiska ale zachodzi pytanie czy procesor "uciągnie" dokładniejszą analizę z jednej strony oraz czy jest to potrzebne dla zastosowanej dokładności grafiki.
FFT - dwa sygnały
W tej próbie używam dwóch sygnałów oddalonych od siebie o 2kHz. Oba sygnały leżą poniżej częstotliwości odbioru a więc nie są tłumione przez filtr transformaty Hilberta i słychać je dobrze w głośniku. Wspominałem wcześniej, że ze względu na częstotliwość próbkowania dobre wyniki ograniczone są do częstotliwości równej połowie tej częstotliwości i to należałoby zapewnić zanim sygnał z mieszacza dostanie się do części cyfrowej (DSP). Wspominałem też, że w Walecie odpowiedzialne za to są wzmacniacze wstępne z kondensatorami ograniczającymi pasmo pracy tych wzmacniaczy. Przy zastosowanych wartościach RC: R8/C8 i R9/C10 (10k/4.7n) częstotliwości graniczne to ok. 3.3kHz i widać to podczas oddalania się częstotliwości generatorów od częstotliwości odbioru. Spadek jest jednak wolny choć na tyle duży, że dla częstotliwości powyżej 12kHz jest już istotny. Dlatego po oddaleniu się od częstotliwości sygnałów powyżej 12kHz widać jedynie słaby ślad z prawej strony wykresu związany z tzw. aliasowaniem. Ale Walet to nie sprzęt wyczynowy ale raczej boisko treningowe i po prostu trzeba mieć świadomość ograniczeń zastosowanych narzędzi. Najlepszym wyjściem w tej sytuacji mogłyby na przykład być silne filtry analogowe dolnoprzepustowe z pasmem do ok. 10kHz za mieszaczem Tayloe.
FFT - dwa sygnały po obu stronach częstotliwości pracy
Ten film pokazuje kolejne ograniczenie związane z procedurą fft. Początkowo skupiałem się jedynie na uruchomieniu fft korzystając z narzędzi Arduino Audio Tools nie wchodząc w szczegóły wyników ale kiedy zacząłem analizować rezultaty tych procedur okazało się, że wszystkie dostępne procedury fft są typu rzeczywistego co oznacza, że procedura transformaty rozpoznaje jedynie częstotliwość składnika sygnału oraz jego amplitudę ale nie jest w stanie stwierdzić czy sygnał leży powyżej częstotliwości odbioru czy poniżej. W głośniku oczywiście daje się to rozróżnić bo filtr Hilberta wycina jedną ze stron i słychać to wyraźnie podczas prób z jednym sygnałem. Narzędzia fft z puli Arduino Audio Tools celują w analizę typowych sygnałów audio a więc skupione są na tworzeniu grafów dla muzyki i mowy i dopiera wnikliwa analiza opisów tych narzędzi pozwala na jednoznaczną interpretację wyników. Sygnał do analizy fft pobierany jest z jednego z kanałów (w naszym przypadku albo I albo Q) a każdy z kanałów zawiera sygnały zarówno poniżej jak i powyżej częstotliwości odbioru. Filtr Hiberta usuwa dolną lub górną składową odbieranego widma dlatego w głośniku jest efekt odbioru jednowstęgowego.
Rozwiązaniem w tej sytuacji jest tzw. kompleksowa (complex) analiza fft korzystająca z danych z obu kanałów I oraz Q. Jak się można domyślać to jakby dwie transformaty fft wykonywane jednocześnie, co należy rozpatrywać w kontekście mocy procesora, ale dające w wyniku dwukrotnie więcej danych dla częstotliwości poniżej i powyżej częstotliwości odbioru. Stan obecny, obrazujący wymieszane częstotliwości zapewnia ich rozróżnienie właśnie poprzez badanie kierunku przesuwania się prążków podczas strojenia.
FFT - co "widzi" fft po dołączeniu mojej anteny
Ten film to ciekawostka pokazująca stan zanieczyszczenia mojego środowiska radiowego. Na wejście antenowe urządzenia dołączyłem antenę. W paśmie pracy mam zakłócenia, o sile przekraczającej S9, wypełniające cały analizowany zakres odbioru.
Pisałem w tytule o fft jako o "never ending story" bo czeka mnie próba wykonania pełnej (complex) analizy fft dającej rzeczywiste, w funkcji częstotliwości, wyniki analizy odbieranych sygnałów. Zrobiłem już wstępne rozeznanie i mam narzędzie, czyli gotową do użycia funkcję complex fft z tym, że na razie nie mam pojęcia jak podpiąć ją pod istniejące struktury Audio Tools.
Niemniej, w najbliższych dniach opublikuję pełny opis osiągniętego już stanu. Funkcjonalność fft wymaga co najmniej pokazanej wyżej dodatkowej grafiki więc pewnie to co opublikuję będzie mieć wyższy numer wersji. Nowsza wersja, zawierająca fft, nie wymaga modyfikacji sprzętowych co może być w tej sytuacji pewnym pocieszeniem.
cdn. lj
Github

