Mam sygnał, że chciałbym, aby skopiować gdy:Znalezienie przejście przez zero, które będą pozytywne i przejście przez zero, które będą negatywne
1) rozpoczyna się od przejścia przez zero będzie dodatni
2) skopiuj ustawioną liczbę punktów (np. 8000)
3) i po skopiowaniu 8000 punktów kontynuuj dodawanie punktów, aż zostanie znaleziona sekcja z przekroczeniem zera.
Mogę znaleźć przejście przez zero, ale mam pewne problemy z wiedzą, jak powiedzieć, kiedy jest przejście przez zero, które będzie dodatnie i/lub przejście przez zero będzie ujemne. Mam też kłopoty z dodaniem następnej sekcji punktów po 8000 punktów na koniec (Więc pytanie # 1 i pytanie # 3pogrubioną mam mieć problemy)
Uwaga: należy pamiętać, że sygnał, którego używam, jest sygnałem dźwiękowym, więc nie będzie tak miły jak proste równanie.
Dołączyłem kod testowy wraz z obrazem. Używam Matlab/oktawę
clear all, clc, tic, clf;
n=16000
t=linspace(0,2*pi,n);
y=cos(6*t)+sin(4*t);
%find zero crossings
t1=y(1:n-1);
t2=y(2:n);
tt=t1.*t2;
indx=find(tt<0)
%1) start at first zero crossing going positive
%2) get 8000 pts
%3) and after the 8000 points continue appending points until a zero crossing going down section is found
new_y=y(indx(1,1):8000); %start at zero section found get 8000 pts
subplot(2,1,1);plot(y);title('Original Signal')
subplot(2,1,2);plot(new_y);title('New signal')
Będziesz prawdopodobnie chcesz filtrować sygnał, aby usunąć zakłócenia wysokiej częstotliwości przed wykonaniem tego testu do unikaj wielokrotnych przepraw przez zero. – craigim
dziękuję Craigim za pomoc, ale co to znaczy "test x dla bieżącego punktu i ostatniego punktu". O czym powinienem je przetestować? –
Dokładnie to, jak to zrobisz, będzie zależało od szczegółów, jak czytasz dane, ale jeśli twój indeks pętli to 'n', możesz zrobić coś takiego jak' x = znak (t (n-1)) - znak (t (n)); jeśli x> 0; dodaj 8000 pkt; elseif x == 0; dołącz punkt; elseif x <0; przestań dodawać punkty; koniec'. – craigim