GNURadio to DSD

Status
Not open for further replies.

troffasky

Member
Joined
Apr 19, 2012
Messages
27
DSD wants to read from /dev/audio, or from a file written to with DSD. Is there a method of getting a stream [presumably demodulated audio, if DSD is used to reading from a soundcard] from GNURadio into DSD, preferably in real time?
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
It's pretty close, but dsd can only read from an 'MBE' file that dsd has created, as far as I can see. I don't know what the format of the MBE files is. Had a look at the sources of dsd and mbelib but I'm no C expert and the comments are pretty sparse so I'm none the wiser.

This is just a matter of plumbing the audio output of gnuradio into dsd so it should be straightforward enough with one of the multitude of audio frameworks that Linux has so I will be pursuing that route.

I will be using that method shown in that video to play with gnuradio and multimon, so thanks for that.
 

SCPD

QRT
Joined
Feb 24, 2001
Messages
0
Location
Virginia
Go to YouTube and search for a video posted by gopher2x. He is using USRP to feed audio through a virtual audio port to Unitrunker. Should also work for DSD.
 

ki4gyw

Member
Premium Subscriber
Joined
Nov 30, 2008
Messages
2
Location
West TN
I managed to get pipe's set up from gnuradio to DSD. 48khz 16 bit mono is now passing. Haven't started testing yet to see if I can get any decodes.
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
I've got multimon listening to gnuradio by starting multimon with padsp, and then using pavucontrol to set multimon's input stream to "Monitor of Built-in Analogue Audio". dsd isn't so easily fooled, however!
 

bigbud42010

Member
Joined
Jan 28, 2010
Messages
317
Location
Springfield, Ohio
dsd compiling on linux 10.04

hey argilo im compiling i got part of it to work but im getting errors

pc@ubuntu:~$ cmake .
-- The CXX compiler identification is unknown
CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
-- Build type not specified: defaulting to release.
-- Could NOT find Boost
CMake Error at CMakeLists.txt:63 (message):
Boost required to compile gr-dsd


-- Configuring incomplete, errors occurred!
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
Great work, thanks for that. It builds and runs in a flow for me - just need to find some digital transmissions now.
 

argilo

Member
Joined
Jun 27, 2012
Messages
7
DSD's options are no longer hard-coded. Frame type (-f), modulation optimizations (-m), unvoiced speech quality (-u) and frame information verbosity (-v) can now be set in the constructor or in GRC.
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
I've found [what I assume are] DMR transmissions and had a go at decoding them. The AF output sounds like a dolphin being tortured.

Am I right in thinking that the DSD block wouldn't get as far as outputting AF if the input wasn't one of the modes it supports?
 

argilo

Member
Joined
Jun 27, 2012
Messages
7
Are you resampling the output from 8000 Hz up to 48000 Hz before sending it to your audio sink?
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
LOL at myself...the reason the audio sounded so bizarre was because I'd set the sample rate of the audio sink to 48k, when your block only outputs 8k [as it says in the README]. Fixed that and I've just heard some actual recognisable syllables with it. Time to get tweaking that antenna.
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
Somehow didn't see your reply at 1:59. Yeah it's working fine now. My audio sink accepts 8k so no need to resample.
 

argilo

Member
Joined
Jun 27, 2012
Messages
7
My post was waiting to be moderated, so it didn't appear until a couple hours later. :)

By the way, I've added an option to turn the "error bars" display on and off. (It's on by default.) I think all the important options are exposed now.

The next problem I'd like to solve is that I've got 15 of these blocks running in parallel to decode a local trunked radio system, and so I'm often hearing multiple transmissions at once. I was thinking of making a GNU Radio block that would buffer the audio when multiple channels are in use, and play back the buffered audio during the gaps when no channels are transmitting.

Also, I'm interested in decoding the control channel so I can hear only certain talkgroups (and eliminate the need to have 15 channel filters and 15 gr-dsd blocks constantly running). It would be great to have a GNU Radio block for that. Does anyone know the best open source EDACS control channel decoder is, or at least a description of how to decode it?
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
I've noticed that whether or not squelch is active doesn't seem to make any difference to CPU usage.

I think all the important options are exposed now.
Is the polarity one relevant with SDR?

I was thinking of making a GNU Radio block that would buffer the audio when multiple channels are in use, and play back the buffered audio during the gaps when no channels are transmitting.
I'd ask on the gnuradio mailing list about that, someone might have something suitable/similar.

You could probably write a flow to do it in gnuradio-companion; daisychain a bunch of "Sample and Hold"s together.
 

argilo

Member
Joined
Jun 27, 2012
Messages
7
I've noticed that whether or not squelch is active doesn't seem to make any difference to CPU usage.
I notice it on my system, but it's not a huge difference. Running 15 in parallel, I get about 280% CPU usage without squelch, and 250% with.

Is the polarity one relevant with SDR?
If your polarity is backwards for some reason, you can just use the Multiply Const block to multiply the input signal by -1.

You could probably write a flow to do it in gnuradio-companion; daisychain a bunch of "Sample and Hold"s together.
I don't think Sample and Hold will work because it doesn't do any buffering. None of the other blocks seem to do what I want either, so I'll probably have to write something.
 

troffasky

Member
Joined
Apr 19, 2012
Messages
27
OK, I see what you mean about squelch now...CPU rises to 100% over the course of about a minute, and as soon as anything actually gets demodulated it drops down to 20%. Using squelch stops the CPU slowly rising. It's like something's building up and then being released as soon as it demodulates.
 

jcims

Member
Joined
Apr 11, 2012
Messages
19
Hey there...

I don't think Sample and Hold will work because it doesn't do any buffering. None of the other blocks seem to do what I want either, so I'll probably have to write something.
Looks like you wrote something. :)

How has DSD been performing vs. the OP25 code? To date I haven't had anything do as well as the OP25 code after you patched it (I was one of the guys banging my head against the wall in op25-dev), but have been using windows lately because of UniTrunker's abilities with the control channel. Since you already did the hard work to convert DSD to a block, I'm wondering if I could port that back to Windows as a library to plug in to SDRSharp.
 
Status
Not open for further replies.
Top