Witam wszystkich,
Pracując nad projektem w którym zastosować muszę odwrotną transformatę Fourriera do syntezy sygnału na bazie jego zmodyfikowanego widma natrafiłem na pewien problem. Żeby przybliżyć zagadnienie podaję opis algorytmu:
1. Wyznaczam widmo częstotliwościowe (Amplituda i Faza)
2. Modyfikuję amplitudy dla interesującej mnie częstotliwości ( w zamieszczonym przykładzie nie ma tego kroku - żeby nie zaciemniać ).
3. Konwertuję widmo do postaci składającej się z części rzeczywistej (Re) i urojonej (Im).
4. Z Re oraz Im tworzę liczbę zespoloną w postaci Re + Im*i.
5. Widmo będące już tablicą liczb zespolonych podaję do funkcji IFFT.
6. Buduję waveforma żeby "odzyskać" pierwotny sygnał.
Problemem jest to, że po zastosowaniu IFFT mam połowę mniej próbek i inną amplitudę. Nie świadczy to jednak o tym, że mam o połowę krótszy sygnał, ale wygląda to tak jakby jego próbkowanie zmniejszyło się o połowę.
Czy ktoś może zajmował się czymś podobnym?
W czym popełniam błąd?
Z góry dzięki za wszelkie rady,
Pozdrawiam
Daję screeny i VI (wymaga Sound & Vibration Toolkit)
IFFT - synteza sygnału na bazie jego widma
IFFT - synteza sygnału na bazie jego widma
- Załączniki
-
- FFT tutorial.vi
- (24.27 KiB) Pobrany 371 razy
- rivui
- Posty: 27
- Rejestracja: 01 lut 2010 16:50
- Wersja środowiska: LabVIEW 8.5
- Lokalizacja: Kopenhaga
Re: IFFT - synteza sygnału na bazie jego widma
Hej
Z tego co na szybko zobaczylem to inaczej budujesz dwa Waveform'y ktore potem porownujesz. Pierwszy budujesz dajac tablice wartosci Y i dt natomiast drugi dajac tylko wartosci Y przez co dt bedzie wartoscia default. Rozwin strukture build waveform i daj te sama wartosc dt. Niestety mam LabView 8.5 w pracy wiec nie moge otworzyc Twojego pliku.
Pozdrawiam
Z tego co na szybko zobaczylem to inaczej budujesz dwa Waveform'y ktore potem porownujesz. Pierwszy budujesz dajac tablice wartosci Y i dt natomiast drugi dajac tylko wartosci Y przez co dt bedzie wartoscia default. Rozwin strukture build waveform i daj te sama wartosc dt. Niestety mam LabView 8.5 w pracy wiec nie moge otworzyc Twojego pliku.
Pozdrawiam
- smiga
- Administrator
- Posty: 817
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: IFFT - synteza sygnału na bazie jego widma
Jak wyciągniesz sobie informację z bloczka SVFA Magnitude and Phase... Spectrum info/spectral info/FFT size to zobaczysz, że masz 2000, składowa rzeczywista i urojona mają po 1000, ich złożenie (Re/Im To Complex) daje też 1000 ... więc to na pewno nie jest problem dt.
- jogurt_owocowy
- Posty: 1317
- Rejestracja: 30 lis 2004 00:00
- Wersja środowiska: LabVIEW 2015
- Lokalizacja: Kraków
IFFT - synteza sygnału na bazie jego widma
W tym, że bloczek liczący widmo zwraca najwyraźniej nie pełne widmo, a tylko jego dolną połowę (niosącą pełną informację o sygnale, jeśli ten jest rzeczywisty). W istniejącym rozwiązaniu musiałbyś po modyfikacjach w dziedzinie widmowej zrekonstruować pełne symetryczne widmo, "odbijając" je względem częstotliwości Nyquista (i dbając o kilka ważnych szczegółów). Moim zdaniem, lepszym rozwiązaniem jest użycie "surowej" FFT do policzenia pełnego widma, pracy na nim i powrócenie do dziedziny czasu tak, jak to robisz teraz.garteb pisze:W czym popełniam błąd?
Pozdrawiam
Re: IFFT - synteza sygnału na bazie jego widma
Po przeczytaniu porad doszedłem do czegoś co już działa bliżej moich oczekiwań.
Pomogło symetryczne odbicie widma. Nadal jednak miałem problem z wartością amplitud.
Okazało się, że pomogło pomnożenie części Re i Im przez liczbę próbek podzieloną przez 1,41 (pierwiastek z 2).
Kojarzy mi się to z RMS dla przebiegu sinusoidalnego - czy to przemnożenie na czuja ma jakieś poparcie teoretyczne?
(szukałem informacji odnośnie tego jak w praktyce zrealizować krok po kroku syntezę z użyciem IFFT ale nie natknąłem się na coś takiego)
W załączeniu screeny.
Pomogło symetryczne odbicie widma. Nadal jednak miałem problem z wartością amplitud.
Okazało się, że pomogło pomnożenie części Re i Im przez liczbę próbek podzieloną przez 1,41 (pierwiastek z 2).
Kojarzy mi się to z RMS dla przebiegu sinusoidalnego - czy to przemnożenie na czuja ma jakieś poparcie teoretyczne?
(szukałem informacji odnośnie tego jak w praktyce zrealizować krok po kroku syntezę z użyciem IFFT ale nie natknąłem się na coś takiego)
W załączeniu screeny.