Cours:Elen4 TNS TP TpsReel : Différence entre versions
(→Création d'un bloc dans ce module) |
(→Fichier passetout_impl.h) |
||
Ligne 96 : | Ligne 96 : | ||
===== Fichier <code>passetout_impl.h</code> ===== | ===== Fichier <code>passetout_impl.h</code> ===== | ||
+ | |||
+ | <source> | ||
+ | /* -*- c++ -*- */ | ||
+ | /* | ||
+ | * Copyright 2023 Bibi. | ||
+ | * | ||
+ | * SPDX-License-Identifier: GPL-3.0-or-later | ||
+ | */ | ||
+ | |||
+ | #ifndef INCLUDED_MONMODULE_PASSETOUT_IMPL_H | ||
+ | #define INCLUDED_MONMODULE_PASSETOUT_IMPL_H | ||
+ | |||
+ | #include <gnuradio/monModule/passetout.h> | ||
+ | |||
+ | namespace gr { | ||
+ | namespace monModule { | ||
+ | |||
+ | class passetout_impl : public passetout | ||
+ | { | ||
+ | private: | ||
+ | // Nothing to declare in this block. | ||
+ | |||
+ | public: | ||
+ | passetout_impl(); | ||
+ | ~passetout_impl(); | ||
+ | |||
+ | // Where all the action really happens | ||
+ | int work(int noutput_items, | ||
+ | gr_vector_const_void_star& input_items, | ||
+ | gr_vector_void_star& output_items); | ||
+ | }; | ||
+ | |||
+ | } // namespace monModule | ||
+ | } // namespace gr | ||
+ | |||
+ | #endif /* INCLUDED_MONMODULE_PASSETOUT_IMPL_H */ | ||
+ | </source> | ||
===== Fichier <code>passetout_impl.cpp</code> ===== | ===== Fichier <code>passetout_impl.cpp</code> ===== |
Version du 24 mars 2023 à 11:25
TP6 : Temps réel : Codage d'un bloc en C++ / démodulation et PID numérique
Le but de ce TP est ...
Sommaire
Codage de bloc Gnuradio en c++
Première partie - guide de création d'un bloc en C++
Ce guide est inspirée du guide Creating an OOT (C++ block example) en l'adaptant pour nos besoins :
Nous allons créer un simple bloc qui recopie son entrée (en float
) sur sa sortie. Donc le filtre caractérisé par y(n) = x(n) ou encore H(z)=1. Il s'agit donc d'une sorte de filtre passe-tout.
Suivez bien toutes les étapes, sans aller trop rapidement
Création d'un module externe
Dans les lignes qui suivent, le $
indique que l'on saisi une commande dans un terminal. Le $
n'est pas à saisir.
- Ouvrez un terminal et placez-vous à la racine de votre dossier personnel :
$ cd $HOME
- Créez un dossier de travail dédié à gnuradio et déplacez-vous à l'intérieur :
$ mkdir gnuradio
$ cd gnuradio
- GNU Radio est livré avec gr_modtool, un utilitaire qui permet de créer des modules externes (OOT). Créons un module
monModule
$ gr_modtool newmod monModule
- Le dossier
gr-monModule
est créé et contient tout le code squelette d'un module OOT, mais il n'a pas encore de blocs. Déplacez-vous dansgr-monModule
:
$ cd gr-monModule
- Vous pouvez afficher le contenu de ce dossier par
$ ls
Création d'un bloc dans ce module
- Ajoutez un nouveau bloc nommé
passetout
:
$ gr_modtool add passetout
- Quelques questions permettent alors de spécifier le type de bloc
GNU Radio module name identified: passetout
('sink', 'source', 'sync', 'decimator', 'interpolator', 'general', 'tagged_stream', 'hier', 'noblock')
Saisissez sync
comme type de bloc, car le bloc que nous écrivons produira le même nombre d'échantillons en sortie que le nombre d'échantillons consommés depuis l'entrée.
Enter block type: sync
- Spécifiez
cpp
comme langage :
Language (python/cpp): cpp
Language: C++
Block/code identifier: passetout
- Spécifiez un nom pour le copyright :
Please specify the copyright holder: Bibi
- Il est possible de spécifier des paramètres d'entrée qui peuvent permettre de régler le fonctionnement du bloc. Ce ne sera pas notre cas, ne rien saisir sur cette question :
Enter valid argument list, including default arguments:
- De même, on ne donnera pas de code permettant de tester le bon fonctionnement :
Add Python QA code? [Y/n] n
Add C++ QA code? [Y/n] n
- Plusieurs fichers sont alors crées :
Adding file 'lib/passetout_impl.h'...
Adding file 'lib/passetout_impl.cc'...
Adding file 'include/gnuradio/monModule/passetout.h'...
Adding file 'python/monModule/bindings/docstrings/passetout_pydoc_template.h'...
Adding file 'python/monModule/bindings/passetout_python.cc'...
Adding file 'grc/monModule_passetout.block.yml'...
Editing grc/CMakeLists.txt...
Quelques indications :
- le fichier
passetout_impl.h
contient l'entête de la classe de notre bloc - le fichier
passetout_impl.cpp
contient l'implémentation de la classe de notre bloc - le fichier
monModule_passetout.block.yml
va contenir des informations faisant le lien entre notre code c++ et le code python utilisé en interne par Gnuradio - Le tout sera compilé par un
Makefile
généré parcmake
.
Fichier passetout_impl.h
/* -*- c++ -*- */
/*
* Copyright 2023 Bibi.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef INCLUDED_MONMODULE_PASSETOUT_IMPL_H
#define INCLUDED_MONMODULE_PASSETOUT_IMPL_H
#include <gnuradio/monModule/passetout.h>
namespace gr {
namespace monModule {
class passetout_impl : public passetout
{
private:
// Nothing to declare in this block.
public:
passetout_impl();
~passetout_impl();
// Where all the action really happens
int work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items);
};
} // namespace monModule
} // namespace gr
#endif /* INCLUDED_MONMODULE_PASSETOUT_IMPL_H */