I use an USRP on GNU Radio for AM and FM reception.
I can display the signal after demodulation thanks to QT GUI Time sink, therefore I can view the signal and know its frequency.
But I would like to measure automatically the frequency after demodulation. I want GNU Radio to give me the value of frequency signal. Is there a possibility to do that on GNU Radio?
Yes, it's possible.
You need to use one of the existing frequency detectors – there's a PLL one right there in the library! Other than that, many method of frequency detection are possible to do – and all of them can be implemented in GNU Radio, to varying degrees of ease :)
Related
I am using the command line tool aubiopitch to analyze voice recordings. My goal is to determine the fundamental frequency of the voice recorded. I know, of course, that the frequency varies – that's why I want to calculate an "average" in Hz over a 30-second recording.
My question: aubio uses different methods to determine the pitch of a recording: Schmitt trigger, harmonic comb, yin, yinfft etc. Which one of those would be my preferred choice when dealing with pure human voice recordings (no background music, atmo etc.).
I would recommend using yinfast or yinfft (default). For a discussion of the algorithms, their parameters, and their performance, see Chapter 3 of this document.
Note that the median is better suited than the average in this case.
CREPE is good and outperforms many others since it uses advanced neural-network machine learning for pitch prediction. It might be unstable in unseen conditions though and might not be very easy to plug since it requires tensorflow.
For more traditional and lightweight solution oyu can try REAPER.
I am fairly new to GNU Radio and the SDR world. I am currently trying to reverse engineer a signal from my Logitech wireless keyboard. Besides the knowledge I gained from my electrical engineering education, I have used various guides to assist me with this project ([1],[2],[3]).
I have been able to record a sample of the keyboard and am able to play it back so that the computer with the receiver thinks it is seeing a keyboard, so I know I have a signal at least. Demodulating the signal is where I am having problems. I know from FCC ID research and the radio chip it uses that the modulation is GFSK, but when I try to do any sort of demodulation in GNU Radio, I am unable to find any usable data.
I have been poking around at this problem for a few months now, and haven't been able to solve it. Any assistance would be greatly appreciated.
[1] Radio to Data: http://www.inguardians.com/pubs/GRC_signal_analysis_InGuardians_v1.pdf
[2] keysweeper: http://samy.pl/keysweeper/
[3] Keyfob hack: http://blog.kismetwireless.net/2013/08/playing-with-hackrf-keyfobs.html
I don't know if this really is a good answer from a StackOverflow Perspective, but I'll try nevertheless:
Whilst GNU Radio has a demod for GFSK signals, it's hard to guess GFSK parameters. You might be a little better off sufficiently oversampling your signal, and having a look at a waterfall visualization of it. Can you see the different FSK subcarriers?
Assuming you do, simply appropriately filter that signal into the FSK subcarriers, and compare their energy.
I an working on a student project. We have a radar that gives an audio detection using headphones to indicate the type of target. Target types are (eg car/truck/man). Radar distinguishes between these targets based on doppler variation, down converts this into audible range and operator can hear it through headphone. System has provided sample audio files corresponding to each type of target(man/car/truck) to train the operator to know as to what he is hearing when live signal is fed and accordingly decide what target it is.
I intend that a software can do the job of this operator.
I want to compare live audio signal input from Radar with 7 different test audio files and want the software to tell me which file matches the input.
kindly educate me .... can these audio fingerprinting softwares do my job.
What you're trying to be done can be implemented in GNU Radio, in a lot of ways.
You could, for example, take the audio signal as input to an audio source, connect that to a set of xlating FIR filters, which you'd design using the gr_filter_design tool; you then would estimate the (potentially decimated) signal in these bands by converting the complex samples to their power (complex to Mag^2) and would then further low-pass and decimate, to then select the band with the highest energy. All this can be done in a nice graphical way in the GNU Radio Companion (gnuradio-companion), which will then generate Python code, which is used to set up the signal flow graph based on the C++ GNU Radio framework.
I recommend you read the Guided Tutorials and see where you get from there.
I am developing a software which can auto record and extract every words in my voice. I used portaudio library to solve it. But I am stuck on detecting the sound: I set the silence's value is zero so if there is a sample which is zero, it must be a start or end point of a sound. But when I ran it, the program created many words. I think because the value I read by portaudio is raw data, so it can't be processed like that. Am I right? How can I fix it? By the way, I am coding in C++ :D
To detect the presence of a signal in a PCM stream you be able to detect it. As dprogramz put said, the noise floor of your soundcard is probably not perfect and so there will be some noise signal recorded (even with no mic connected).
The solution is to use a VOX or VAD algorithm to detect the presence of your voice. VOX can be tricky, since in most consumer grade electronics the noise floor is just low enough to be "silence" to the human ear, relative to the signal. This means that the difference on amplitude between the noise floor and signal may be slight. If your sound card has AGC turned on this can make it even more difficult, since the noise floor may move. Having said that, VOX can be implemented successfully on consumer grade equipment. It just takes more effort to establish the threshold. When done best the threshold is calculated periodically while the stream is active.
If I were doing this I'd implement a VAD algorithm. Since your objective is to detect your voice this should provide a reliable result regardless of the equipment you use.
I don't think it's because it is a RAW value. RAW sound files are a bitstream of frequency and volume information.
However, the value will rarely (if ever) be zero. You have to take into account there is a small amount of electrical noise that is made by the mic. Figure out the "idle" dB of your mic (just test the level when you aren't talking into it). You Then need to set a silence threshold (below a certain dB level for a certain number of samples) to detect the beginning/end. Attempting to detect a zero value is gonna be near impossible.
I am using .NET 3.5.
I need to Capture Sound from Mic/Headphone and trigger action at particular (not exact) frequency (Need to perform some action when player hits ball with stick while playing golf).
So,
1. How to capture sound from Mic/Headphone using .NET 3.5?
2. Trigger action at particular (not exact) frequency?
Any ideas?
For (2) I suggest the Goertzel algorithm, which is very simple to implement and will allow you to detect energy in a narrow range of frequencies.