Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- N equ 2048 ;próbki na przerobienie w okresie próbkowanie ok 48kHz
- ;bezpieczny zakres to 60 - 100 uderzeń na minutę czyli częstotliwosc bicia serca od 1Hz do 1,7Hz
- ;czyli czasowo od 1s albo 0,59s -> gromoadzić odcinki 1 s
- ;przy pominietej probce co 32 mamy przy 3k próbek mamy około 1kHz czyli mamy odcinki po ok 1s po 3000 próbek
- ;asr #12,a,b ;podziel do średniej
- move #668,r6 ;stala czasowa w us
- move #0,r0 ;znacznik dla 1 probki
- move #2,r1 ;znacznik w pamieci x dla 3 probki
- .LOOP #(N)
- move x:(r0),a ;pobierz 1 próbke
- move x:(r1)+,x0 ;pobierz 3 próbke
- sub x0,a ;a=a-x1
- asr a ;podziel przez 2
- nop
- move a,x0
- move x0,x1 ;potęgowanie
- move #0,a
- mac x0,x1,a ;potegowanie cz2
- nop ;;ZAOKRAGLENIE DODAJ
- add a,b a,x:(r0)+ ;dodaj do sredniej IiI zapisz próbkę mamy teraz piki w miejscach załamka Q o szerokości od 1-3 probek czy nie lepiej w innym miejscu? Nie zameazesz pamieci?
- .ENDL
- asr #11,b,a ;podziel i uzyskaj srednia z probek w danym oknie po przetworzeniu w celu ustawienia progu
- move #0,r0 ;znacznik dla 1 probki przerobionej
- nop
- move x:(r0),a ;max pierwszy
- move a,b
- asr #3,b,a ;próg wielokrotność sredniej po matlabie stwierdzono że 8 wartości średniej
- ;move r2,a ;prog w akumulatorze
- move #0,r5 ;flaga przejscia
- ;m długosc bufora kolowoeg - moze gdzies ich uzyc
- .LOOP #(N)
- move x:(r0)+,b ;pobierz probke
- move b,y1
- cmp y1,a ;porownaj w a prog w p mwartosc zmiennej
- .IF <ge> ;jezeli przekracza prog
- BSET #1,r5 ;ustaw bit 1 aby pokazac ze jestesmy powyzej
- BTST #3,r5 ;sprawdz czy 2 przebieg
- .IF <cs> ;jezeli 2 przebieg w probkach znajdź max i nie przejmuje się resztą
- BSET #1,r5
- .ENDI
- .IF <cc> ;jezeli bylo 0 to znaczy ze mamy nowe "wzgorze"
- BTST #2,r5 ;testuje bit aby sprawdzic czy wczesniej bylo cos w tych probkach jzeli tak to znaczy ze spadlo ponizej 1
- .IF <cs> ;sprawdz co z poprzednim adresem albo czy wczesniej spadalo
- BSET #3,r5 ;bit ze 2 przebieg w tych probkach
- .ENDI
- .ENDI
- max b,a ;znajdź maksimum i wybierz większe!!!!!!!!!!!!!!!!!!!!!!nie dziala!!!!!!!!!!!!!!!!!!!!!!!!!
- ;tu mozna porownac do min jezeli nie beedziemy obrabiac danych potegowaniem
- ;move b,r7
- ;sub b,a
- ;tst a
- .IF
- .ENDI
- cmp b,a ;wstaw wartości do rej CCR
- .IF <ge> ;sprawdź jestestr CCR czy większe lub rowne - znaczy ze zmienionow w tym cyklu
- move r0,x1 ;wstaw adres największej wartości
- .ENDI
- .IF <ne> ;dodaj 1 jezeli nie bylo najwiekszego
- BSET #2,r5 ;ustaw 2 bit bo spada
- BTST #3,r5 ;sprawdz moze wlasnie znalezlismy drugie max
- .IF <ne>
- move r0,a
- sub x1,a ;odejmij adres poprzedniego maksimum
- move a,x1 ;
- move r6,y0 ;przerzucamy
- mpy x1,y0,a ;wymnozenie przez 0,334 ms na adres
- ;mamy okres jedengo przebiegu w a
- BSET #4,r5 ;ustaw bit ze znaleziono 2 impuls
- .ENDI
- .ENDI
- .ENDI
- .IF <ne> ;nie przekroczyl progu
- BCLR #1,r5 ;ustaw 0 na bicie bo jestesmy ponizej
- .ENDI
- ;liczymy ilosc cykli pobrania miedzy probkami wymanzamy mnozymy przez stala czasowa /zegar przetwornika -> okreslamy okres -> czestotliwosc bicia
- .ENDL
- forever
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement