{"id":17026494,"url":"https://github.com/djsudduth/wspr-reports","last_synced_at":"2025-03-22T19:16:27.885Z","repository":{"id":170404754,"uuid":"646528810","full_name":"djsudduth/wspr-reports","owner":"djsudduth","description":"Reports and charts for amateur radio wspr hf performance using propagation accuracy measurements","archived":false,"fork":false,"pushed_at":"2023-07-18T13:31:22.000Z","size":195,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-27T23:18:33.881Z","etag":null,"topics":["amateur-radio","amateurradio","antenna-analyzer","antennas","atmospheric-science","hf","propagation","wspr","wspr-beacon","wspr-spots","wsprnet"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djsudduth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-05-28T17:27:50.000Z","updated_at":"2024-12-29T01:20:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"e8d74c51-83f4-4b0c-9315-42eeb2abd8e8","html_url":"https://github.com/djsudduth/wspr-reports","commit_stats":{"total_commits":43,"total_committers":1,"mean_commits":43.0,"dds":0.0,"last_synced_commit":"d08fe505c9fe0eeca832f26cd7e1e9d141bb4965"},"previous_names":["djsudduth/wspr-reports"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djsudduth%2Fwspr-reports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djsudduth%2Fwspr-reports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djsudduth%2Fwspr-reports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djsudduth%2Fwspr-reports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djsudduth","download_url":"https://codeload.github.com/djsudduth/wspr-reports/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245007239,"owners_count":20546143,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amateur-radio","amateurradio","antenna-analyzer","antennas","atmospheric-science","hf","propagation","wspr","wspr-beacon","wspr-spots","wsprnet"],"created_at":"2024-10-14T07:32:59.513Z","updated_at":"2025-03-22T19:16:27.857Z","avatar_url":"https://github.com/djsudduth.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# wspr-reports\nReports and charts for amateur radio wspr hf performance using propagation accuracy measurements. The goal is to determine HF antenna performance based on a time series collection of wspr signal reports. Reports are saved as CSV files for analysis either using spreadsheets or other tools.\n\n## Background\nMany amateurs utilize wspr reports to determine their overall HF system performance. However, widely variable factors affect wspr reports by distant stations. These can include time of day, solar x-ray flux, ionospheric variations, etc.   \n**Relying on short duration wspr reports can lead to false assumptions and correlations regarding performance**.  \n\nFor these reports GOES 16-short data is joined with the wspr data to determine x-ray flux over the measured time period.  \n\n## Examples\nThe first report shows the wspr SNR means and std deviations by azimuth direction (N, NE, E, SE, S, SW...) from my location (determined by the wsprnet.org data) based on the number of reception reports by monitoring callsigns:\n \n`map  km   Reporter        count    mean       std     min    25%   50%    75%   max`  \n`S   731   AC0G            1.0 -29.000000        NaN -29.0 -29.00 -29.0 -29.00 -29.0`  \n`    734   KV0S            3.0 -13.000000   1.732051 -14.0 -14.00 -14.0 -12.50 -11.0`  \n`    918   K6RFT           7.0   0.285714   3.728909  -6.0  -1.50   2.0   3.00   3.0`  \n`    1164  W5JVS           6.0  -6.833333   3.600926 -12.0  -8.00  -7.0  -6.00  -1.0`  \n`    1475  KG5ABO          1.0 -21.000000        NaN -21.0 -21.00 -21.0 -21.00 -21.0`  \n`    1720  N5TTT           2.0 -18.000000   2.828427 -20.0 -19.00 -18.0 -17.00 -16.0`  \n`    1733  N5BIA           1.0 -17.000000        NaN -17.0 -17.00 -17.0 -17.00 -17.0`  \n`    2185  WB5B            7.0 -15.714286   2.429972 -19.0 -17.50 -16.0 -13.50 -13.0`  \n\nIn this example, all of my 5w 30m SNR reports received south (S) of my location over a 1 hour timespan show the number of received reports (count), the mean of the wspr report in db and the std deviation of the reports. K6RFT at 1164 km away in MO reported most often (7x) with a mean SNR report of ~0db and a std deviation of 3.72.   \n**A std deviation of 3.72 is a wide range of reception reports (min = -6.0db to max = 3.0db or a 9db variation in one hour)**\n\nThe next report excerpt shows the time-series values of the SNR reports received by distance and their trending slopes (is my wspr report increasing over time or decreasing?). For example WA5DJJ shows a slope of 2.0 - significantly increasing SNR report to the SW from about -18.5db to -8.0db within an hour based on 7 reports. KG7YC is also increasing possibly implying better propagation to the SW.\n\n`       km      Reporter                                  SNR  slope   stdv  variance map`  \n`49   1748        VE6PDQ           [-3, -22, 3, -2, -21, -16]  -1.91  10.80     116.6  NW`  \n`50   1751          NI5F  [-18, -21, -22, -24, -21, -17, -21]   0.00   2.37       5.6  SE`  \n`51   1824         K1NPT                                [-23]   0.00   0.00       0.0   E`  \n`52   1827         W1NMF  [-15, -14, -14, -19, -14, -12, -14]   0.25   2.15       4.6   E`  \n`53   1829          K1BZ           [-5, -5, -5, -13, -12, -9]  -1.40   3.71      13.8   E`  \n`54   1877        WA5DJJ     [-18, -19, -18, -8, -12, -9, -8]   2.00   5.05      25.5  SW`  \n`55   2088       W7WKR/K            [-27, -28, -25, -24, -25]   0.80   1.64       2.7   W`  \n`56   2093         KG7YC  [-21, -20, -17, -21, -11, -22, -15]   0.71   4.02      16.1  SW`  \n\n\nThe last reports show slopes trending by direction from my callsign location. In other words, are the combined reports decreasing generally in a direction over the measured time period? In the example data below - clearly the most reports were from the W with an average positive slope possibly implying improving conditions to the west. Whereas, there may be decreasing conditions south (limited data).\n\n`  map                                                                     slopes  snr trend`  \n`3   S                              [0.0, -1.5, -1.29, -0.6, 0.0, 0.0, 0.0, 0.57]  -0.352500`  \n`5  SW                                               [0.54, 1.64, 2.0, 0.71, 3.5]   1.678000`  \n`6   W   [2.36, 0.8, 0.71, 0.7, 0.86, 1.5, 1.6,....., 0.7, 0.86, 0.54, 1.21, 0.0]   0.762353`  \n**note that averaging slopes of reception reports may be highly inaccurate due to distance and changing conditions**\n\nThe raw joined CSV data is saved for additional analytics (`wspr-goes-data.csv`)\n\n# usage\nRequirements - numpy and pandas  (`pip install`)\n\n## transmit wpsr\nTransmit wspr from your location for a specified time period (1-2 hours is a good baseline)  \n\n## wspr data\nCopy-paste your data directly from https://www.wsprnet.org/drupal/wsprnet/spotquery database query results page and save the data as `wspr.txt` in the script folder. See example wspr.txt data in the repo. \n\n**Be sure to save the headers with the data (api forthcoming)**  \n\n## xray data\nSave GOES `xrays-6-hour.json` soon after directly to same folder from https://services.swpc.noaa.gov/json/goes/primary/  \nSee example GOES data in the repo. \n\n\nMap direction is determined by your callsign location in the wspr.org results with this mapping deg to direction:  \n[0, 23, 68, 113, 158, 203, 248, 293, 337, 359] map to labels ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW', 'N']\n\n**To Execute:**   \n`python wspr-reports.py`      \n\nThe wspr and xray data will be joined on timestamp. Raw data outputs:\n1. wspr data with additional fields of direction from your location and distance classification (file only)\n2. Joined wspr and GOES data on timestamp (file only)\n3. View of reporter callsigns by map direction (using azimuth) from your location with SNR mean and standard deviation from at least 2 reports\n4. View of reporter callsigns by distance, SNR list, slope trend of the SNR, std deviation, and variance\n5. Mean of the trending slopes of SNR reports by map direction from your location (+slopes - trending stronger, -slopes - weaker)\n6. Mean of variances of the SNR reports by map direction from your location (large variances - widely varying reports)\n\nData is saved as .csv files in the script directory \n\n## example on how to use\n - KN0VA transmitted wspr on 30m for about 1 hour \n - The GOES and wspr data is joined together by timestamp in a file\n - For report #3 above - the wspr data has the lat/lon of KN0VA to determine map direction\n    - the report shows that wspr reporter KX4AZ/T which is 617km East of KN0VA has 21 reception reports with a wspr mean of -10.38 db and standard deviation of 3.73 db with a minimum report of -20.0 db / maximum of -6.0 db\n - For report #4 above \n    - the report shows the individual 21 receptions by KX4AZ/T along with the trending slope of -0.23 (increasing vs decreasing signal reports)\n - For report #5\n    - shows all the average slopes in one direction (KX4AZ/T is included in the East list) and the trend of those slopes (are signals Eastward increasing or decreasing in report strength?)\n - For report #6\n    - shows all the average variances of signal reports in one direction (KX4AZ/T is included in the East list) and the trend of those variaces (shows if signals Eastward varying widely in report strength)\n\n\n## notes\nNote that wspr SNRs vary by a standard deviation of typically around 2.0+ db even when xray flux is low and steady. This is independent of distance. \n\nExample:  \nKD2OM at 1270 km had snr reported values of [-11, -16, -13, -13] over a 45 min span midday on 30m -\u003e std dev = 2.06,  variance = 4.2   \nor   \nLX1DQ at 6885 km had snr values of [-16, -19, -19, -18, -16, -14, -16] over 1 hour span midday on 30m -\u003estd dev = 1.86, variance = 3.5  \n\nData measurements over 1-2 hours should consider D-layer ionization variability based on time of day, frequency and GOES spikes. Also, using SNRs for antenna performance characteristics should consider the std dev variability of SNR reports along with sporadic receptions from reporters that may appear or fade based on atmospheric changes. \n\n**Changing antenna configurations and using this data to understand performance should consider multiple wspr calls throughout the day over a number of days. Shorter measurements can lead to misinterpreted results.**\n\n## example range of data\n![GOES data range for example](goes-data-range.png)\n\n\n## release\nv0.0.1 - 05/29/2023  \nv0.0.2 - 07/17/2023  \n\nThank you!  KN0VA","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjsudduth%2Fwspr-reports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjsudduth%2Fwspr-reports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjsudduth%2Fwspr-reports/lists"}