Filtracja Sygnału Zespolonego: Teoria i Zastosowania

Artykuł ten poświęcony jest filtracji sygnałów zespolonych, ich teorii oraz praktycznym zastosowaniom. Filtracja sygnałów jest kluczowym elementem w wielu dziedzinach nauki i techniki, od telekomunikacji po przetwarzanie obrazów.

Podstawy Teoretyczne

Definicja Sygnału i Klasyfikacje

Na początku zdefiniujemy pojęcie sygnału oraz przedstawimy jego podstawowe klasyfikacje. Sygnał może być rozumiany jako funkcja, która niesie informacje. Klasyfikacje sygnałów obejmują sygnały ciągłe i dyskretne, deterministyczne i losowe, okresowe i nieokresowe.

Reprezentacje Sygnałów

Reprezentacje sygnałów w dziedzinie czasu: Sygnały mogą być reprezentowane w dziedzinie czasu, co pozwala na analizę ich zachowania w czasie. Przetwarzanie analogowo-cyfrowe jest kluczowe dla konwersji sygnałów analogowych na formę cyfrową, umożliwiającą ich dalszą obróbkę. Próbkowanie jest procesem dyskretyzacji sygnału ciągłego w czasie. Twierdzenie o próbkowaniu (Nyquista-Shannona) określa minimalną częstotliwość próbkowania, która jest niezbędna do odtworzenia sygnału bez utraty informacji. Odtwarzanie sygnałów z próbek jest procesem odwrotnym do próbkowania, mającym na celu przywrócenie sygnału ciągłego na podstawie jego próbek.

Reprezentacje sygnałów w dziedzinie częstotliwości: Sygnały mogą być również analizowane w dziedzinie częstotliwości, co pozwala na identyfikację składowych częstotliwościowych. Widmo amplitudowe sygnałów dla czasu ciągłego i dyskretnego jest graficznym przedstawieniem amplitudy poszczególnych składowych częstotliwościowych sygnału.

Dyskretne Przekształcenie Fouriera (DPF)

Dyskretne przekształcenie Fouriera (DPF): Jest to podstawowe narzędzie do analizy widmowej sygnałów dyskretnych. Wykorzystywane jest do wyznaczania widma zespolonego, amplitudowego i fazowego sygnałów. Należy pamiętać o zjawisku przecieku widma, które może wpływać na dokładność analizy. Repróbkowanie jest techniką zmiany częstotliwości próbkowania sygnału, co może być przydatne w różnych zastosowaniach.

Przeczytaj także: Definicja i pomiar filtracji kłębuszkowej

Estymacja Sygnałów

Estymator: Narzędzie służące do szacowania parametrów sygnału. Ważne jest zrozumienie błędów estymacji, które dzielą się na systematyczne i losowe. Minimalizacja tych błędów jest kluczowa dla uzyskania dokładnych wyników.

Metody Filtracji Sygnałów

Metody Czasowe

Metody czasowo-ciągłe i czasowo-dyskretne: Metody te operują bezpośrednio na sygnale w dziedzinie czasu. Metody punktowe analizują sygnał w poszczególnych punktach czasowych. Metody natychmiastowe reagują na bieżącą wartość sygnału. Metody progowe, takie jak detekcja przejścia sygnału przez zero, są używane do identyfikacji określonych zdarzeń w sygnale. Metody korelacyjne służą do wykrywania podobieństw między sygnałami.

Filtracja Cyfrowa i Uśrednianie w Dziedzinie Czasu

Filtracja cyfrowa: Proces usuwania niepożądanych składowych z sygnału cyfrowego. Uśrednianie sygnałów w dziedzinie czasu jest prostą metodą redukcji szumu. Metoda Monte Carlo i wnioskowanie bayesowskie są zaawansowanymi technikami statystycznymi, które mogą być używane do filtracji i estymacji sygnałów.

Metody Widmowe

Metody widmowe: Wykorzystują reprezentację sygnału w dziedzinie częstotliwości do filtracji. Metody interpolacyjne DFT (IpDFT) pozwalają na dokładniejsze wyznaczenie widma sygnału. Autokorelacja w dziedzinie częstotliwości jest używana do analizy okresowości sygnałów. Filtracja cyfrowa w dziedzinie częstotliwości polega na modyfikacji widma sygnału w celu usunięcia niepożądanych składowych. Uśrednianie sygnałów w dziedzinie częstotliwości może poprawić stosunek sygnału do szumu.

Metoda Cepstralna

Metoda cepstralna: Technika analizy sygnałów, która jest szczególnie przydatna w przetwarzaniu mowy i analizie drgań.

Przeczytaj także: Webber AP8400 - wymiana filtrów

Wybrane Zastosowania Metod

Filtracja sygnałów zespolonych znajduje szerokie zastosowanie w różnych dziedzinach. Przykłady obejmują:

  • Mostek cyfrowy: Do precyzyjnych pomiarów impedancji.
  • Watomierz cyfrowy: Do pomiaru mocy elektrycznej.

Analiza i Synteza Sygnałów - Przykład w Języku C

Poniżej przedstawiono fragmenty kodu w języku C, które ilustrują analizę i syntezę sygnałów za pomocą szeregu Fouriera. Program wczytuje tablicę próbek, dokonuje analizy (rozkłada funkcję czasu na harmoniczne) i syntezy (składa z harmonicznych do funkcji czasu).

Kod Programu

Definicje stałych i typów:

#define SampleNumDiv2 128#define SampleNum (2*SampleNumDiv2)#define Pi 3.141592654#define DoublePi 6.283185307typedef double real ;typedef real SampleArrayType [ SampleNum + 1 ] ;typedef real CoofArrType [ SampleNumDiv2 + 1 ] ;

Funkcja wczytująca próbki:

void InputSampleTable ( void ) { unsigned short Loop ; for ( Loop = 1 ; Loop < SampleNumDiv2 ; Loop ++ ) InpSampleTable [ Loop ] = 5.0 ; InpSampleTable [ SampleNumDiv2 ] = 0.0 ; for ( Loop = SampleNumDiv2 + 1 ; Loop < SampleNum ; Loop ++ ) InpSampleTable [ Loop ] = -5.0 ; InpSampleTable [ 0 ] = 0.0 ; InpSampleTable [ SampleNum ] = 0.0 ; T = 0.1 ;}

Funkcja analizy Fouriera:

Przeczytaj także: Optymalne rozcieńczenie bimbru

void FourierSeries ( real ATable [ ] , real BTable [ ] , real SampleTable [ ] ) { unsigned short HarmInx ; unsigned short SampleInx ; real DAngle ; real Angle ; for ( HarmInx = 0 ; HarmInx <= SampleNumDiv2 ; HarmInx ++ ) { ATable [ HarmInx ] = 0.0 ; BTable [ HarmInx ] = 0.0 ; } for ( SampleInx = 0 ; SampleInx <= SampleNum ; SampleInx ++ ) ATable [ 0 ] = ATable [ 0 ] + SampleTable [ SampleInx ] ; for ( HarmInx = 1 ; HarmInx <= SampleNumDiv2 ; HarmInx ++ ) { DAngle = DoublePi * ( real ) HarmInx / ( real ) SampleNum ; for ( SampleInx = 0 ; SampleInx <= SampleNum ; SampleInx ++ ) { Angle = DAngle * ( real ) SampleInx ; ATable [ HarmInx ] = ATable [ HarmInx ] + SampleTable [ SampleInx ] * cos ( Angle ) ; BTable [ HarmInx ] = BTable [ HarmInx ] + SampleTable [ SampleInx ] * sin ( Angle ) ; } } ATable [ 0 ] = ATable [ 0 ] / ( real ) SampleNum ; BTable [ 0 ] = 0.0 ; for ( HarmInx = 1 ; HarmInx <= SampleNumDiv2 ; HarmInx ++ ) { ATable [ HarmInx ] = ATable [ HarmInx ] / ( real ) SampleNumDiv2 ; BTable [ HarmInx ] = BTable [ HarmInx ] / ( real ) SampleNumDiv2 ; }}

Funkcja syntezy:

void TestFourierSeries ( void ) { unsigned short SampleInx ; unsigned short HarmInx ; real SigVal ; real DAngle ; real Angle ; real DeltaVal ; real Percent ; printf ( "\n\nTesty\n" ) ; for ( SampleInx = 0 ; SampleInx <= SampleNum ; SampleInx ++ ) { DAngle = DoublePi * ( real ) SampleInx / ( real ) SampleNum ; SigVal = OutATable [ 0 ] ; for ( HarmInx = 1 ; HarmInx <= SampleNumDiv2 ; HarmInx ++ ) { Angle = DAngle * ( real ) HarmInx ; SigVal = SigVal + OutATable [ HarmInx ] * cos ( Angle ) + OutBTable [ HarmInx ] * sin ( Angle ) ; } DeltaVal = ( real ) InpSampleTable [ SampleInx ] - SigVal ; printf ( "Probka [ %d ] = %f, obl. wart.=%f [rozn.=%f" , SampleInx , InpSampleTable [ SampleInx ] , SigVal , DeltaVal ) ; if ( InpSampleTable [ SampleInx ] ) { Percent = 100.0 * DeltaVal / ( real ) InpSampleTable [ SampleInx ] ; printf ( " :%f%%" , Percent ) ; } printf ( "]\n" ) ; }}

Funkcja main:

int main ( int argc , char ** argv ) { unsigned short Loop ; InputSampleTable ( ) ; for ( Loop = 0 ; Loop <= SampleNum ; Loop ++ ) printf ( "Probka [ %d ] = %f\n" , Loop , InpSampleTable [ Loop ] ) ; printf ( "Liczba probek: %d\n" , SampleNum + 1 ) ; printf ( "Okres sygnalu: %f ms\n" , 1000.0 * T ) ; printf ( "**********************************\r\n" ) ; printf ( "Okres probkowania: %f ms\n" , 1000.0 * T / ( real ) SampleNum ) ; printf ( "Pulsacja podstawowa: %f rad/s\n" , DoublePi / T ) ; printf ( "Czestotliwosc podstawowa: %f Hz\n\n" , 1.0 / T ) ; FourierSeries ( OutATable , OutBTable , InpSampleTable ) ; printf ( "Skladowa stala: A.0= %f\n" , OutATable [ 0 ] ) ; for ( Loop = 1 ; Loop <= SampleNumDiv2 ; Loop ++ ) { printf ( "Harm. %d: A.%d=%f B.%d=%f\n" , Loop , Loop , OutATable [ Loop ] , Loop , OutBTable [ Loop ] ) ; } TestFourierSeries ( ) ;}

Wyniki Badań

Przy założeniu, że pobranie wszystkich próbek zajęło T=0.1s, otrzymujemy:

Okres sygnalu: 100.000000 msOkres probkowania: 0.390625 msPulsacja podstawowa: 62.831853 rad/sCzestotliwosc podstawowa: 10.000000 Hz/s

Z założonej liczby próbek daje się uzyskać 128 harmonicznych (od harmonicznej zerowej do harmonicznej o numerze 127). Poniżej przedstawiono kilka pierwszych harmonicznych:

Skladowa stala: A.0= 0.000000Harm. 1: A.1= 0.000000 B.1= 6.365878Harm. 2: A.2=-0.000000 B.2=-0.000000Harm. 3: A.3= 0.000000 B.3= 2.121107Harm. 4: A.4=-0.000000 B.4=-0.000000Harm. 5: A.5= 0.000000 B.5= 1.271641

Wszystkie współczynniki A[n] mają wartość zerową, a współczynniki B[n] zerują się w przypadku parzystych numerów harmonicznych. Ich wartości są zgodne z przewidywaniami teoretycznymi.

Synteza sygnału wyjściowego (złożenie z harmonicznych) pokazuje, że program poprawnie oblicza wartość próbki, różnicę od wartości założonej oraz błąd w procentach.

Poniższa tabela przedstawia wybrane dane z analizy harmonicznych:

Harmoniczna (n) Współczynnik B[n] (obliczony) Współczynnik B[n] (teoretyczny)
1 6.365878 6.366198
3 2.121107 2.122066
5 1.271641 1.273240

tags: #filtracja #sygnału #zespolonego #teoria #i #zastosowania

Popularne posty: