Filtracja Sygnału Zespolonego: Teoria i Zastosowania
- Szczegóły
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

