aboutsummaryrefslogtreecommitdiff
path: root/octave/hackrf_uc.m
blob: 0f55bd1b8d75e1efd81120d7df89756f581c0a13 (plain)
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
% hackrf_uc.m
%
% David Rowe Nov 2015
%
% Upconverts a real baseband sample file to a file suitable for input into a HackRF
%
% To play file at 10.7MHz used:
%   octave:25> hackrf_uc("fsk_10M.iq","fsk_horus_rx_1200_96k.raw")
%   $ hackrf_transfer -t ../octave/fsk_10M.iq -f 10000000 -a 1 -x 40

function hackrf_uc(outfilename, infilename)
  pkg load signal;
  Fs1 = 48E3;  % input sample rate
  Fs2 = 10E6;  % output sample rate to HackRF
  fc = 700E3-24E3;  % offset to shift to, HackRF doesn't like signals in the centre
  A  = 100;    % amplitude of signal after upc-nversion (max 127)
  N  = Fs1*20;
  
  fin = fopen(infilename,"rb");
  printf("1\n");
  s1 = fread(fin,"short");
  printf("1\n");
  fclose(fin);
  printf("1\n");
  ls1 = length(s1);
  printf("1\n");
  N = ls1;
  % single sided freq shifts, we don't want DSB
  printf("1\n");
  s1 = hilbert(s1(1:N)); 

  % upsample to Fs2

  M = Fs2/Fs1;
  s2 = resample(s1(1:N),Fs2,Fs1);
  ls2 = length(s2);
  mx = max(abs(s2));
  t = 0:ls2-1;
  printf("2\n");
  % shift up to Fc, note use of rot90 rather than trasnpose operator '
  % as we don't want complex conj, that would shift down in freq

  sout = rot90((A/mx)*s2) .* exp(j*2*pi*t*fc/Fs2);

  save_hackrf(outfilename,sout);
  
end