Opóźnienie sygnału
-
- Posty: 2
- Rejestracja: 25 lut 2013 21:36
- Wersja środowiska: LabVIEW 2010
Opóźnienie sygnału
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.
- Pitol
- Moderator
- Posty: 982
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Opóźnienie sygnału
Skoro symulujesz, to jaki problem symulować dwa sygnały, przesunięte wobec siebie odpowiednio? Czy to rozwiąże Twój problem?
-
- Posty: 2
- Rejestracja: 25 lut 2013 21:36
- Wersja środowiska: LabVIEW 2010
Opóźnienie sygnału
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.
Re: Opóźnienie sygnału
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.
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.