Подключение HackRF One

ЦОС, обработка видео и изображений в MATLAB\Simulink

Модератор: Admin

noises50
Пользователь
Сообщения: 5
Зарегистрирован: Вс мар 18, 2018 7:28 pm

Подключение HackRF One

Сообщение noises50 » Вс мар 18, 2018 7:47 pm

Здравствуйте товарищи! Кто-нибудь сталкивался с такой задачей, как подключение SDR приемника HackRF One к Matlab?
Нашел тут https://github.com/mossmann/hackrf/wiki/HackRF-One информацию и тут
https://www.mathworks.com/matlabcentral/fileexchange/55537-hackrf-toolbox-with-spectrum-analyzer и вот тут https://github.com/kit-cel/simulink-hackrf и видео https://youtu.be/7dtikuo3BSw :!:
Там описано как подключить написанную модель к Симулинк через кучу настроек и манипуляций. В итоге у меня нк получилось :oops: даже сказать частично получилось. Почему-то не компилируются .с файлы командой mex - hackrd.c и так далее.
В итоге, а можно ли просто подключить HackRF One напрямую к Matlab не через Симулинк?

Grizzly
Пользователь
Сообщения: 808
Зарегистрирован: Сб май 28, 2011 2:00 am

Re: Подключение HackRF One

Сообщение Grizzly » Ср мар 21, 2018 4:35 pm

Какие ошибки при попытке компиляции? Сам компилятор установлен в системе?

noises50
Пользователь
Сообщения: 5
Зарегистрирован: Вс мар 18, 2018 7:28 pm

Re: Подключение HackRF One

Сообщение noises50 » Вс мар 25, 2018 1:50 pm

Компилятор установлен.

Код: Выделить всё

mex -setup
MEX configured to use 'MinGW64 Compiler (C)' for C language compilation.
Warning: The MATLAB C and Fortran API has changed to support MATLAB
    variables with more than 2^32-1 elements. In the near future
    you will be required to update your code to utilize the
    new API. You can find more information about this at:
    http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

To choose a different language, select one from the following:
 mex -setup C++
 mex -setup FORTRAN
MEX configured to use 'MinGW64 Compiler (C++)' for C++ language compilation.
Warning: The MATLAB C and Fortran API has changed to support MATLAB
    variables with more than 2^32-1 elements. In the near future
    you will be required to update your code to utilize the
    new API. You can find more information about this at:
    http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.

noises50
Пользователь
Сообщения: 5
Зарегистрирован: Вс мар 18, 2018 7:28 pm

Re: Подключение HackRF One

Сообщение noises50 » Вс мар 25, 2018 1:53 pm

Это то,что хочу выполнить:
Код

Код: Выделить всё

function make(varargin)
% make script for Simulink-HackRF
%   use "make -v" to get a verbose output

BIN_DIR = fullfile(pwd, 'build');
VERSION = '1.0.0';

%% Configuration
if ispc
    % this should point to the directory of hackrf.h
    HACKRF_INC_DIR = fullfile(pwd, 'deps', 'include', 'libhackrf');
    % this should point to the directory of libhackrf.a
    HACKRF_LIB_DIR = fullfile(pwd, 'deps', 'bin');
       
    options = { ...
        ['-I' pwd]; ['-I' HACKRF_INC_DIR]; ...
        ['-L' HACKRF_LIB_DIR]; '-lhackrf' ...
    };

elseif isunix
    % this should point to the directory of hackrf.h
    HACKRF_INC_DIR = '/usr/include/libhackrf';
   
    options = { ...
        ['-I' HACKRF_INC_DIR]; ['-l' 'hackrf'] ...
    };

else
    error('Platform not supported');
end

%% Prep
if (~exist(BIN_DIR, 'dir')); mkdir(BIN_DIR); end

% create bin order if not exist
options = [options; varargin'; { ...
    '-largeArrayDims'; ...
    ['-DSIMULINK_HACKRF_VERSION=' VERSION]; ...
    '-outdir'; BIN_DIR; ...
}];

%% Compile
if isunix && ~any(ismember(varargin, '-v'))
    warning('off', 'MATLAB:mex:GccVersion_link');
end

fprintf('\nBuilding target ''%s'':\n', 'hackrf_find_devices.c');
mex(options{:}, 'src/hackrf_find_devices.c')

fprintf('\nBuilding target ''%s'':\n', 'hackrf_source.c');
mex(options{:}, 'src/hackrf_source.c', 'src/common.c')

fprintf('\nBuilding target ''%s'':\n', 'hackrf_sink.c');
mex(options{:}, 'src/hackrf_sink.c', 'src/common.c')

warning('on', 'MATLAB:mex:GccVersion_link');

%% Post
copyfile('src/hackrf_find_devices.m', BIN_DIR)
copyfile('blockset/hackrf_library.slx', BIN_DIR)
copyfile('blockset/slblocks.m', BIN_DIR)

fprintf('\n--> Add "%s" to your MATLAB Path.\n', BIN_DIR);


А вот это то, что получается :cry:

Код: Выделить всё

>> make

Building target 'hackrf_find_devices.c':
Error using mex
MEX cannot find library 'hackrf' specified with the -l option.
 MEX looks for a file with one of the names:
 libhackrf.lib
 hackrf.lib
 Please specify the path to this library with the -L option.


Error in make (line 66)
mex(options{:}, 'src/hackrf_find_devices.c')

Назначение папок указано верно, что не так?

Grizzly
Пользователь
Сообщения: 808
Зарегистрирован: Сб май 28, 2011 2:00 am

Re: Подключение HackRF One

Сообщение Grizzly » Сб мар 31, 2018 8:23 pm

Я бы на вашем месте разобрался с путями к библиотекам, добавив print рядом с HACKRF_LIB_DIR = fullfile(pwd, 'deps', 'bin').
Проверьте, действительно ли по полученному пути расположена библиотека.
Вижу, что для Win платформы в сети часто упоминают про libhackrf.dll, а вам нужна статически собранная MinGW библиотека с расширением .a. Проверьте, что именно такая библиотека лежит в нужном каталоге.

P.S. Можете на GitHub создать Issue. Если проект жив, то довольно оперативно ответят.

noises50
Пользователь
Сообщения: 5
Зарегистрирован: Вс мар 18, 2018 7:28 pm

Re: Подключение HackRF One

Сообщение noises50 » Сб мар 31, 2018 8:26 pm

MinGW почему то не собирает файлы.

noises50
Пользователь
Сообщения: 5
Зарегистрирован: Вс мар 18, 2018 7:28 pm

Re: Подключение HackRF One

Сообщение noises50 » Сб мар 31, 2018 8:29 pm

Делал все по инструкции, сам физики процесса компиляции mex файлов непонимаю. Тк нет опыта в этом

Grizzly
Пользователь
Сообщения: 808
Зарегистрирован: Сб май 28, 2011 2:00 am

Re: Подключение HackRF One

Сообщение Grizzly » Сб мар 31, 2018 8:33 pm

noises50 писал(а):MinGW почему то не собирает файлы.

Я бы на вашем месте использовал Linux. Хотя бы в виртуалке. Там должно GCC всё собраться без проблем. Посмотрел пакетный менеджер, в репозитории моего дистрибутива есть net-libs/libhackrf, поэтому либа стопроцентно окажется в нужном месте. Мне говорили, что настроить MinGW является еще той задачей.