Opóźnienie sygnału

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
Maciek1988
Posty: 2
Rejestracja: 25 lut 2013 21:36
Wersja środowiska: LabVIEW 2010

Opóźnienie sygnału

Post autor: Maciek1988 »

Mam problem jak opóźnić sygnał. Symuluje sygnał sin o dowolnej częstotliwości i muszę go opóźnić o określoną wartość np. 0.5 okresu a następnie wymnożyć tak otrzymany sygnał z sygnałem początkowym. Proszę o pomoc.
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Opóźnienie sygnału

Post autor: Pitol »

Skoro symulujesz, to jaki problem symulować dwa sygnały, przesunięte wobec siebie odpowiednio? Czy to rozwiąże Twój problem?
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Maciek1988
Posty: 2
Rejestracja: 25 lut 2013 21:36
Wersja środowiska: LabVIEW 2010

Opóźnienie sygnału

Post autor: Maciek1988 »

Nie bardzo. Sygnał musi być jeden. Ponieważ takich przesunięć będzie wykonywanych kilka, a następnie tak poprzesuwane sygnały będą sumowane. Jeżeli tych przesunięć będzie więcej musiałbym generować więcej sygnałów.
Awatar użytkownika
koofaya
Posty: 38
Rejestracja: 23 sty 2014 14:51
Wersja środowiska: LabVIEW 2014

Re: Opóźnienie sygnału

Post autor: koofaya »

W palecie Signal Processing >> Sig Operation znajduje się bloczek Y = X[i-n].
Jeżeli masz zainstalowany Digital Filter Design, to jest tam alternatywa dla powyższej funkcji - Int Delay, której zaletą jest to, że posiada Error In/Out.
W obu przypadkach musisz przeliczyć czas na liczbę próbek.

Jeżeli jednak chcesz uzyskać więcej wersji sygnału opóźnionych o różne wartości, pojawia się problem. U mnie program nie wyrabiał, gdy wrzuciłem więcej niż jeden z tych bloczków, co wynika pewnie z ich zasady działania. Dlatego wypracowałem własne podejście - łopatologiczne, ale na pewno bardziej wydajne.

Mianowicie zastosowałem shift register, dzięki czemu mogłem wrócić do wcześniejszych wartości sygnału. Możesz z lewej strony stworzyć tyle terminali, ile potrzebujesz. Jeżeli np. masz 1024 próbki i chcesz opóźniać sygnał o 1200 próbek, to potrzebujesz danych z dwóch poprzednich obiegów pętli. Następnie scalasz to za pomocą Build Array w jedną tablicę 1D i za pomocą funkcji Index Array/Array Subset możesz się dobrać do dowolnego fragmentu sygnału.
Jeżeli program jest bardziej złożony - ja na przykład miałem 2 subVI, które stosowały tę metodę - możesz je zrobić na zasadzie FGV.
ODPOWIEDZ