forked from samyk/samytools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrtl
executable file
·61 lines (51 loc) · 1.44 KB
/
rtl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl
#
# raw: rtl_fm -f 314M -M raw -s 2000000 out.raw
#
# make listening/saving data from rtl-sdr or hackrf faster
# example: rtl 315M
# example: rtl 315M test.wav
#
# by samy kamkar
use strict;
use Getopt::Std;
# hackrf or rtl?
#my $fmcmd = system("rtl_test >>/dev/null 2>>/dev/null") ? "hackrf_fm" : "rtl_fm";
my $fmcmd = "rtl_fm";
my %o;
getopts('bls:m:', \%o);
die "usage: [-s samplerate] [-l squelch] [-m modulation] [-b (baudline)] [-L (lowpass)] <frequency (hz/mhz)> [file.wav]\n" unless @ARGV == 1 || @ARGV == 2;
$o{m} ||= 'am';
$o{l} &&= "-l $o{l}";
$o{L} &&= "lowpass -2 5000";
my ($freq, $file) = @ARGV;
if ($freq =~ /wav$/ && $freq =~ /(\d+)(M|K|G)/)
{
($freq, $file) = ($1, $freq);
print STDERR "EXTRACTED FREQUENCY `$freq` FROM FILENAME `$file`\n\n";
}
$freq *= 1_000_000 if $freq < 1000;
my $sample = $o{s} || 2_400_000;
$sample =~ s/M/000000/;
$sample =~ s/K/000/;
my $sox_opts = "-t raw -r $sample -e signed-integer -b 16 -c 1 -V1 - $file $o{L}";
my $rtl_sdr_opts = "-f $freq -s $sample -";
my $rtl_fm = "$fmcmd -M $o{m} $o{l} $rtl_sdr_opts";
if ($fmcmd =~ /^hackrf_fm/i)
{
$rtl_fm =~ s/-M\s+am/-M/;
$rtl_fm =~ s/-M\s+fm//;
}
my $sys;
if ($o{b})
{
$sys = "rtl_sdr $rtl_sdr_opts | /Applications/Audio/baudline.app/Contents/MacOS/baudline -reset -samplerate $sample -channels 2 -format u8 -quadrature -stdin";
}
else
{
$sys = $file ?
"$rtl_fm | sox $sox_opts" :
"$rtl_fm | play $sox_opts";
}
print "$sys\n";
system($sys);