Skocz do zawartości

"Elektroniczny patefon" na bazie czujnika odległości HC-SR04


Adder

Pomocna odpowiedź

(edytowany)

Dobry wieczór Szanowni Koledzy!

Proszę, pomóżcie!

Oto do czego doszedłem w projekcie:

1. Jestem w miarę obeznany z teorią fal i drgań. Dzisiaj już raczej zrozumiem co do mnie piszecie.

2. Potrafię próbkować, wiem co to próbki.

3. Potrafię zbudować teoretyczny model przetwornika A/D fali dźwiękowej

4. Wiem też wiele innych rzeczy o fali i potrafię sporo z nią zrobić, ale jednak mam pewne dylematy, które może Wy macie dawno rozwiązane...

Aby łatwiej zrozumieć o co mi chodzi przedstawię aktualny stan projektu krok po kroku. 

a. Pozyskanie sygnału i jego zapis

To banalne. Poniżej surowe zapisy obserwacji z częstotliwością 245,99Hz fali dźwiękowej o częstotliwości 25-150Hz :

1359604921_Zrzutekranu2021-02-24o22_47_33.thumb.png.aaf058d1b0ad0b209d403703099bd1ce.png

Pozornie "sieczka". Ale tylko pozornie. 

b. Digitalizacja - (taki sobie wymyśliłem termin na to, co robię)

Za sprawą zastosowania zaklęć z "krainy Czarów i Baśni", ołówka, notesu, Excela oraz skomplikowanego systemu luster (niestety nadal mam problem z tabliczką mnożenia //od dziecka// i czytania ze zrozumieniem //stąd tydzień wertowania podręczników dla studentów politechnik// otrzymałem następujący zapis:

739868559_Zrzutekranu2021-02-24o23_00_12.thumb.png.47188bd2a366aa3027b6b486df1292e9.png

Po obejrzeniu w trakcie moich kilku(nasto?)dniowych studiów kilkuset (kilku tysięcy?) wykresów różnych fal od razu dostrzegłem, że jest to mocno zdeformowana fala kwadratowa o częstotliwości 245,99Hz (Wiecie już, żeby ją stworzyć potrzebowałem snu o kole, tak?). Potem przetworzyłem ją na coś bardziej przypominającego falę kwadratową modulowaną częstotliwością oryginalnego sygnału i tym samym przeszedłem do fazy PWM:

c) PWM

1328607903_Zrzutekranu2021-02-24o23_15_25.thumb.png.6ebac1f15b1f93205174c9dd6969cacb.png

Z takiego wykresu już się da wiele wyczytać. Jak na przykład częstotliwość sygnału źródłowego (chociaż jest już on oczywisty (dla mnie) w fazie digitalizacji). Paskudnie wprawdzie wyglądają te widoczne od początku projektu skoki na początku i na końcu, ale, że tak powiem "ciało" sygnału wygląda zdrowo.  

d) Analiza fali PWM - (też mój termin)

W ten sposób nadszedł wielki CHECK. Strasznie się go bałem... Uhh...stres

 Ale, gdybym wyłuskał z tego częstotliwości, może stworzyłbym  z tym kiepskim HC-SR04 i równie badziewnym, starym głośnikiem patefon dla... waleni?

Tak więc....

409237200_Zrzutekranu2021-02-24o23_45_53.thumb.png.d4e3bfcb3150b4db113acfca51cc0e53.png

Pierwsze wrażenie, przypadek. Drugie. Hmm... politechniczny prostak nie mógł dojść do czegoś takiego. Trzecie, przecież widać jak rośnie częstotliwość 🙃

Ale...rośnie dziwnie... 

1) Po pierwsze zaczyna się za późno. Analiza fali trwa 1 sekundę. Dlaczego zapis zaczyna się po kilku sekundach (1182 pomiarze) i to na 25Hz? Spodziewałem się go późno (słaby głośnik) + 1 jedna sekunda na analizę, ale myślałem że zacznie się np. na 40 Hz, a nie na 25Hz!?

2) Co się stało około 4700 pomiaru? Czy to efekt Nyquista–Shannona - tak powinien wyglądać wykres? Czy kopnąłem w stół i czujnik się poruszył? 

3) Dlaczego "dociągnąłem" do 150 Hz częstotliwości, gdy powinienem do 125Hz najwyżej?

 

Reasumując.

- Pijcie ze mną kompot Koledzy, bo "Loosera" nie usłyszycie, choćby miał to być ten patefon dla waleni. Za bardzo się zawziąłem. 

- Chyba strzelę sobie jeden kompot za Wasze zdrowie, bo ogólnie projekt idzie do przodu

- Biorę się za "katarynę", bo ładnie wygląda, a projekt jest tego warty

- Przepraszam za sarkazmy, ale mnie strasznie wkurzyliście ostatnio - chociaż doceniam późniejsze wpisy. 

 

 

 

 

Edytowano przez Adder
Link do komentarza
Share on other sites

(edytowany)

Istnieje też taka możliwość, że walnąłem się w formułach Excela🧐

Trzeba zrobić do tego jakiś program. Ilość danych do przetworzenia nawet teraz sprawia że mam odciski od przeciągania formuł. A co dopiero przy normalnym próbkowaniu 🥶

Edytowano przez Adder
Link do komentarza
Share on other sites

Oj... prawie na pewno pomyliłem się w formule i to w dwóch miejscach. I coś mi się zdaje, że czujnik tez poruszyłem. 🤦🏻
Nie zmienia to jednak faktu ze patefon działa. Na tym etapie jednak praca z excelem to już mordęga . 

Link do komentarza
Share on other sites

Nie jest możliwa pomoc, ocena Twojej pracy i wyników, jeśli sam sobie wymyślasz definicje słów i arbitralnie nazywasz operacje jakie wykonujesz na danych. Nie znamy tych danych ani nie widzimy obliczeń, a obrazki to możesz sobie na ścianie wieszać. Dopóki nie zaczniesz wrzucać plików z próbkami w sensownym formacie umożliwiającym ich analizę w programach do tego przeznaczonych (.wav?), nie zaczniesz używać precyzyjnego słownictwa z tej dziedziny oraz nie pokażesz jasno jakie obliczenia prowadzisz (a bez tego nie sposób niczego zweryfikować u siebie), to Twoje wynurzenia, zachwyty i zaklęcia będą tylko śmiesznym przerywnikiem tego Forum. Hm, a może o to chodzi?

Mam wrażenie, że im mniej rozumiesz co robisz tym bardziej kwiecistego języka używasz. Dobrze, że przynajmniej zacząłeś stosować sensowne (dla tej metody próbkowania) sygnały testowe. Swoją drogą, z uwagi na Twoje obycie z metodyką DSP, radzę pracować w zakresie co najwyżej 1/10 częstotliwości próbkowania. Wtedy przynajmniej "na oko" w dziedzinie czasu widać co złapałeś i czy ma to jakieś odniesienie do oryginalnego sygnału. Jak uzyskałeś stabilność częstotliwości próbkowania (która jest tu kluczowa), czy mógłbyś napisać coś o samej metodzie lub choćby wrzucić kod który robi próbkowanie? Bo jeśli tam coś jest spaprane (a napisałem Ci jak to trzeba zrobić), to cała dalsza analiza nie ma sensu. Żeby upiec dobry chleb, trzeba zacząć od pieca. Natomiast excel jako narzędzie do przetwarzania próbek sygnałów audio pasuje jak wół do karety. Co się stało z Twoimi programami w Processingu? Nie masz tam mnożenia czy bibliotek DSP?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

@marek1707 Jak zawsze masz rację.  Jeszcze błądzę, ale jakby już mniej. 

Wczorajszy wpis miał Was trochę rozśmieszyć i rozsierdzić zarazem. Taka mała zemsta. Nie będę już tego robił. 

Odnośnie tego co napisałeś. 

1) Nie mam pliku .wav - nie umiem go robić. Buduję plik .csv i z niego ciągnę dane. Mogę go podlinkować (wieczorem). Tak zrobić?

2) Moje tu wynurzenia to rozmowa głównie z samym sobą. Pomagają mi zebrać myśli. Trochę poprawić humor. Sam nie wiem. Nie za bardzo mam do kogo gębę otworzyć.  

3) Próbkowanie to zwykły odczyt czujnika standardową funkcją z kursu Arduino - jeszcze się nie zastanawiałem jak go podrasować i czy w ogóle jest to możliwe. Wieczorem wkleję ten kawałek kodu, ale nie ma tam nic nadzwyczajnego

4) Excel - to wielkie nieporozumienie. Przyznaję. Robię w nim sporo błędów, a przetwarzanie masy danych jakie otrzymuję (i tak stosunkowo niewielkiej) zajmuje minuty i godziny klikania. 

5) Processing... Biorę się, biorę za tę "katarynę". Bez tego nie pójdę dalej.  Excel to był konieczny stan przejściowy, żeby zobaczyć, czy dopieszczanie programu ma w ogóle sens. Byłem bliski walnięcia tego w cholerę 😉 

Edytowano przez Adder
Link do komentarza
Share on other sites

Dobrze więc, wygeneruj zatem w głośniku sygnał sinusoidalny np. 20Hz, złap tego z sekundę-dwie tym swoim cudem najlepiej jak umiesz, zapisz na dysku i w jakiejkolwiek formie wrzuć plik do swojego następnego postu wraz z (teoretyczną - jak to potwierdziłeś?) częstotliwością próbkowania i opisem jak prezentowane dane rozumieć.

Link do komentarza
Share on other sites

@marek1707 Oczywiście. Tak zrobię. 

Jeszcze mała refleksja odnośnie próbkowania. Rozumiem doskonale jakie to ważne. Bez znajomości precyzyjnej częstotliwości próbkowania nie będzie możliwe odtworzenie sygnału. Do tej pory skupiałem się jednak na uzyskaniu jak największej ilości próbek na sekundę bez dbałości o ich stałą częstotliwość. Również dlatego, że uznałem, że każda dodatkowa operacja np. pobranie czasu z komputera będzie obniżała częstotliwość, która i bez tego jest tragicznie mała.  Tym samym odłożyłem ten problem "na później". Teraz jest chyba dobry czas, żeby się nad tym pochylić. 

Link do komentarza
Share on other sites

4 minuty temu, Adder napisał:

Rozumiem doskonale jakie to ważne.

Chyba nie do końca. Każde przesunięcie w czasie próbki (jitter) w przód lub w tył od teoretycznie wyznaczonego czasu jej pobrania to dodatkowy szum w sygnale. I tak masz go sporo związanego z przyjętę metodą łapania sygnału a na to nakładasz te niepotrzebne, możliwe do wyeliminowania źródła. Częstotliwość musi być znana i stała nie tylko średnio w długim czasie (pobrałeś 200 próbek w sekundzie), ale także okres pobrania każdej próbki musi być taki sam (każdą pobierasz dokładnie co 5.000ms - to tylko przykład) nawet kosztem obniżenia częstotliwości tak, by wyrobić się z echem i operacjami w procesorze w najgorszym przypadku. Ta stałość jest dużo ważniejsza niż to, czy zrobisz 220 czy 180sps.

  • Lubię! 1
Link do komentarza
Share on other sites

To teraz rzuć te wszystki obrazki i dopracuj mechanizm samplowania. Masz dwa wolne timery, zrób to sprzętowo na nich (jeden w kółko generuje sygnał wyzwalający czujnik na pinie OC2A lub OC2B a drugi łapie z pinu ICP1 momenty obu zboczy impulsu odpowiedzi) albo - jeśli masz trochę ambicji, na jednym (Timer 1 powienien sobie z tym poradzić). Masz przecież te zasoby w procesorze, zapłaciłeś za nie więc korzystaj. Dopiero jak to bedzie działać bez pudła, możesz myśleć o jakiejś analizie danych.

  • Lubię! 1
Link do komentarza
Share on other sites

Dobry wieczór Koledzy!

Zgodnie z obietnicą przesyłam plik .csv z nagraniem zapisu z czujnika HC-SR04.

Nagrywany był dźwięk o częstotliwości 40Hz pochodzący z YouTube: 

Przyczyną wyboru tej częstotliwości jest słaba jakość głośnika, którym dysponuję i jego problemy z odtwarzaniem tonów poniżej 30Hz.🤷‍♂️

Plik zawiera 2263 sampli oddzielonych przecinkiem. Na jego końcu wisi "pusty" przecinek, którego nie miałem czasu usunąć na poziomie programowania.

Teoretyczny (na pewno jest obarczony błędem programowym) czas trwania nagrania to: 9371 milisekund. Daje to teoretyczną częstotliwość próbkowania na poziomie 241Hz

Obraz surowego sygnału wygląda tak: 

1203962597_Zrzutekranu2021-02-25o18_59_41.thumb.png.57be1099656c71c847509e750aa9574b.png

Wyjaśnię co na nim widać. 

1) Skok widoczny na początku to inicjalizacja nagrania. Występuje w mniejszym lub większym stopniu zawsze. Nie zastanawiałem się dlaczego. 

2) Następnie widać okres ciszy. Jego nagranie jest niezbędne dla mojej wersji patefonu na potrzeby tuningu ADC.

3) Nagranie właściwe (sampling sygnału)

4) Drugi okres ciszy służący wizualnemu sprawdzeniu czy w trakcie nagrania nie kopnąłem w stół.

Stwarzam (jak to sobie nazywam) PWM

 

2109013900_Zrzutekranu2021-02-25o19_06_38.thumb.png.5b0d83da67eb6220339885d144d8491b.png

 

A następnie obliczam częstotliwość:

1764402602_Zrzutekranu2021-02-25o19_08_52.thumb.png.fc3ef1da93df39a501be62b1225ddb53.png

Znowu się udało. Otrzymałem zapis sygnału o częstotliwości ok. 40Hz

Ten proces jest powtarzalny (uwierzcie sprawdzałem nie raz), bo ten patefon po prostu działa.

Teraz obiecany algorytm obróbki surowego sygnału:

1. Zapis

2. Ustalenie poziomu ciszy. W tym konkretnym przypadku 261

3. Obliczenie różnicy pomiędzy poziomem sygnału, a poziomem ciszy. Jeśli np. 33 sygnał ma wartość: 260 zamieniana jest ona na 260-261=-1

4. Zmiana wartości sygnału na 1,0,-1 wg. zasady: jeśli sygnał <0 sygnał=-1, jeśli sygnał >0 sygnał = 1 , jeśli sygnał 0 sygnał =0

5. Kolejna zmiana wartości sygnału wg. zasady: jeśli bezpośrednio poprzedzający sygnał =-1 a bieżący sygnał 1 wtedy sygnał równy 1, jeśli poprzedzający =1 a bieżący -1 sygnał =1 w pozostałych przypadkach 0.

6. Obliczenie częstotliwości w Hercach = liczba wystąpień jedynek w ostatnich 241 sygnałach (częstotliwości próbkowania)

 

Plik z surowymi danymi:  ezyzip.zip

 

 

 

Link do komentarza
Share on other sites

Nie wiem po co tak kombinujesz. Wziąłem ten Twój plik i zaimportowałem go jako raw sample data do Audacity z deklarowaną prędkością 240sps. Dwoma ruchami myszy obciąłem początek i końcówkę, ocalały fragment znormalizowałem odcinając składową stałą i zrobiłem FFT - to podstawowe narzędzie do oglądania sygnałów okresowych. Jeśli tylko to Twój zestaw widzi ruchy membrany głośnika, jakiś ślad tego w FFT będzie, nawet jeśli w dziedzinie czasu (na wykresie) ginie w szumie. Nie pomyliłem się:

add_fft1.thumb.PNG.6a6dff03ade620baab50a102f91be6b0.PNG

Na 40Hz stoi prążek i to całkiem wyraźny. Do takiego obrazka powinieneś dążyć a nie jakieś tam liczenie zboczy. Lekki ślad w okolicy 2 harmonicznej i coś więcej na 120Hz (ale to już ginie w ograniczeniu pasma) pokazuje, że sygnał jest odkształcony, ale nie beznadziejnie. Natomiast wysokość prążka, aż 30dB ponad szum pokazuje, że spokojnie powinno to być słychać w jakości "telefonicznej". Kolejnym kliknięciem zrobiłem resampling do 16ksps i to już można puścić na głośnik. Jeśli jesteś zainteresowany co słyszy i nagrywa Twój patefon, to wyeksportowałem Ci fragment w mp3. Nasze Forum nie wciąga załączników mp3 więc masz zipa:

ArduinoData_16k.zip

Spróbuj używać odpowiednich narzędzi, a praca będzie łatwiejsza i bardziej efektywna. O Excelu zapomnij. Cała ta robota zajęła mi 3 minuty.

Teraz przed Tobą poprawa jakości oraz zrozumienie jak działa up/re-sampling, byś zamiast oglądania obrazków mógł odtwarzać swoje nagrania w głośnikach. I proszę nie wymyślaj już tych swoich PWM czy domorosłych filtrów, szkoda na to czasu.

Tu masz obrazek ze swoich danych wprost, na 240sps:

add_240.thumb.PNG.adb365bb93b04ed6db05b30c057510e9.PNG

a tu (niedokładnie ten sam fragment, ale to chyba nie ma znaczenia) przesamplowany do 16ksps:

add_16k.thumb.PNG.7a571f7d589f071bf765b093ebedf3ae.PNG

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dzień dobry!

6 godzin temu, marek1707 napisał:

Nie wiem po co tak kombinujesz.

Bo ja należę do tej kategorii majsterkowiczów, którzy śrubki od zegarka odkręcają nożem do masła. Pracuję nad tym, ale na razie bez wyraźnych efektów.

6 godzin temu, marek1707 napisał:

Na 40Hz stoi prążek i to całkiem wyraźny. Do takiego obrazka powinieneś dążyć a nie jakieś tam liczenie zboczy. Lekki ślad w okolicy 2 harmonicznej i coś więcej na 120Hz (ale to już ginie w ograniczeniu pasma) pokazuje, że sygnał jest odkształcony, ale nie beznadziejnie. Natomiast wysokość prążka, aż 30dB ponad szum pokazuje, że spokojnie powinno to być słychać w jakości "telefonicznej". Kolejnym kliknięciem zrobiłem resampling do 16ksps i to już można puścić na głośnik. Jeśli jesteś zainteresowany co słyszy i nagrywa Twój patefon, to wyeksportowałem Ci fragment w mp3. Nasze Forum nie wciąga załączników mp3 więc masz zipa:

Bardzo dziękuję! Za poświęcony czas, za objaśnienia. Wszystko. Nawet pan nie wie, jak mi pan pomógł panie Marku. To się nazywa PRAWDZIWA POMOC 👍👍👍

 

6 godzin temu, marek1707 napisał:

Teraz przed Tobą poprawa jakości oraz zrozumienie jak działa up/re-sampling, byś zamiast oglądania obrazków mógł odtwarzać swoje nagrania w głośnikach. I proszę nie wymyślaj już tych swoich PWM czy domorosłych filtrów, szkoda na to czasu.

Pracuję już nad przerwaniami zgodnie z sugestią. Myślałem z początku, że mnie to przerośnie, ale po pobieżnym zapoznaniu się myślę, że dam radę. Jako wkład własny zamierzam ominąć komendę digitalWrite dobierając się do rejestrów portów... Pewnie usiądę nad tym w weekend. Nie omieszkam podzielić się wynikiem... lub znowu będę prosił o pomoc.... Ahh... gdyby tak dojść do 1k sps....😄

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.