Automatische Detektion von Meteor Scatter Spektrogrammen

Hallo Wilhelm,

das ist ja eine Menge Stoff und der Nachschub um Mitternacht ist bewundernswert. Um die Zeit lasse ich meistens schon die Automatik arbeiten ;-).

Muss ich mal in Ruhe lesen. Ich überlege aber immer noch, ob es außer astronomischen noch ganz irdische Erklärungen für die Minima gibt. Eine Abschattung durch einen Berg, eine reflektierende Wolke, eine Lücke in der Graves-Abstrahlung...

Warum sehe ich (mit meinem Auge in Dwingelo) die Mondlinie immer nur im Azimutbereich von ca. 90° (E) bis ca. 180° (S) und nicht auf der anderen Seite (180 - 270°) auf dem Weg nach unten ? Die Elevation ist jeweils etwa von 10° bis 40 °, dazwischen gibt es aber auch immer mal Lücken.

Es bleibt spannend.

Matthias
 
Dankeschön für Eure Zustimmung!!

Matthias, danke für deine Ideen. Natürlich überlege ich auch ständig, wo Fehler liegen könnten. Gestern habe ich noch eine Aufnahme mit der Discone gemacht, die aber zum gleichen Ergebnis führt.
Zumindest für die Geminiden gibt es weitere Beobachtungen: Der Einbruch war auch auf BRAMS zu beobachten und auf RMOB war die Lücke auch in Zentralamerika zu sehen:
Viel Spaß weiterhin beim Überlegen,
Viele Grüße
Wilhelm
 
Zuletzt bearbeitet:
Guten Tag.
Heute habe ich noch mal einen Test gemacht. Eine handvoll Tageslichtströme ziehen zur Zeit im Verband zeitlich kurz vor der Sonne hier vorbei, s. CMOR Radar. Ich finde es besonders gut, wenn die Echos ungefähr aus der Sonne kommen, da a) nur wir sie mit dem Radio sehen können und b) weil man sich die Anordnung von GRAVES-Antenne und Radiant gut vorstellen kann und c) die Radianthöhe = Sonnenhöhe ist und es somit keine Diskussionen darüber gibt.

An dem ersten Plot sieht man, dass das rote Histogramm, die Größen der Echos, in der Mittagszeit, als die Ströme am Radar vorbeizogen, einen starken Einbruch hatten, während die Counts kaum einen Einbruch hatten. Das belegt, dass die Echos kleiner gesehen werden, wenn sie senkrecht vor dem Radar reinkommen.
In der statistischen Verteilung steigt dabei die Anzahl der Kleine an, weil der Kopf des Echos den Trail verdeckt, was ja hier noch unklar war.
Den Effekt nenne ich den In-Line-Effekt.

Das Bild vom Mai soll zeigen, wie es normalerweise Mittags aussieht.
Viele Grüße
Wilhelm
 

Anhänge

  • Juni28-XY.png
    Juni28-XY.png
    289,6 KB · Aufrufe: 78
  • Mai14-XY.png
    Mai14-XY.png
    310,4 KB · Aufrufe: 90
Zuletzt bearbeitet:
Hier ist noch mal der 28. Juni komplet.
Man sieht schön den kleinen Einbruch von 9-12h UT bei der Anzahl, aber den großen Einbruch bei den Größen.

Die Ströme waren laut dieser Website:
TAS: Dayt. theta Aurigids
EPE: Eintrag fehlt, vermutlich epsilon Perseids
ARI: Dayt. Arietids
BTA: Dayt. beta Taurids
DLT: Dayt. lambda Taurids
KCT: kappa Cetids
 

Anhänge

  • Juni28_komplett.png
    Juni28_komplett.png
    299,9 KB · Aufrufe: 80
Guten Tag,
zum Thema Kerbe, Notch, Dip, Einbruch ist gestern ein Artikel online gegangen:


Viele Grüße
Wilhelm
 
Dankeschön!

Zu dem Artikel gibt es einen Kommentar und meine Antwort dazu.

Laut Literatur und persönlicher Mitteilungen gibt es die Einbrüche in allen wichtigen Strömen. Ich bin schon sehr gespannt, wie es bei den kommenden Perseiden aussieht. Die Daten vom letzten letzten Jahr habe ich leider nicht mehr.
Nun werde ich noch eine Antenne vom Dachboden nach draußen hin versetzen, um den Pegel zu erhöhen.
Viele Grüße,
Wilhelm
 
Zuletzt bearbeitet:
Guten Tag,
hier möchte ich euch meine neue Turnstile Antenne zeigen:
Es ist ein rechtsdrehend zirkular polarisierter Kreuzdipol für 137-152 MHz und dient eigentlich zum Empfang von umlaufenden Satelliten. Der Gewinn ist bei großer Elevation 0 dB, aber am Horizont ist der Gewinn 4 dB. Damit erhoffe ich mir weitere Erkenntnisse zu den Kerben. Wenn meine Hypothese aus dem Paper stimmt, müsste bei größerem Öffnungswinkel der Antenne die Kerbe größer werden. Das soll die Grafik verdeutlichen.
Ferner sieht man im Vergleich zur Krezyagi eine etwas andere Verteilung der Größen der Echos. Damit sollen Missinterpretationen vermieden werden.
Viele Grüße
Wilhelm
 

Anhänge

  • Richtantenne-vs-Rundstrahler.png
    Richtantenne-vs-Rundstrahler.png
    2,8 MB · Aufrufe: 80
  • Turnstile.png
    Turnstile.png
    3,5 MB · Aufrufe: 68
  • Turnstile-vs-Kreuzyagi.png
    Turnstile-vs-Kreuzyagi.png
    305,9 KB · Aufrufe: 58
Zuletzt bearbeitet:
Guten Tag.
Im Moment kann man die Südlichen Delta-Aquariiden beobachten. Sie erreichen ihr Maximum am 30. Juli. Der Radiant hat um 2h UT den Höchststand mit ~30° Elevation*. Dadurch ist die grüne Kurve am 23. und 24. Juli breiter als an den Tagen davor.
Eine Kerbe sehe ich nicht. Das bedeutet, dass es Kerben erst über 30° gibt.
Viele Grüße
Wilhelm

*(mit Stellarium Web, von Dijon aus, Stern war 42 Aquarii)
 

Anhänge

  • GRAVES-XY-Vv_220725024340.jpg
    GRAVES-XY-Vv_220725024340.jpg
    591,5 KB · Aufrufe: 58
  • GRAVES-XY-Vv_220725025020.jpg
    GRAVES-XY-Vv_220725025020.jpg
    591 KB · Aufrufe: 39
  • GRAVES-XY-Vv_220725025620.jpg
    GRAVES-XY-Vv_220725025620.jpg
    592,1 KB · Aufrufe: 60
  • SDA.png
    SDA.png
    37,6 KB · Aufrufe: 59
Zuletzt bearbeitet:
Guten Tag.
So, die Aufwärmphase für die Perseiden läuft.
Das Umsetzen der Antenne nach draußen hat nichts gebracht. Im Moment sind die Kreuzyagi und die Discone ohne die Stabantenne in Betrieb.

Ende des Monats ist der Höhepunkt der Südlichen Delta-Aquariiden (SDA). Sie sind in meinen GRAVES Echos schön zu sehen. Im Vergleich zum Juni, als die Tageszeit-Arietiden aktiv waren, sind die Peaks zwar niedriger, dafür aber breiter, s. Anhang. Ursache dafür ist, dass die Delta-Aquariiden ihre maximale Radiantenhöhe um ~2h UT erreichen. Interessant ist, dass die mittleren Größen, die lila Spur, besonders zunehmen.
Das ist eventuell ein Effekt der niedrigen Elevation, oder?
Das letzte Bild zeigt drei Echos von gestern, dem 28. Juli, 7:40h UT.
Viele Grüße
Wilhelm
 

Anhänge

  • SDA-29Juli.png
    SDA-29Juli.png
    35,7 KB · Aufrufe: 47
  • Figure-3-aus-eMetN-Paper.png
    Figure-3-aus-eMetN-Paper.png
    54,7 KB · Aufrufe: 51
  • GRAVES-XY-Vv_220728074040.jpg
    GRAVES-XY-Vv_220728074040.jpg
    602,8 KB · Aufrufe: 55
Zuletzt bearbeitet:
Glück gehabt. Dieser Thread ist noch offen.
Liebe Grüße,
Wilhelm
 

Anhänge

  • Ue-Aug4.png
    Ue-Aug4.png
    498,6 KB · Aufrufe: 51
  • Uebersicht-Ende-Juli-Anfang-August.png
    Uebersicht-Ende-Juli-Anfang-August.png
    37,8 KB · Aufrufe: 65
Guten Tag.
Kleines Update: Die Aufnahme des Perseiden-Stroms läuft prima. Gestern waren es über 1600 Hits. Mir scheint, dass die Echos und auch die Anzahl größer sind als im letzten Jahr.
Schönes Wochenende und viele Grüße
Wilhelm
 

Anhänge

  • Perseiden-2022--Aug-12.png
    Perseiden-2022--Aug-12.png
    368,6 KB · Aufrufe: 40
  • Perseiden-2022--Aug-13.png
    Perseiden-2022--Aug-13.png
    71 KB · Aufrufe: 45
  • GRAVES-XY-Vv_220813063019.jpg
    GRAVES-XY-Vv_220813063019.jpg
    603,8 KB · Aufrufe: 55
Guten Tag,
die Perseiden 2022 sind im wesentlichen durch und haben viele schöne Daten für weitere Analysen geliefert.

Meine erste Erkenntnis ist, dass die Perseiden von den visuellen Betrachtern als großen Strom wahrgenommen werden, liegt nicht an einer hohen Rate, welche nur ~30 % höher ist als an den Tagen vor dem Maximum, sondern an den immensen Größen (s. die Spektrogramme hier im Forum) der Partikel, welche die Sternschnuppen dann besser sichtbar machen.

Zum Vergleich ist ein Plot der Geminiden 2021 beigefügt. Hier ist die die maximale Rate mehrfach höher als der Grundpegel. Aber Achtung, die absoluten Höhen sind mit den Perseiden nicht vergleichbar, da die Anlage inzwischen optimiert wurde. Deutlich ist die Geminiden-Kerbe zu erkennen.

Einen direkten (und interessanten) Vergleich mit den Arietiden habe ich auch noch beigefügt.
Viele Grüße
Wilhelm
 

Anhänge

  • GRAVES-XY-Vv_220815030139.jpg
    GRAVES-XY-Vv_220815030139.jpg
    587,7 KB · Aufrufe: 41
  • GRAVES-XY-Vv_220815005340.jpg
    GRAVES-XY-Vv_220815005340.jpg
    601,1 KB · Aufrufe: 53
  • PER-ARI.png
    PER-ARI.png
    349,6 KB · Aufrufe: 51
  • Geminiden-2021.png
    Geminiden-2021.png
    35,8 KB · Aufrufe: 53
  • Perseiden2022-1.png
    Perseiden2022-1.png
    58,6 KB · Aufrufe: 45
Zuletzt bearbeitet:
Guten Tag.
Auf BRAMS hatte ich einen ziemlich langen (~200 s) Perseiden eingefangen.
Das zweite Bild, der GRAVES-Plot, ist von heute, den 16. August.
Viele Grüße
Wilhelm
 

Anhänge

  • Aug13-BRAMS.png
    Aug13-BRAMS.png
    441,6 KB · Aufrufe: 42
  • GRAVES-XY-Vv_220816025519.jpg
    GRAVES-XY-Vv_220816025519.jpg
    590,4 KB · Aufrufe: 57
Zuletzt bearbeitet:
Guten Tag,
Am 16. August, also erst vor 2 Tagen, ist neuer Meteorstrom entdeckt worden, dessen Radiant an der Aquarius/Capricorn Grenze liegt.
Zwei Autoren habe es fast gleichzeitig in MeteorNews publiziert.


und


Viele Grüße
Wilhelm
 
Guten Tag,
ich bastele immer noch am Perseiden Bericht, aber spätestens zu den September Perseiden wird er fertig.

Nun habe ich den 10 Minuten Plot verändert, s. Anhang. Bisher waren die Balken einzeln erkennbar, was aber besonders bei der Verkleinerung der Plots zu Interferenzen führte.

Der Perseiden-Strom enthielt viele sehr große Echos/Partikel, die häufig in Schüben auftraten. Das ist schön an den langen grünen Peaks zu erkennen.
Viele Grüße
Wilhelm
 

Anhänge

  • Per2022Test.png
    Per2022Test.png
    116,5 KB · Aufrufe: 72
Guten Tag,
der August hat viele schöne Daten für ein Paper geliefert, von dem ich hier den ersten Entwurf zeige. Wer es eilig hat, braucht nur den Abstract lesen.
Ich bin kein Astronom. Falls etwas falsch ist oder Ihr es anders interpretieren würdet, bin ich für Hinweise sehr dankbar.
Danke schon mal fürs lesen,
viele Grüße
Wilhelm

Radio Beobachtungen zu den Perseiden und einigen anderen Strömen im August 2022

Abstract:

Die Perseiden 2022 wurden im Zeitraum vom 6. bis zum 19. August mit zwei fast identischen Empfangsanlagen aufgenommen, die sich nur durch die Antennen unterscheiden. Es handelt sich um eine Kreuz-Yagi und eine Rundstrahlantenne, eine Discone. Erstaunlicherweise liefert die Discone die besseren Perseiden-Ergebnisse. Der Perseiden-Strom enthielt viele sehr große Echos b.z.w. Partikel, die häufig in Schüben auftraten. Einen starken Outburst wie in 2021 gab es nicht, aber an der Stelle, bei der Sonnnenlänge 141.5, ist ein kleiner Burst zu sehen. Eine ausgeprägte Kerbe wie bei den Arietiden oder bei den Geminiden gab es nicht.

Einleitung:
In meinem ersten Meteor-Paper hatte ich einen Mechanismus vorgeschlagen, wie in GRAVES-Meteordaten Kerben entstehen. Kerben sind in der Literatur bekannt. Eine Kerbe gibt es laut Felix Verbelen (Verbelen 2019) in allen bedeutenden Strömen. Wolfgang Kaufmann (Kaufmann 2020) postuliert, dass Kopfechos eine sehr große Dopplerverschiebung erzeugen, so dass das Signal dann außerhalb des Empfängerbereichs liegt, was eine Kerbe zur Folge haben würde. Die Perseiden 2022 sollten nun weitere Erkenntnisse liefern. Schlussendlich wurde nur eine kleine Kerbe beobachtet. Dafür gab es aber ein paar andere Überraschungen.

Methode:
Ich untersuche immer die Rohdaten. Die Daten sind eine Überlagerung der sporadischen Meteore und mehrerer Ströme. Die Intensität der Ströme hängt von der Radiantenhöhe ab. Das ganze wird noch mal mit einem Sinus multipliziert, da die Erde vormittags in Flugrichtung mehr Meteore einsammelt als nachmittags.

Die Meteorechos werden immer mit zwei fast identischen Anlagen aufgenommen. Sie unterscheiden sich nur durch die Antennen: Es handelt sich in diesem Fall um eine rechtsdrehend zirkular polarisiertes 4-Element Kreuz-Yagi und um eine Rundstrahlantenne, eine Discone, mit vertikaler Polarisation. Die Kombination Discone/Kreuzyagi dient eigentlich dazu, meine Hypothese zu den Kerben und zum In-Line-Effekt zu untersuchen. Die Antennen sind auf dem Dachboden montiert, so dass die Konfiguration leicht geändert werden kann. Rauscharme Vorverstärker mit einem Frequenzbereich von 140-150 MHz und einer Rauschzahl von 0,25 dB sind direkt an der Phasenleitungen der Yagi und direkt an der Discone angeschlossen. Als Aufnahmesoftware dient Spectrum-Lab2 (SL). SL erzeugt alle 20 Sekunden Plots mit entsprechendem Datum und Uhrzeit im Dateinamen, die später mit einer selbst geschriebenen Bildverarbeitungssoftware auf Basis von Python3 und OpenCV ausgewertet werden.

Die Histogramme in Abbildung 1 werden mit einem (variablen) Gauß-Filter über bis zu 11 Stunden geglättet, während die Histogramme in den Abbildungen 2 und 3 mit einem festen Gauß-ähnlichen Filter mit den Koeffizienten 0.31, 0,74, 1.0, 0.74 und 0.31 geglättet werden. Nach vielen Tests schätze ich die Unsicherheit der Rate auf <5%. An der Spitze der Ströme kann der Fehler größer sein, wenn die Echos in zu dichter Folge hereinkommen.

In dem untersuchten Zeitraum habe ich mehrfach täglich CMOR Screenshots abgespeichert. Damit lassen sich die Peaks den Strömen zuordnen.
Die im Zeitraum aufgetretenen Ströme sind
XRI, Dayt. xi Orionids
SDA, Südlichen Delta-Aquariiden
NDA, Nördlichen Delta-Aquariiden
NIA, North. iota Aquariids
PER, Perseiden
ZCA, Dayt. zeta Cancrids

Die drei Aquariidenströme bilden zusammen ein größeres Radiantenfeld, so dass die Peaks (und Kerben) entsprechend breit sind. In Abbildung 1 steht stellvertretend nur „SDA“, da SDA der dominierende Strom ist.

Ergebnisse und Diskussion:
In den Abbildungen 1 und 2 sind Histogramme der beiden Empfangsanlagen geplottet. Der Maßstab ist jeweils identisch. Im Bild 1 lässt sich an den weißen Linien mit den Buschstaben a und b ablesen dass die X-Yagi an den Tagen vor und nach den Perseiden mehr Echos liefert als die Rundstrahlantenne. Grund dafür ist, dass die Richtantenne nach Süden in Richtung GRAVES blickt und somit mehr Forward Scatter-Signale einsammelt als die Rundstrahlantenne. Allerdings detektiert die Discone bezogen auf die Basislinie und auch absolut deutlich mehr Perseiden-Echos als die Richtantenne, wie sich am Vergleich der mit a und b gekennzeichneten Linien ablesen lässt. In Zahlen: Die Perseiden wachsen bei der Discone um den Faktor 1.99 und bei der X-Yagi um 1.58 aus dem Grundpegel heraus. Ursache dafür ist, dass der Radiant der Perseiden sich mehr im Norden befindet und daher die Richtantenne für die Perseiden in die falsche Richtung blickt. Die Ströme im Süden, die drei Aquariiden und die Tageszeit Xi Orioniden werden von der Richtantenne besser erfasst. Details zu den südlichen Strömen folgen weiter unten.
Der Perseiden-Strom enthielt viele sehr große Echos/Partikel, die häufig in Schüben auftraten. Das ist schön an den langen grünen Peaks in Abbildung 2 zu erkennen.

Perseiden-Outburst:
Besonders interessant ist ein Mini-Burst am 14. August im Zeitraum von 10 h bis 16 h. An dieser Stelle, Sonnenlänge = 141.5, gab es in 2021 einen sehr großen Ausbruch. Daher habe ich die Stelle mit Burst 2021 gekennzeichnet. Vermutlich handelt es sich hier um den gleichen Burst, nur eben kleiner. Dazu kommt, dass in 2021 das Maximum des Bursts schon um 8:46 erschien. Da betrug die Radiantenhöhe noch ~53°. In 2022 entspricht die Sonnenlänge von 141.5 der Zeit 14:51h und einer Radiantenhöhe von nur ~16°. Auch scheint es sich den Plots nach zu urteilen um kleines Material zu handeln. Wegen des tiefen Radianten werden aber die (normal großen) Partikel einfach nur als kleine Echos registriert. Der Burst wird von der Discone besser empfangen als von der Richtantenne und kann daher keiner der südlichen Ströme sein. Der Peak ist auch in Jörg Torhoffs Bild zu sehen und auch bei einigen, den nördlich gelegenen RMOB Beobachtern findet man den Peak.

Zu den Kerben:
Bild 3 zeigt einen Vergleich der Perseiden mit den Arietiden. Man sieht, dass sich die Raten gar nicht so sehr unterscheiden, aber die Meteore sind bei den Perseiden deutlich größer. Eine deutliche Kerbe wie bei den Arietiden gibt es bei den Perseiden nicht, da der Radiant nicht südlich vor der GRAVES Antenne vorbeiwandert. Allerdings könnte es sich bei dem Einbruch am 14. 8. um 10 h (Bild 2) herum um eine Kerbe handeln. Zu dieser Zeit betrug die Radiantenhöhe ~45° und auch die breitere Kerbe in den Disconedaten und der kleine In-Line-Peak am roten Pfeil sprechen für eine Kerbe.
Da GRAVES nach Süden strahlt, geht nur eine geringere Sendeleistung in Seitenkeulen und Rückkeulen in Richtung Norden. Bei den Perseiden findet man daher eine große Anzahl wenig intensiver Echos. Ein schwaches Signal zusammen mit einem starken, vermutlich ein Hauptkeukensignal, ist im letzten Bild dargestellt.

Weitere Ströme:
Nicht nur sporadischen Meteore und die Perseiden, sondern auch einige andere Ströme waren in dem Zeitraum unterwegs.
Am 7. und 9. August sind deutlich die Tageszeit Xi Orioniden (XRI) zu erkennen, s. Bild 1. Es können nur XRI Peaks sein, da nach CMOR kein anderer Radiant an der Stelle aktiv war. Das Radiantenfeld von XRI ist wie bei den Aquariiden teilweise sehr breit. Der Strom läuft wie die Arietiden vor der Sonne her und hat die maximale Radiantenhöhe um 9 h. Eine Kerbe sorgt aber dafür, dass Strom erst in der Mittagszeit ein Maximum zeigt.
Über den ganzen Zeitraum sind die SDA aktiv. Einige Peaks sind in Abbildung 1 markiert. Die Maxima entstehen wie bei den Arietiden und XRI an der falschen Stelle, da wieder Kerben überlagert sind, die dann ein Maximum vortäuschen.

Literatur:
Sicking, W. (2022). “A Notch in the Arietids Radio Data and a new so called In-Line-Effect”.eMeteorNews, in Press.

Verbelen F. (2019). “Meteor velocity derived from head echoes obtained by a single observer using forward scatter from a low powered beacon”. WGN, Journal of the International Meteor Organization, 47:2, 49–54

Kaufmann, W. (2020). “Limitations of the observability of radio meteor head echoes in a forward scatter setup“. WGN, Journal of the International Meteor Organization, 48:1, 12-16
 

Anhänge

  • Bild_1_PER-SDA1.png
    Bild_1_PER-SDA1.png
    143,4 KB · Aufrufe: 42
  • Bild_2_Per10min.png
    Bild_2_Per10min.png
    630,5 KB · Aufrufe: 40
  • Bild_3_PER-ARI.png
    Bild_3_PER-ARI.png
    349,6 KB · Aufrufe: 65
  • discone-Vv_220813042620.png
    discone-Vv_220813042620.png
    888,4 KB · Aufrufe: 61
Zuletzt bearbeitet:
Hallo,

eine schöne Zusammenfassung, die Struktur des Schwarms wird da vor uns ausgebreitet, vielen Dank für Deine Arbeit damit!

CS
Jörg
 
Hallo Wilhelm,

Danke für die Zusammenfassung, sehr spannend! Meine Hardware ist gestern gekommen und ich freu mich schon 😀

Ich habe eine Frage, da du OpenCV nutzt, extrahierst du die Daten aus den Wasserfall Diagramm Bildern?

Falls ja, warum nicht das direkte Frequenzspektrum? Der Weg über die Bildanalyse wäre nicht optimal aber eventuell hab ich auch was falsch verstanden.

Ich werfe mal noch zwei Diskussionensplatformen in den Raum (kennst du vermutlich schon):

Für pre-prints paper:

Zwar für Fragen aber vielleicht auch interessant:


Viele Grüße und ich finde deine Arbeiten wirklich beeindruckend!
 
Stefanie, vielen Dank und auch vielen Dank an die beiden Jörgs für eure Zustimmung.
Ich stricke gerade die englische Version.

Für die Aufnahme nehme ich Spectrum Lab Plots, s. das Bild im Anhang. SL erzeugt alle 20 Sekunden Plots mit entsprechendem Datum und Uhrzeit im Dateinamen, die dann später ausgewertet werden. Bestimmt kann man die Aufnahme auch anders lösen, aber ich benötige ja das Spektrum und die Zeit = Spektrogramm. Dazu habe ich nicht den normalen Wasserfall, sondern die 3D Darstellung von Spektrum Lab gewählt, so dass das Spektrogramm in erster Näherung die Größe des Echos wiedergibt. Das funktioniert ja auch über 4-5 Größenordnungen ganz gut.

Ich bin auf dein erstes Meteorecho gespannt.
Viele Grüße
Wilhelm
 

Anhänge

  • 12.png
    12.png
    1,4 MB · Aufrufe: 57
Hallo Stefanie,
hier ist der Code. Das Programm besteht eigentlich nur aus OpenCv Aufrufen. Zum Beispiel: cv2.findContours(maske… detektiert die Konturen (Echos) im Bild in #111.
Python ist nur der Wrapper und macht den Kleinkram.
Viele Grüße
Wilhelm

Code:
# (C) WiSi-Testpilot 2022
#letzte Änderung 10.7.2022

import glob
import datetime
import numpy as np
import cv2
import time
import math as m

nfdetect = 1    # Noise Floor Detector
nfmittelwert = 0.0
raucherraus = 0
filter = 0
debug = 0    #: 1  Einzelschritt nur mit Signal, 2: bei Fehler halten, 3 bei Singlet triplet... halten,  4 bei Signal >= 10000 halten

sname = " V28.7, alle, Discone"  #<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Turnstile  X-Yagi  Discone
k30 =  3     #####################  1 <Schwelle, 2 >=3000, 3 =alle
Schwelle = 50

#path = glob.glob("C:/Users/wilsi/Desktop/alte-YX-Juni/GRAVES-XY-Vv_220609*.jpg")
#path = glob.glob("C:/Users/wilsi/Desktop/XYagi-Aug1-21/GRAVES-XY-Vv_220815*.jpg")

#path = glob.glob("C:/Users/wilsi/Desktop/Discone-Juli-bis31/discone-Vv_220731*.jpg")  
path = glob.glob("C:/Users/wilsi/Desktop/Discone-Aug1-21/discone-Vv_220814*.jpg")  

#path = glob.glob("C:/Users/wilsi/Desktop/alt-Discone/Discone-Vv_220619*.jpg")  
#path = glob.glob("C:/Users/wilsi/Desktop/Met-April22XY-1-30/GRAVES-XY-Vv_220412*.jpg")

#path = glob.glob("E:/xtest/draussen-Vv_220722*.jpg")
#path = glob.glob("F:/Meteor-ROHdaten/Dez2021_12-31/DezXY12-24/GRAVES-XY-Vv_211222*.jpg")
               #    F:\Meteor-ROHdaten\Dez2021_12-31\DezXY12-24
#E:E:\Meteor-ROHdaten\Dez2021_1-11\DezXY1-11
#path = glob.glob("E:/Meteor-ROHdaten/Dez2021_1-11/DezXY1-11/GRAVES-XY-Vv_211211*.jpg")
#path = glob.glob("E:/Meteor-ROHdaten/Dez2021_12-31/DezXY12-24/GRAVES-XY-Vv_211214*.jpg")
#path = glob.glob("F:/Meteor-ROHdaten/Dez2021_12-31/DezDiscone12-24/GRAVES_Discone_211221*.jpg")
#path =  glob.glob("F:/Meteor-ROHdaten/Jan2022_1-31/Jan22XY-1-27/GRAVES-XY-Vv_220103*.jpg")
#path = glob.glob("F:/Meteor-ROHdaten/Jan2022_1-31/Jan22DiHV-1-27/GRAVES_Discone_220104*.jpg")
                  #F:\Meteor-ROHdaten\Jan2022_1-31\Jan22DiHV-1-27
Magenta = (147, 20, 255)
YELLOW = (0, 255, 255)
Yellow = (0, 255, 255)
DarkOrange = (15, 185, 255)  #Gold
#DarkOrange = (0, 140, 255)  # alt
lite_MAGENTA = (255, 0, 255)
GREEN = (20, 255, 20,)
BLUE = (255, 0, 0)
WHITE = (200, 200, 200)
light_BLUE = (255, 191, 0)
Rose = (200, 200, 255)
lRED = (20, 20, 255)  # b g r
RED = (0, 0, 255)  # b g r
OrangeRed = (0, 190, 255)  # b g r fast gelb
darkOlive = (40, 120, 40)
Olive = (150, 255, 150)

bg = np.zeros((550, 1900, 3), np.uint8)          # Result Screen
summe_mini = np.zeros((61), np.uint8)
summe_fl = np.zeros((26), np.single)
log_summe_fl = np.zeros((26), np.single)
summe_anz = np.zeros((26), np.uint32)
summe_10min = np.zeros((145), np.uint32)
fsumme_10min = np.zeros((145), np.single)

su1 = np.zeros((26), np.uint32)
su10 = np.zeros((26), np.uint32)
su100 = np.zeros((26), np.uint32)
su300 = np.zeros((26), np.uint32)
su1000 = np.zeros((26), np.uint32)
su10000 = np.zeros((26), np.uint32)

histogramm = np.zeros((540, 510, 3), np.uint8)

y_t_color = 0
dicke = 0
fl = 0
sugesamt = 0
fontScale = 0.6
fthickness = 1
font = cv2.FONT_HERSHEY_SIMPLEX
singlet = 0
doublet= 0
Long = 0
quartet = 0
splitit = 0

Ax = np.zeros((10), np.int32)
Ay = np.zeros((10), np.int32)
Bx = np.zeros((10), np.int32)
By = np.zeros((10), np.int32)
Bx[1] = 350
By[1] = 28    # war bis 8.Sept. 35
Ax[1] = 1125
Ay[1] = 417  # war am 8.Sept. 422, war 415 bis 17.4.2022
downx = 39
upy = 39
for j in range (2,10):
    Ax[j] = Ax[1] - (downx * (j-1))
    Ay[j] = Ay[1] + (upy * (j-1))
    Bx[j] = Bx[1] - (downx * (j-1))
    By[j] = By[1] + (upy * (j-1))

dx = Ax[1] -Bx[1]
dy = Ay[1] -By[1]
cqu = dx*dx + dy*dy
c = m.sqrt(cqu)
print ('  c  ', c)

seiten = 0
raucher = 0
for name in path:
 #   print(name)
    seiten +=1
    position = name.find(".jpg")

 #  20210830001400
 #      0123456789
    zeit = name[position-10:position]
    print()
    print(zeit)
    print ("Jahr Monat Tag St. Min. Sek.", '20' + name[position-12:position])
    monat= zeit[0:2]
    if monat == '01': Monat = 'Januar'
    if monat == '02': Monat = 'Februar'
    if monat == '03': Monat = 'Maerz'
    if monat == '04': Monat = 'April'
    if monat == '05': Monat = 'Mai'
    if monat == '06': Monat = 'Juni'
    if monat == '07': Monat = 'Juli'
    if monat == '08': Monat = 'August'
    if monat == '09': Monat = 'September'
    if monat == '10': Monat = 'Oktober'
    if monat == '11': Monat = 'November'
    if monat == '12': Monat = 'Dezember'
    print (Monat)
    day= zeit[2:4]
    ho = zeit[4:6]    # Zeit aus Filenamen extrahieren
    mi = zeit[6:8]
    se = zeit[8:10]
    print('Monat: ', monat)
    print('Tag: ', day)
    print (day + '.', Monat, '2022')
    ctime = (float(ho) * 3600 ) + (float(mi) *60) + float(se)   # X-Position aus Zeit berechnen
    xa = round (ctime / 60)
    if (mi == '00') and ((se == '00') or (se == '59') or (se == '01') ):
        bg = cv2.line(bg,(xa,500),(xa, 515), WHITE, 2)      # X ganze Stunden-Ticks
        org = (xa, 530)  # war 535
        bg = cv2.putText(bg, ho, org, font, fontScale, WHITE, fthickness, cv2.LINE_AA)

    if ((mi == '30') or (mi == '15') or (mi == '45')) and ((se == '00') or (se == '59') or (se == '01') ):
        bg = cv2.line(bg,(xa,500),(xa, 510), WHITE, 1)        # X 1/4 Stunden-Ticks
 
    streamout = cv2.imread(name)  
    start_point = (0, 0)      # Schrift wegmaskieren
    end_point = (1920, 40)
    xcolor = (100, 50, 30)
    xthickness = -1
    cv2.rectangle(streamout, start_point, end_point, xcolor, xthickness)
    end_point = (80, 400)
    cv2.rectangle(streamout, start_point, end_point, xcolor, xthickness)
    start_point = (1300, 600)
    end_point = (1535, 780)
    cv2.rectangle(streamout, start_point, end_point, xcolor, xthickness)
    start_point = (50, 400)
    end_point = (770, 760)
    cv2.line(streamout, start_point, end_point, xcolor,25)

    if filter == 0: frame = streamout
    if filter == 1: frame = cv2.GaussianBlur(streamout,(5, 5), cv2.BORDER_DEFAULT)

  #  frame = cv2.bilateralFilter(streamout,9,75,75)
  #  cv2.medianBlur(streamout,111)
  #  cv2.medianBlur(frame,7)
  #  cv2.bilateralFilter(streamout,9,75,75)
  #  cv2.imshow("gefiltert", frame)
  #  cv2.waitKey(0)
  #  cv2.destroyAllWindows()

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)               # RGB zu HSV
    maske = cv2.inRange(hsv, (10,70,70), (40,255,255))           # 15 37 Farbauswahl, siehe älterer Post

    # cv2.imshow("SW-Maske", maske)

    contours, hierarchy = cv2.findContours(maske, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)  # findet alle Konturen im Bild

  # Noise Floor auswerten
    if nfdetect == 1:
        nfmittelwert = 0.0
        if len(contours) == 0:
            print ('#############################>>>>>>>>', len(contours))
            for i in range (300, 401):
                for j in range (200, 301):
                    for k in range (0, 3):
                        nfmittelwert = nfmittelwert + streamout[i, j, k]
            cv2.circle(bg, (xa, 500 - int(nfmittelwert/5000)), 1 , Magenta, -1)
          # print (nfmittelwert/5000)
          # cv2.rectangle(streamout, (300, 200), (400, 300), YELLOW, 2)
          # cv2.imshow("Bild fuer NF", streamout)
          # cv2.waitKey(0)
          # cv2.destroyAllWindows()

    for j in range (1,7):
        cv2.line(streamout, (Ax[j], Ay[j]),(Bx[j], By[j]), light_BLUE, 2)  
    for j in range (7,10):
        cv2.line(streamout, (Ax[j], Ay[j]),(Bx[j], By[j]), Magenta, 1)                                                      

    cv2.drawContours(streamout, contours, -1, Olive, -1)                                    # plottet alle Konturen im Bild

    hoehe = np.zeros((10,5), np.single)
    cav_save = np.zeros((10000,20), np.single)

    anz = 0
    canz = 0
    hdiff = 0

    for cc in contours:                                              # Schleife über alle Konturen
        anz += 1
        flaeche = cv2.contourArea(cc)
        xc,yc,wc,hc = cv2.boundingRect(cc)
        rechteck = wc * hc
        cv2.rectangle(streamout, (xc, yc), (xc + wc, yc + hc), light_BLUE, 2)
        ux = int (xc + wc)
        uy = int (yc + hc)
        trigger = ux, uy

        rect = cv2.minAreaRect(cc)
        box = cv2.boxPoints(rect)
        box = np.int0(box)
        cv2.drawContours(streamout,[box],0, RED,2)

        NBx, NBy = box[1]
        left_top_red = NBx, NBy

        cv2.circle(streamout, trigger, 6, light_BLUE, 2)  # Kreis plotten
        cv2.circle(streamout, left_top_red, 6, RED, 2)    # roten Kreis plotten
        if flaeche < 4: cv2.circle(streamout, left_top_red, 6, GREEN, -2)    # grünen Kreis plotten
        cv2.line(streamout, (Ax[1], Ay[1]), trigger, light_BLUE, 1)

        for j in range (1,10):

            dx = NBx -Bx[j]
            dy = NBy -By[j]
            aNB = m.sqrt(dx*dx + dy*dy)
   
            dx = ux -Bx[j]
            dy = uy -By[j]
            a1 = m.sqrt(dx*dx + dy*dy)
   #        print ('a1  ',a1)

            dx = ux -Ax[j]
            dy = uy -Ay[j]
            b1 = m.sqrt(dx*dx + dy*dy)
   #        print ('b1  ',b1)
            try:    
                cos_A = (b1*b1 + cqu - a1*a1)/(2*b1*c)
            except:
                cos_A = 0.7
   #        print (' cos alpha  ', cos_A)
            try:
                A = m.acos(cos_A)
            except:
                A = 99
            sin_A = m.sin(A)
            A = np.rad2deg(A)
   #        print ('Alpha  ',A)
            hoehe1 = b1 * sin_A
            if j > 1: hdiff = hoehe_alt - hoehe1
            hoehe_alt = hoehe1
             
            print ('sin alpha ', sin_A,'    Höhe1  ', hoehe1, 'Diff: ', hdiff)
            hoehe[j,1] = hoehe1
            hoehe[j,2] = aNB
            hoehe[j,3] = b1
        # end for
     
        min_aNB = 10000
        min_b1 = 10000
        for j in range (1,9):  # Zeilen
            if (hoehe[j,1] < 52.35) and (hoehe[j+1,1] < 52.35): # 52.4
                print (' Hit in Zeile: ', j)
                cav_save[anz,j] = flaeche
                if j < 6: canz +=1
            if (hoehe[j,2] < min_aNB): min_aNB = hoehe[j,2]
            if (hoehe[j,3] < min_b1): min_b1 = hoehe[j,3]
        print ('  anz  ', anz, ' min_aNB ', min_aNB, ' min_b1 ', min_b1, '  Fläche ', flaeche)
        cav_save[anz,10] = flaeche
        cav_save[anz,11] = min_aNB
        cav_save[anz,12] = min_b1

    # end / for cc

    for i in range (1,anz+1):
        for j in range (1,6):
            if (cav_save[i,j] > 0.0) and (cav_save[i,11] < 150):    # min_aNB, war 100    150
                for k in range (1,anz+1):
                    if cav_save[k,j] > 0.0:
                        cav_save[k,j] = -1 * cav_save[k,j]
                        canz -= 1

    for i in range (1,anz+1):
        for j in range (1,13):
            print (cav_save[i,j], ' ', end = ' ')
        print ('', end = "\r\n")
    print ()

    summenvector = np.zeros((13), np.single)
    for i in range (1, anz+1):
        for j in range (1,9):
            summenvector[j] =  summenvector[j] + cav_save[i,j]

    for i in range (1,9):
        print (summenvector[i], end = ' | ')
    print ( '', end = "\r\n")

    summe = 0
    besetzte_zeilen = 0
    for i in range (1,6):
        if summenvector[i] > 0:
            summe = summe + summenvector[i]
            if summenvector[i] > 2: besetzte_zeilen += 1  # war 2
        if summenvector[i] < 0:
            bg = cv2.line(bg,(xa, 500),(xa, 485), RED, 1)   # Y- Tick bei Knackimpuls
            if debug == 2:
                cv2.imshow("org", streamout)

    print ('  Summe: ', summe)
    print (anz, '  ', canz, '   ', summe, '   bes. Z.>inc 1-2-1:  ', besetzte_zeilen)

    for i in range (1,6):
        if summenvector[i] < 0 and anz > 30 and summe > 0:
            bg = cv2.line(bg,(xa, 500),(xa, 515), RED, 1)   # Y- Tick bei massiver Störung
            summe = 0
            if debug == 2:
                cv2.imshow("org", streamout)
    for i in range (1,6):
        if summenvector[i] < 0 and summenvector[i+2] < 0:
            bg = cv2.line(bg,(xa, 500),(xa, 515), RED, 1)   # Y- Tick bei massiver Störung
            summe = 0
            if debug == 2:
                cv2.imshow("org", streamout)

    if raucherraus == 1:
        print (' besetzte_zeilen ', besetzte_zeilen, '   Raucher  ', raucher)
        if besetzte_zeilen == 0 and raucher == 1:
            raucher = 0
        if besetzte_zeilen > 0 and  raucher == 1:
            summe = 0
        if besetzte_zeilen >= 3:    
            if raucher == 0: raucher = 1

        print (anz, '  ', canz, '   ', summe, '   bes. Z.>inc 1-2-1:  ', besetzte_zeilen)
    #    cv2.imshow('test', streamout)  
    #    cv2.waitKey(0)
    #    cv2.destroyAllWindows()              

    if summe > 2:

        if (canz >= 2) and (summe < 4):
            summe = 0
            bg = cv2.line(bg,(xa, 500),(xa, 510), Magenta, 2)   # Y- Ticks    #letzte Änderung 3.1.2022
            print ('Magenta')
            if debug == 2: cv2.imshow("org", streamout)

        if (canz >= 3) and (summe < 7):  # war 20
            summe = 0
            bg = cv2.line(bg,(xa, 500),(xa, 510), light_BLUE, 2)   # Y- Ticks  
            print ('light_BLUE')
            if debug == 2: cv2.imshow("org", streamout)

        if (canz >= 5) and (summe < 90): #100
            summe = 0
            bg = cv2.line(bg,(xa, 500),(xa, 510), Yellow, 2)   # Y- Ticks  
            print ('Yellow')
            if debug == 2: cv2.imshow("org", streamout)
 
        elif (canz >= 8) and (summe < 200):
            summe = 0
            bg = cv2.line(bg,(xa, 500),(xa, 510), BLUE, 2)     # Y- Ticks
            print ('BLUE')
            if debug == 2: cv2.imshow("org", streamout)

        elif (canz >= 12) and (summe < 1000):
            summe = 0
            bg = cv2.line(bg,(xa, 500),(xa, 510), Rose, 2)       # Y- Ticks
            print ('Rose')
            if debug == 2: cv2.imshow("org", streamout)

        if (summe > 100000):
            summe = 0
            bg = cv2.line(bg,(xa, 500),(xa, 510), RED, 2)       # Y- Ticks
            if debug == 2: cv2.imshow("org", streamout)
    # end if summe > 2

    print (anz, '  ', canz, '   ', summe)
    print ()
    splitit = 0
    nsignale = 0
    incrementer = 0
    zsumme = 0
    dicke = 3
    if summe > 2:
        for i in range (1,6):
            if (summenvector[i] > 2) and (besetzte_zeilen <= 2):
                nsignale += 1
                fl = int(495 -100 * m.log10(summenvector[i]))
                y_t_color = Magenta
                if canz == 1: y_t_color = GREEN
                if canz == 2: y_t_color = GREEN
                if canz == 3: y_t_color = GREEN
                if canz == 4: y_t_color = YELLOW
                if canz == 5: y_t_color = YELLOW
                if canz == 6: y_t_color = BLUE
                if canz == 7: y_t_color = Rose
                bg = cv2.circle(bg, (xa, fl), dicke , y_t_color, -1)
                print (fl)
                summe_fl[int(ho)+1] = summe_fl[int(ho)+1] + summenvector[i]
                splitit = summenvector[i]
                if (splitit >= 1) and (splitit < 10): su1[int(ho)+1] += 1
                if (splitit >= 10) and (splitit < 100): su10[int(ho)+1] += 1        
                if (splitit >= 100) and (splitit < 300): su100[int(ho)+1] += 1
                if (splitit >= 300) and (splitit < 1000): su300[int(ho)+1] += 1
                if (splitit >= 1000) and (splitit < 10000): su1000[int(ho)+1] += 1
                if (splitit >= 10000) and (splitit < 100000): su10000[int(ho)+1] += 1

                fsumme_10min[6*int(ho)+ int(int(mi)/10)] = fsumme_10min[6*int(ho)+ int(int(mi)/10)] + summenvector[i]

                if k30 == 1 and (splitit >= 1) and (splitit < Schwelle): summe_10min[6*int(ho)+ int(int(mi)/10)]  += 1
                if k30 == 2 and (splitit >= 3000) and (splitit < 100000): summe_10min[6*int(ho)+ int(int(mi)/10)] += 1
                if k30 == 3: summe_10min[6*int(ho)+ int(int(mi)/10)] += 1

             #end if
        #end for
        if (besetzte_zeilen >= 3):
            for i in range (1,6):
                zsumme = zsumme + summenvector[i]
            print ('zsumme : ',zsumme, '   summe ', summe)

            fsumme_10min[6*int(ho)+ int(int(mi)/10)] = fsumme_10min[6*int(ho)+ int(int(mi)/10)] + summe

            try:
                fl = int(495 -100 * m.log10(zsumme))
            except:
                fl=1
            bg = cv2.circle(bg, (xa, fl), dicke , RED, -1)
            splitit = summe
            nsignale = besetzte_zeilen
            if (splitit >= 1) and (splitit < 10): su1[int(ho)+1] += 1
            if (splitit >= 10) and (splitit < 100): su10[int(ho)+1] += 1          
            if (splitit >= 100) and (splitit < 300): su100[int(ho)+1] += 1
            if (splitit >= 300) and (splitit < 1000): su300[int(ho)+1] += 1
            if (splitit >= 1000) and (splitit < 10000): su1000[int(ho)+1] += 1
            if (splitit >= 10000) and (splitit < 100000): su10000[int(ho)+1] += 1
            summe_fl[int(ho)+1] = summe_fl[int(ho)+1] + summe

            if k30 == 1 and (splitit >= 1) and (splitit < Schwelle): summe_10min[6*int(ho)+ int(int(mi)/10)]  += 1
            if k30 == 2 and (splitit >= 3000) and (splitit < 100000): summe_10min[6*int(ho)+ int(int(mi)/10)] += 1
            if k30 == 3: summe_10min[6*int(ho)+ int(int(mi)/10)] += 1

        if (besetzte_zeilen == 1): incrementer = 1
        if (besetzte_zeilen == 2): incrementer = 2
        if (besetzte_zeilen >= 3):
            incrementer = 1
       #     cv2.imshow('test', streamout)  
       #     cv2.waitKey(0)
       #     cv2.destroyAllWindows()
        if summe > 10000 and debug == 4:    # > 10000
           print(zeit)
           cv2.imshow('test', streamout)  
           cv2.waitKey(0)
           cv2.destroyAllWindows()
        summe_anz[int(ho)+1] = summe_anz[int(ho)+1] + incrementer

        if (summe >= 1) and (summe < 100000): sugesamt = sugesamt + incrementer
    if nsignale == 1: singlet += 1
    if nsignale == 2: doublet += 1
    if nsignale == 3: Long += 1
    if nsignale == 4: quartet += 1
    if (nsignale > 1) and (debug == 3): cv2.imshow("org", streamout)
    print ('Singlet:', singlet, '  Doublet:', doublet, '  Long:', Long)

    print (name[position-12:position], '         alle zusammen   ',int(sugesamt))
    print ('-------------------------------------------------------------------------')

    for i in range (1,25):  
        print (summe_fl[i], end = ' |')

    if (debug == 1): # and (summe > 2):
        cv2.imshow('test', streamout)  
    if debug > 0:
        cv2.waitKey(0)
        cv2.destroyAllWindows()

fl_max = 0
fl_max_i = 0
fl_sum = 0
print (' Histogramm Flaechen ')
for i in range (1,25):
    fl_sum = fl_sum + summe_fl[i]
    if fl_max < summe_fl[i]:
        fl_max = summe_fl[i]
        fl_max_i = i        
    print (summe_fl[i], end = ' |')
print ( '', end = "\r\n")

anz_max = 0
anz_max_i = 0
print (' Histogramm Anzahl ')
for i in range (1,25):
    if anz_max < summe_anz[i]:
        anz_max = summe_anz[i]
        anz_max_i = i
    print (summe_anz[i], end = ' |')
print ( '', end = "\r\n")
print (seiten)

for i in range (0, 12): print (i // 6,'   ',summe_10min[i])  # 144
for i in range (0, 12): print (i // 6,'   ',fsumme_10min[i])  # 144

fontScale1 = 0.4
for i in range (1,25):
    cv2.rectangle(histogramm, (i*20, 250), ((i * 20) +10, 250 - int(summe_fl[i]/333.33)), RED, -1)  
    cv2.rectangle(histogramm, (i*20, 500), ((i * 20) +10, 500 - summe_anz[i]*3), Yellow, -1)    # *4
 #  cv2.rectangle(histogramm, (i*20 +2, 500), ((i * 20) +8, 500 - summe_anz[i]*2), darkOlive, -1)    # Test
    org = (int(i*19.9), 520)
    cv2.putText(histogramm, str(i-1), org, font, fontScale1, WHITE, fthickness, cv2.LINE_AA)
                                      # 250 -75 -75
cv2.line(histogramm,(30, 175),(490, 175), darkOlive, 1)
cv2.line(histogramm,(30, 100),(490, 100), darkOlive, 1)
cv2.putText(histogramm, '25k', (4, 175), font, fontScale1, Olive, fthickness, cv2.LINE_AA)
cv2.putText(histogramm, '50k',(4, 100), font, fontScale1, Olive, fthickness, cv2.LINE_AA)

                                      # 500 -75 -75
cv2.line(histogramm,(20, 425),(490, 425), darkOlive, 1)
cv2.line(histogramm,(20, 350),(490, 350), darkOlive, 1)
cv2.putText(histogramm, '25', (4, 425), font, fontScale1, Olive, fthickness, cv2.LINE_AA)
cv2.putText(histogramm, '50', (4, 350), font, fontScale1, Olive, fthickness, cv2.LINE_AA)

cv2.line(bg,(1,1),(1,500),(WHITE),2)
cv2.line(bg,(1,499),(1900,499), WHITE,2)    # Skala

for j in range (1,5):
    bg = cv2.line(bg,(0, j * 100),(15, j * 100), WHITE,2)   # Y- Ticks  
off = 4
cv2.putText(bg, '1', (5, 500-off), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg, '10', (5, 400-off), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg, '100', (5, 300-off), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg, '1000', (5, 200-off), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg, '10000', (5, 100-off), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg, '100000', (5, 20), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg, 'Size/Pixel', (15, 55), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg,'Time / UTC', (580, 543), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(bg,'WiSi 2022', (1350,543), font, 0.5, RED, fthickness, cv2.LINE_AA)

cv2.putText(histogramm, ' Summe Flaechen: '+str(int(fl_sum)), (10, 30), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(histogramm, ' max: '+ str(int(fl_max)) + ' um '+ str(fl_max_i - 1)+ ' h', (10, 50), font, fontScale, WHITE, fthickness, cv2.LINE_AA)

cv2.putText(histogramm, ' Anzahl: '+str(int(sugesamt)), (10, 280), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
cv2.putText(histogramm, ' max: '+str(anz_max) + ' um ' + str(anz_max_i - 1) + ' h', (10, 300), font, fontScale, WHITE, fthickness, cv2.LINE_AA)

cv2.imshow('    ' + day +'. ' + Monat +' 2022, Histogramme, Zeit in UTC, ', histogramm)
cv2.imshow('    ' + day +'. ' + Monat +' 2022, Logarithmus der Flaechen der Konturen' + sname, bg)

spalte1 = 0
spalte10 = 0
spalte100 = 0
spalte300 = 0
spalte1000 = 0
spalte10000 = 0
for i in range (1,25):
    spalte1 = spalte1 + su1[i]
    spalte10 = spalte10 + su10[i]
    spalte100 = spalte100 + su100[i]
    spalte300 = spalte300 + su300[i]
    spalte1000 = spalte1000 + su1000[i]
    spalte10000 = spalte10000 + su10000[i]

fanz = 0.0
sanz = 'string'
with open('datum.txt', 'w') as f:
    f.write(' Aufnahmedatum ' + day + '. '+ Monat + ' 2022' + sname + '\n')

    f.write(' ausgewertet am: ' + time.strftime("%d/%m/%Y, %H:%M:%S" + '\n'))
    f.write('             Anz      Fl     Gr 1-10  10-100  100-300  300-1k  1k-10k  10k-100k  #Platzhalter#  '+ '\n')
    for j in range (1, 25):
        susi = ("{:8.1f}".format(summe_fl[j]))
        fanz = float(summe_anz[j])
        sanz = ("{:4.0f}".format(fanz))
        susi1 = ("{:8.0f}".format(su1[j]))
        susi10 = ("{:8.0f}".format(su10[j]))
        susi100 = ("{:8.0f}".format(su100[j]))
        susi300 = ("{:8.0f}".format(su300[j]))
        susi1k = ("{:8.0f}".format(su1000[j]))
        susi10k = ("{:8.0f}".format(su10000[j]))
#        f.write('  ' + str(round(j-1)).zfill(2) + ' UTC   ' + sanz + '  ' + susi + susi1 + susi10 + susi100 + susi300 + susi1k +
#        susi10k + '     |' + ' hier hin 1 2 3 4 5 6  \n')
        f.write('  ' + str(round(j-1)).zfill(2) + ' UTC   ' + sanz + '  ' + susi + susi1 + susi10 + susi100 + susi300 + susi1k +
        susi10k + '     |' + '  \n')
 
    susi1 = ("{:8.0f}".format(spalte1))
    susi10 = ("{:8.0f}".format(spalte10))
    susi100 = ("{:8.0f}".format(spalte100))
    susi300 = ("{:8.0f}".format(spalte300))
    susi1k = ("{:8.0f}".format(spalte1000))
    susi10k = ("{:8.0f}".format(spalte10000))
    f.write('  -----------------------------------------------------------------------------'+ '\n')
    f.write('  Summen:' + "{:6.0f}".format(sugesamt) + "{:10.1f}".format(fl_sum) + susi1 + susi10 + susi100 + susi300 + susi1k + susi10k + '   \n')
    f.write('\r\n')

    for i in range (0, 144):
        susi_i = ("{:8.0f}".format(i//6))
        susi_10min = ("{:8.0f}".format(summe_10min[i]))
        if i > 0: f.write('  ' + susi_i + susi_10min + '   \n')
        if i == 0: f.write('  ' + susi_i + susi_10min + '   Aufnahmedatum ' + day + '. '+ Monat + ' 2022' + sname + '\n')
    f.write('\r\n')

    for i in range (0, 144):
        susi_i = ("{:8.0f}".format(i//6))
        susi_10min = ("{:8.0f}".format(fsumme_10min[i]))
        if i > 0: f.write('  ' + susi_i + susi_10min + '   \n')
        if i == 0: f.write('  ' + susi_i + susi_10min + '   Aufnahmedatum ' + day + '. '+ Monat + ' 2022' + sname + '\n')
    f.write('\r\n')

cv2.waitKey(0)
cv2.destroyAllWindows()
 
Zuletzt bearbeitet:
Guten Tag,
heute ist die neueste Ausgabe von eMeteorNews erschienen.
Es gibt viele interessante Artikel, zB über neu entdeckte Ströme. Mein erster Meteor-Artikel ist auch drin. Einige Grafiken sind wegen der Verkleinerungen nicht optimal, aber das entsprechende Plot-Programm habe ich inzwischen geändert.
Viele Grüße
Wilhelm
 
Guten Tag.
Hier sind nun meine Ergebnisse zu den September-Perseiden, die am 9. September das Maximum haben sollten.

Sie sehen, dass Sie nichts sehen.

Man sieht allerdings sehr schön Peaks ein bis zwei Stunden vor Mitternacht, die in diesem Zeitraum überwiegend von den Nördlichen Iota Aquariiden (NIA) stammen. Die roten Kurven zeigen die Radiantenhöhe der NIA. Das Maximum der Radiantenhöhe ist um 0 h - 1 h UT mit 48°. Die grüne Kurve zeigt den Summenverlauf der Echos. Diese Kurve hat lokale Maxima um 21 h - 22 h, was aber für die NIA etwa 2-3 Stunden zu früh ist. Ursache dafür kann nur eine Kerbe sein, die die Echos verschluckt. Besonders gut lässt sich das am 4. September verdeutlichen: Laut CMOR waren am 4. nur die NIA aktiv. Daher war das Radiantenfeld klein und das Maximum, das Resultat aus NIA und Kerbe, ist sehr scharf. Den Sachverhalt habe durch eine kleine Zeichnung verdeutlicht.
Ein schönes Wochenende wünsche ich,
viele Grüße
Wilhelm
 

Anhänge

  • NIA-Notch.png
    NIA-Notch.png
    60,8 KB · Aufrufe: 73
Danke für den Bericht! Ich musste leider pausieren, nach fast drei Jahren hat uns Corona dann doch erwischt 😞 zumindest läuft der SDRPLAY über Python und ich kann alles auslesen. Hatte gehofft vor dem 9. alles zu automatisieren…Frohes Schaffen!
 
Hallo Stefanie,
gute Besserung wünsche ich Euch.

Hier ist noch ein schönes Detail:
Man sieht, dass für den Einbruch überwiegend die gelbe Spur, also die kleinen Echos verantwortlich sind. Die lila Spur, die mittelgroßen Echos brechen weniger ein und die großen blauen kaum. Bei den Geminiden und Arietiden war das anders – Grund noch unbekannt.
Man kann ungefähr abschätzen, ab welchem Winkel die Kerbe greift.
Einen schönen Sonntag und viele Grüße
Wilhelm
 

Anhänge

  • Ausschnitt_aus_NIA-Notch.png
    Ausschnitt_aus_NIA-Notch.png
    27,7 KB · Aufrufe: 76
Guten Tag.
Das Paper über die Perseiden & Co ist gerade fertig geworden.
Die Bildchen aus den letzten Posts sind in Figure-6 eingeflossen.

Nun schalte ich die Anlage erst mal wieder ab und wische den Staub weg. Später könnte ich den schönen Spätsommertag zum Kopterfliegen nutzen…
Einen schönen Tag wünsche ich und viele Grüße,
Wilhelm
 

Anhänge

  • Figure-6.png
    Figure-6.png
    115,1 KB · Aufrufe: 71
  • Spaetsommer.jpg
    Spaetsommer.jpg
    868,3 KB · Aufrufe: 57
Heute Nacht schien mir der Mond schön ins Gesicht.
Hier sind ein paar Mondechos. Es sind die Signale am linken Rand bei 700 Hz.
Fritz hat mich drauf gebracht.
Viele Grüße,
Wilhelm
 

Anhänge

  • GRAVES-XY-Vv_220912034759.jpg
    GRAVES-XY-Vv_220912034759.jpg
    581,5 KB · Aufrufe: 54
  • GRAVES-XY-Vv_220912035720.jpg
    GRAVES-XY-Vv_220912035720.jpg
    583 KB · Aufrufe: 43
  • GRAVES-XY-Vv_220912040339.jpg
    GRAVES-XY-Vv_220912040339.jpg
    581,1 KB · Aufrufe: 37
  • GRAVES-XY-Vv_220912040940.jpg
    GRAVES-XY-Vv_220912040940.jpg
    580,8 KB · Aufrufe: 48
  • GRAVES-XY-Vv_220912041000.jpg
    GRAVES-XY-Vv_220912041000.jpg
    581,4 KB · Aufrufe: 41
Guten Tag.
Das Perseiden-Paper wird gerade von Experten Korrektur gelesen. Daher habe ich etwas Langeweile und meine BRAMS-Antenne getestet, s. Anhang.

Wenn ich das richtig sehe, gibt es an der Deichsel des Großen Wagen einen neuen Radianten.
(Am besten heute Abend noch mal schauen.)
Zumindest finde ich ihn nirgendwo gelistet.
Ein schönes Wochenende wünsche ich,
viele Grüße
Wilhelm
 

Anhänge

  • BRAMS_220916000440.jpg
    BRAMS_220916000440.jpg
    638 KB · Aufrufe: 31
  • BRAMS_220916014219.jpg
    BRAMS_220916014219.jpg
    632 KB · Aufrufe: 34
  • BRAMS_220916014239.jpg
    BRAMS_220916014239.jpg
    631,1 KB · Aufrufe: 46
  • BRAMS_220916030339.jpg
    BRAMS_220916030339.jpg
    633,2 KB · Aufrufe: 31
Oben