Strona 1 z 1

Opóźnienie sygnału

: 25 lut 2013 21:41
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.

Opóźnienie sygnału

: 25 lut 2013 23:01
autor: Pitol
Skoro symulujesz, to jaki problem symulować dwa sygnały, przesunięte wobec siebie odpowiednio? Czy to rozwiąże Twój problem?

Opóźnienie sygnału

: 25 lut 2013 23:08
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.

Re: Opóźnienie sygnału

: 04 lut 2015 10:52
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.