rs1729 / rs Goto Github PK
View Code? Open in Web Editor NEWradiosonde decoding
License: GNU General Public License v3.0
radiosonde decoding
License: GNU General Public License v3.0
Hi, our MET department has changed their sondes from DFM to Weathex now. Currently we're capturing wav file using sdrsharp and using your weathex decoder, we are able to decode this offline and not real time. We're trying to capture this using our raspi, using rtl-sdr blog dongle but we don't really know how to go about it.
What we know, the signal is coming in wfm mode. Any clue on how we could using rtl_fm and sox to pipe the wav file to the weathex decoder?
Thanks in advance for your help.
73, de 9M2TPT/Mohd
Could you tell me what bandwidth have the MP3-H1 sondes? Based on the source code I assume that if baudrate is 2400 and manchester bit encoding is used than they should have at least 5kHz (demodulated) bandwidth. Is that about right? Are there any IQ samples available I could test with?
Thanks
Thanks for decoding Meteosis MTS01.
How can I run ./meteosis decoder on test branch?
I have one Meteosis and when I power it it’s start to transmitting.
Can you help me for decoding it with raw recorded file or directly from rtl_fm?
Thanks
Hello,
I'm calculating fft using csdr and using iq_server. So, I suppose that the result should look the same for the same signal but there are some slight differences which makes me wonder if something isn't quite right.
Here is the picture of the spectrum I get using csdr https://i.imgur.com/G9A6erQ.png
Here is the picture of the same region I get using iq_server/iq_client https://i.imgur.com/tazPe0s.png
The pictures are almost the same except that bin in the middle that goes down in case of iq_server. Additionally, the signal strength of the signal on the left (the bigger peak between 402.5 and 403 MHz) is somewhat weaker in case of iq_server
The sample rate is 2400000, number of bins 4096, gain 40, averaging 5 seconds (yes, I patched the iq_server a bit)
(Different noise levels do not play any role)
Thanks
Raising this as a placeholder. It appears there is a new version of the MRZ-H1 which uses a uBlox GPS.
Unsure what the differences in telemetry are, but apparently there is one station with a modified or new decoder (unsure) which is decoding it. Trying to get some more information from them about it.
Hi,
I´m using your decoder with radiosonde_auto_rx and in the log of the sounding the value of the pressure sensor is not present.
It´s not implemented yet? Because the model of the sonde -SGP (with sensor pressure) is well detected.
Thanks a lot for your devellopment and efforts.
Javier
Hello!
Can you show example usage rs_encode for GF16RS
I CCSDS used rs(10,6) shortned code for primary header protection
Thanks!
Not really an issue. I just want to thank you for adding GPLv3 license as it will make my life much easier.
I created sonde tracker for RPi last summer, written in Qt: https://github.com/danijelt/sondepi-qt
It's also licensed under GPLv3, so your licensing will allow me to integrate your code directly instead of the current solution, which will make the Android port much simpler.
I'll keep you updated, if interested.
Per subject. Get error when compiling all on RPi4 4GB RAM
gcc (Raspbian 8.3.0-6+rpi1) 8.3.0
cmake 3.16.3
I've compile the server and the client as well as recompiled all decoders in demod/mod
The server is started normally
IF : 48000
dec: 50
bps: 32
waiting on port 1280
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Sampling at 2400000 S/s.
Tuned to 402500000 Hz.
Tuner gain set to automatic.
Reading samples in async mode...
Allocating 15 zero-copy buffers
<0: ADD f=-0.0833>
waiting on port 1280
remark1: I'm sending -0.08333333 and if you scanf it into -0.0833 then you get 80 Hz offset.
remark2: I'm not sure if the sign is correct. If my target freq is above the tuner one then I want baseband be shifted left, so the rate param should be negative. Looks like it's the other way around here. But it doesn't matter
I'm starting the client the following way provided very strong rs41 signal at 402300000
#!/bin/bash
calc_bandpass_param()
{
#$1 = $SONDE_SIGNAL_BANDWIDTH
#$2 = $DEMODULATOR_OUTPUT_FREQ
awk -v sb=$1 -v ofr=$2 'BEGIN{printf("%.8f\n", sb/ofr)}'
}
TUNER_FREQUENCY=402500000
TARGET_FREQUENCY=402300000
TUNER_SAMPLE_RATE=2400000
freq=$(calc_bandpass_param "$((TARGET_FREQUENCY-TUNER_FREQUENCY))" "$TUNER_SAMPLE_RATE")
echo "freq: $freq"
./iq_client --freq "$freq" | tee >(./rs41mod -vx --IQ 0.0 - 48000 32) |
./csdr fmdemod_quadri_cf | ./csdr limit_ff | ./csdr convert_f_s16 |
sox -t raw -esigned-integer -b 16 -r 48000 - -b 8 -c 1 -t wav - highpass 10 gain +5 |
aplay -r 48000 -f S8 -t wav -c 1 -B 500000 &> /dev/null
here is the output:
freq: -0.08333333
sox WARN wav: Length in output .wav header will be wrong since can't seek to fix it
client: 0
sr: 48000
bsp: 32
IF: 48000
dec: 1
^Csox WARN highpass: highpass clipped 1922 samples; decrease volume?
sox WARN gain: gain clipped 10594 samples; decrease volume?
sox WARN dither: dither clipped 9324 samples; decrease volume?
rs41mod doesn't output anything but you can listen what my csdr demodulator outputs
https://ufile.io/0olggr9x
Don't know how long this file be available
But it sounds to be off the target frequency
Hi,
I'm member of group who is interested in weather sonde huting and reverse ingeneering (1), we vere missing GPS decoding which seems to be implemented here. We would like to participate but we does not speek Deutch. Is there posiibility to switch to english. I think it would also make this software more popular worldwide.
Hello from a fellow radiosonde enthusist!
I noticed that there doesn't appear to be a license clearly defined for this amazing repository.
For those who'd like to use, incorporate, and/or contribute back to the great work that has been done here with these radiosonde decoders, it'd be a big help if this repository was available under an open source license.
GitHub have some documentation available that guides you through adding a license to an existing repository if this is something you are interested in doing.
Thank you @rs1729 and any other contributors to this project for all your work!
Hi,
I found no instruction how to build individual tools and no anny build system is preset. How do you build those tools? Would you like to include anny?
I can help with that, if you wat so.
we have iMS-100 in use in Indonesia, once a week there is one local to here, and daily from another site 200km away. I have recorded some data as I would be keen to get decoding going here.
I am using SDR# but I am not sure about audio or baseband format and the bit rate.
Would you like samples of the data?
Up until 2 weeks ago they also would put the processed flight data up on this page a couple of hours after the launch. Hopefully they will resume doing this.
http://puslitbang.bmkg.go.id/rason/
regards hca
Hi. I'm trying to find how to read temperature and humidity directly from the sonde (custom firmware). In file rs41ptu.c I found function to calculate temperature (and humidity too). I would like to know where you got information about calculation and coefficients values. Maybe from sensor manufacturer datasheet?
Is it possible to add decoding for other data such as temperatur, humidity, and air pressure
for Meisei ims100 radiosonde ?
Greetings,
I've been trying to receive RS41 signal with RS/rs41. With Daniel Estevez describes, it was successful to get (basic) telemetry and PTU info as follows,
(base) OFRDs-MacBook-Pro:rs41 ofrd$ rtl_fm -f 405e6 -g 20 -s 48e3 - | sox -t s16 -r 48e3 -c 1 - -t wav - lowpass 2800 | ./rs41ptu_ --ecc --crc --ptu
Found 1 device(s):
sox WARN wav: Length in output .wav header will be wrong since can't seek to fix it
0: Realtek, RTL2838UHIDIR, SN: 00000001Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to 19.70 dB.
Tuned to 405252000 Hz.
Oversampling input by: 21x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Exact sample rate is: 1008000.009613 Hz
Sampling at 1008000 S/s.
Output at 48000 Hz.
sample_rate: 48000
bits : 16
channels : 1
samples/bit: 10.00
512,R2521089,Sa,2020-05-09, 08:50:59.000, 0.00000, 0.00000, 0.00, 0.0, 0.0, 0.0, -273.1, -1.0,# [00000]
513,R2521089,Sa,2020-05-09, 08:51:00.000, 0.00000, 0.00000, 0.00, 0.0, 0.0, 0.0, -273.1, -1.0,# [00000]
514,R2521089,Sa,2020-05-09, 08:51:01.000, 0.00000, 0.00000, 0.00, 0.0, 0.0, 0.0, 24.7, 60.6,# [00000]
515,R2521089,Sa,2020-05-09, 08:51:02.000, 0.00000, 0.00000, 0.00, 0.0, 0.0, 0.0, 24.7, 60.0,# [00000]
Then, I move onto HackRF to do the same and failed so far,
(base) OFRDs-MacBook-Pro:rs41 ofrd$ hackrf_transfer -r - -f 405e6 -g 20 -s 48e3 | sox -t >s16 -r 48e3 -c 1 - -t wav - lowpass 2800 | ./rs41ptu_ --ecc --crc --ptu
sox WARN wav: Length in output .wav header will be wrong since can't seek to fix it
call hackrf_set_sample_rate(48000 Hz/0.048 MHz)
call hackrf_set_freq(405000000 Hz/405.000 MHz)
Stop with Ctrl-C
sample_rate: 48000
bits : 16
channels : 1
samples/bit: 10.00
5.5 MiB / 1.005 sec = 5.5 MiB/second
5.8 MiB / 1.003 sec = 5.7 MiB/second
5.8 MiB / 1.000 sec = 5.8 MiB/second
5.5 MiB / 1.005 sec = 5.5 MiB/second
5.8 MiB / 1.001 sec = 5.8 MiB/second
5.5 MiB / 1.001 sec = 5.5 MiB/second
5.8 MiB / 1.004 sec = 5.7 MiB/second
^C 1.3 MiB / 0.220 sec = 6.0 MiB/secondExiting...
Total time: 7.24040 s
hackrf_stop_rx() done
hackrf_close() done
hackrf_exit() done
fclose(fd) done
exit
It is still not clear whether I post this issue either here or mossmann/hackrf. Should anyone have similar experience or comments on this matter, please give me a shout.
Ta, Reno
Hi good day from Spain,
There are possibility to implement the decoding of the aux data from the ozone sonding when the Rs41 is launched with the OIF411 ozone interface in according with Vaisala documentation M211486EN-C?
See attached screenshots. Also I give info about the Status (Diagnostic Word) implemented with my help in the Diego IW1GIS RS41 Tracker.
Minor issue. I suppose something is wrong with the wav header added. The rs41mod decoder is able to understand the header but the standard linux tools. So as an example
../iq_svcl/iq_client --freq -0.3771 | ../iq_svcl/iq_fm --wav --lpbw 10 - 48000 32 --bo 16 | aplay -t wav
won't work.
Workaround currently is to treat the stream as raw
../iq_svcl/iq_client --freq -0.3771 | ../iq_svcl/iq_fm --wav --lpbw 10 - 48000 32 --bo 16 | aplay -t raw -r 48000 -f S16_LE -c1
Hello,
trying to decode RS41 data as described in https://github.com/rs1729/RS/tree/master/rs41
However I'm missing an option to directly pipe into from rtl_fm. How is this possible to follow live data ?
Using m10ptu sometimes i get incorrect readings (time, date, alt and lat/lon), this does not happen with other decoders like sondemonitor. I wonder if it would be possible to improve the performance or extra frame checks. I don't see that the decoder has any command line switch, would it be possible to show only the valid frames?
(W 2218) Di 2022-07-12 (14:14:50) lat: 39.XXXXXX lon: -1.XXXXXX alt: 878.31
(W 2218) Di 2022-07-12 (14:14:52) lat: 39.XXXXXX lon: -1.XXXXXX alt: 872.00
(W 2218) Di 2022-07-12 (14:14:55) lat: 39.XXXXXX lon: -1.XXXXXX alt: 862.64
(W 272) Di 1985-03-26 (14:14:59) lat: 39.XXXXXX lon: -2.XXXXXX alt: 1682.48
(W 272) Di 1985-03-26 (14:15:18) lat: 39.XXXXXX lon: -2.XXXXXX alt: 1261.89
(W 2218) Di 2022-07-12 (14:15:33) lat: 39.XXXXXX lon: -1.XXXXXX alt: 728.86
(W 2218) Di 2022-07-12 (14:15:39) lat: 39.XXXXXX lon: -1.XXXXXX alt: 657.37
(W 1088) Di 2000-11-14 (14:15:57) lat: 25.XXXXXX lon: -2.XXXXXX alt: 61.82
(W 544) Mo 1990-06-11 (23:37:43) lat: 30.XXXXXX lon: -2.XXXXXX alt: 1203.45
Dear all,
I am just trying to get started but do not exactly where to start.
I started ./scan_multi_rs.pl but it complains about a missing db.txt file.
Could you please state what it is and where I can find it and/or how I can generate it?
Thanks in advance for your feedback !
Here is what I did:
casa@DPR:~/RS/RS/scan$ ./scan_multi_rs.pl
[scan 403660000:404620000:405580000]
rtl_sdr -g 40.2 -p 45 -f 404620000 -s 1920000
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Sampling at 1920000 S/s.
Tuned to 404620000 Hz.
Tuner gain set to 40.20 dB.
Tuner error set to 45 ppm.
Reading samples in async mode...
User cancel, exiting...
Reattached kernel driver
sh: 1: ./scan_pow: not found
rs-peaks: 0
Traceback (most recent call last):
File "plot_fft_pow.py", line 8, in <module>
data = np.genfromtxt( 'db.txt', delimiter=';', names=['1','2','3','4','5','6','7','8', '9'] )
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1549, in genfromtxt
fhd = iter(np.lib._datasource.open(fname, 'rbU'))
File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 151, in open
return ds.open(path, mode)
File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 501, in open
raise IOError("%s not found." % path)
IOError: db.txt not found.
Thanks in advance for your feedback !
David
Is it possible to use the raw file as input for different decoders as rs41mod? There is --rawhex option in rs41mod. But, I couldn't find it in other decoders - m10mod, mXXmod, rs92mod etc.
During sounding, I use option -r to write output to the raw file. And after sounding ends, I decode data to readable data or a JSON file.
I tried to request fft scans in a loop but then my script stopped scanning after some time. Didn't look into the problem but added a continues fft scanning mode. So basically if the fft slot allocated during start is not in continues mode then reuse it, otherwise use another available slot. Solution works stable. Didn't want to create a PR for that but here are changes
flux242/radiosonde@7266605#diff-9c15688c9d0f74763039a4867455fd9d13e543df4a8958fb4ed4da802a6e478e
The RS92 PTU data is described here:
https://brmlab.cz/project/weathersonde/telemetry_decoding
Frequencies of capacitive sensors can be measured as periods 1/freq. The RS92 PTU values can be approximately calculated as described in the lecture notes by Haeberli (2001):
https://www.file-upload.net/download-14470162/haeberli-convert.pdf.html
(probably for a predecessor of the RS92)
RS92 seems to use degree 5 polynomials to model the sensors, though for the two humidity sensors the upper two coefficients are zero.
In
2453b79
only the uncorrected values are calculated. Temperature and pressure are close enough.
The humidity sensors are heated in intervals (up to -60C/100hPa), however if the temperature difference is not constant, the temperature at the humidity sensor would have to be estimated depending on e.g. air temperature and air flow (climb rate). At lower temperatures and higher relative humidity the corrected relative humidity would be noticeably higher (applying e.g. Hyland/Wexler).
cf.
https://amt.copernicus.org/articles/7/4463/2014/ (amt-7-4463-2014)
https://www.vaisala.com/sites/default/files/documents/9781461439080-c1.pdf
An interesting one observed by Pit[m] in Germany. A DFM sonde that has lat/lon etc decoding fine, but never obtains an ID.
I've got the raw bit output from auto_rx hosted here: https://rfhead.net/sondes/samples/dfm_unknown.bin
Run with: cat dfm_unknown.bin |./dfm09mod --bin (and whatever options you need)
Might be something new?
It would be nice to have a FM demodulator as a standalone application. If I do
iq_client --freq 0.023 |
tee >(./rs41mod ...) \
>(./rs92mod ...)
it makes no sense for all decoders I start in parallel to demodulate the signal first. And without demodulator it is not possible to get audible signal
Input parameters for the demodulator could be at least bandpass filter paramters (e.g -0.5;0.5). Bandpass filter comes before the quadrature demodulator
The WMO code are in the common code tables
http://www.wmo.int/pages/prog/www/WMOCodes/WMO306_vI2/LatestVERSION/LatestVERSION.html
2018 Jun:
station: sonde_type(s) # lat lon
all_stat_2018jun.txt
Some stations not reporting to http://weather.uwyo.edu/upperair/sounding.html
(e.g. Uccle: RS41-SGP+O3)
Cuba and Spain not reporting, and Finland, home of RS92/RS41?
I noticed that decoder demod/mod/rs41mod.c
doesn't print PTU in JSON in silent mode, because both getting the PTU data and printing it in non-JSON mode is handled in the same if
block.
It can be easily fixed with this patch:
diff --git a/demod/mod/rs41mod.c b/demod/mod/rs41mod.c
index 01c3d8a..f70bacb 100644
--- a/demod/mod/rs41mod.c
+++ b/demod/mod/rs41mod.c
@@ -1789,9 +1789,9 @@ static int print_position(gpx_t *gpx, int ec) {
if ( pos > frm_end ) // end of (sub)frame
{
- if (gpx->option.ptu && out && !sat && !encrypted && pck_ptu > 0) {
+ if (gpx->option.ptu && !sat && !encrypted && pck_ptu > 0) {
err0 = get_PTU(gpx, ofs_ptu, pck_ptu, !err3);
- if (!err0) prn_ptu(gpx);
+ if (!err0 && out) prn_ptu(gpx);
}
pck_ptu = 0;
I can't test other decoders at the moment to see if they are affected too, and due to different code in each decoder I can't simply grep for the relevant section. Otherwise, I'd submit a pull request.
Hi, i try today decode the Weathex radiosonde but it was not possible.
Maybe a newer version?
bandwith = 60KHz frequency 403.700
a small piece of a another sonde is through it in the beginning (404.200)
a sample off the whole launch in audio wav format:
Hello,
I was wondering if it would be possible to add XDATA decoding for DFM sondes as this functionality has recently been added to ra-firmware.
The specific commit adding support can be found here: einergehtnochrein/ra-firmware@a308ed1, einergehtnochrein/ra-firmware@383a007
Thanks
It would be useful to have also a dew point value in the output if "--ptu" option is used. I don't know if this value is directly in data from radiosonde or it could be only calculated from temperature and humidity.
(Duplicating this here from the auto_rx repo)
R-series Vaisala RS41s are being detected, but no GPS data is being extracted.
An audio sample of a sonde that has this issue is here: https://rfhead.net/sondes/brokenrs41.wav
Download and pipe into rs41dm_dft (rs41ecc in auto_rx/) using;
cat brokenrs41.wav | ./rs41ecc
Only the serial number will be shown.
I am working on a port of your M10 code for radiosonde_auto_rx and to upload to APRS we need a 9 char identifier and you seem to have some knowledge about M10s serial number (https://github.com/rs1729/RS/blob/master/m10/m10ptu.c#L687) so I wanted to have your input.
From what I understand from your code the first number you generate is the sonde type, a hardware information (803 for ptu and 705 for gtop) the second number is always 2 ? and the last seems to be the serial number of the sonde.
Do you have more knowledge of what theses numbers are ? Are you generating the same serial number as official people have ?
Thank you for your work !
./c34dft --json /dev/stdin
--json konnte nicht geoeffnet werden
Additional question: the dft_detect returns C34C50 for both sonde types. As far as I don't know what sonde type it is I have to start both sondes decoders at the same time:
DFM9) decoder="tee >($DECODERS_PATH/dfm09mod --ptu --ecc --json /dev/stdin > /dev/stderr) | "$DECODERS_PATH"/dfm09mod --ptu --ecc --json -i /dev/stdin > /dev/stderr";bw=10 ;;
C34C50) decoder="tee >($DECODERS_PATH/c34dft -d1 --ptu --json /dev/stdin > /dev/stderr) | "$DECODERS_PATH"/c50dft -d1 --ptu --json /dev/stdin > /dev/stderr";bw=19.2 ;;
the same for the DFM sonde because I don't know which one it is DFM9 or DFM6
Q1: can the dfm decoder automatically invert the input signal and then adjust returned id type accordingly?
Q2: would it be possible to distinguish between C34 and C50 by returning C34 and C50 separately from the dft_detect?
or am I missing something?
it would be nice to specify number of fft bins and averaging time. Currently it's hardcoded to be 16384 and 2 seconds
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.