enregistrement de chanN.pcm

14 views
Skip to first unread message

XIE Enming

unread,
Aug 26, 2012, 10:12:19 AM8/26/12
to concours-li...@googlegroups.com
Bonjour à tous
           J'ai pu d'enregistrer le fichier  .cfg comme ci-dessous:

# Version du format de fichier
version=1.0
# date au format ISO 8601
date="2012-08-25T18:37:29Z"

sample {
    # Nombre d'echantillons.
    count=3000 (12 periodes * 250 points / periode)
    # duree de l'ensemble des echantillons. Ici 150ms pour les 3000
    # echantillons. A partir de cette valeur et du nombre
    # d'echantillons on en deduit la periode d'echantillonnage.
    duration=0.15
}

# Les voies sont sauvegardees dans l'ordre 1 vers 4 (ou plus)
# Voie 1
channel {
    name="Signal triangulaire"
    # type de couplage AC ou DC
    coupling=DC
    file {
        # nom du fichier binaire associe a cette voie
        filename="chan1.pcm"

        # format des donnees dans le fichier :
        #  16_LE : 16 bits little endian
        #  16_BE : 16 bits big endian
        #  32_LE : 32 bits little endian
        #  32_BE : 32 bits big endian
        format=16_LE

        # valeur min/max en Volt d'un echantillon
        min_voltage=-3.5
        max_voltage=3.5
        mean_voltage=3.4e-17
    }
}

# Voie 2
channel {
    name="Signal sinusoidale"
    coupling=DC
    file {
        filename="chan2.pcm"
        format=16_LE
        min_voltage=-2.6
        max_voltage=2.6
        mean_voltage=-2.8e-08
    }
}

# Voie 3
channel {
    name="Signal rectangulaire"
    coupling=DC
    file {
        filename="chan3.pcm"
        format=16_LE
        min_voltage=-4.2
        max_voltage=4.2
        mean_voltage=0
    }
}

# Voie 4
channel {
    name="Signal denture (dent de scie)"
    coupling=DC
    file {
        filename="chan4.pcm"
        format=16_LE
        min_voltage=-0.8
        max_voltage=0.8
        mean_voltage=-2.4e-16
    }
}

Pour l'enregistrement des quatres fichiers : chan1.pcm  chan2.pcm  chan3.pcm  chan4.pcm, mes données maintenant sont de format  double (qreal)  e.g.   3.3,  -2.5, etc, et le nombre d'échantillonnage sont différent chaque fois par des réglages de temps.
Dans Qt, pour écrire un fichier de type binary, on peut utiliser la façon suivante:
QFile file("chan1.pcm");
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
QDataStream out(&file);   // we will serialize the data into the file
out << (les données à écrire);

Il faut enregistrer les données en format int ou juste laisse le format double ?

Pour l'ordre des données, mettre un après un  ou  il faut écrire le .pcm sous le format ci-dessous ?

0000000 0000 02ba 056e 0814 0aa5 0d1b 0f70 119d
0000010 139d 156b 1702 185e 197c 1a58 1af2 1b46
0000020 1b55 1b1d 1aa0 19e0 18dd 179a 161b 1463
0000030 1278 105d 0e18 0baf 0928 068a 03db 0123
0000040 fe68 fbb0 f904 f669 f3e7 f184 ef45 ed32
0000050 eb4f e9a1 e82b e6f3 e5fb e546 e4d5 e4a9
0000060 e4c3 e523 e5c8 e6b0 e7d8 e93f eadf ecb6
0000070 eebe f0f2 f34c f5c7 f85d fb05 fdbb 0075
0000080 032f 05e1 0884 0b11 0d82 0fd1 11f6 13ee
0000090 15b3 1741 1892 19a5 1a77 1b05 1b4d 1b50
00000a0 1b0d 1a85 19b9 18ab 175e 15d5 1414 1220

merci beaucoup.



XIE Enming

unread,
Aug 26, 2012, 10:42:49 AM8/26/12
to concours-li...@googlegroups.com
Juste pour tester, j'écrire le code suivant :

// chan1.pcm  (signal triangulaire)
    QString nameChan1("chan1.pcm");
    QFile fChan1(savePath + nameChan1);
    fChan1.open(QFile::WriteOnly | QFile::Truncate);
    QDataStream dsChan1(&fChan1);
    for (int i1=0; i1<point_trig.count(); i1++)
    {
        dsChan1 << (qint32)point_trig[i1].y();
    }
    fChan1.close();

    // chan2.pcm  (signal sinusoïdale)
    QString nameChan2("chan2.pcm");
    QFile fChan2(savePath + nameChan2);
    fChan2.open(QFile::WriteOnly | QFile::Truncate);
    QDataStream dsChan2(&fChan2);
    for (int i2=0; i2<point_sina.count(); i2++)
    {
        dsChan2 << (qint32)point_sina[i2].y();
    }
    fChan2.close();

    // chan3.pcm  (signal rectangulaire)
    QString nameChan3("chan3.pcm");
    QFile fChan3(savePath + nameChan3);
    fChan3.open(QFile::WriteOnly | QFile::Truncate);
    QDataStream dsChan3(&fChan3);
    for (int i3=0; i3<point_rect.count(); i3++)
    {
        dsChan3 << (qint32)point_rect[i3].y();
    }
    fChan3.close();

    // chan4.pcm  (signal denture (dent de scie))
    QString nameChan4("chan4.pcm");
    QFile fChan4(savePath + nameChan4);
    fChan4.open(QFile::WriteOnly | QFile::Truncate);
    QDataStream dsChan4(&fChan4);
    for (int i4=0; i4<point_sawt.count(); i4++)
    {
        dsChan4 << (qint32)point_sawt[i4].y();
    }
    fChan4.close();

Et si je maintenant ouvrir le fichier  chan1.pcm, le contenu est comme ça:

^@^@^@|^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@s^@^@^@s^@^@^@s^@^@^@s^@^@^@s^@^@^@s^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@r^@^@^@s^@^@^@s^@^@^@s^@^@^@s^@^@^@s^@^@^@s^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@}^@^@^@}^@^@^@}^@^@^@}^@^@^@}^@^@^@}^@^@^@~^@^@^@~^@^@^@~^@^@^@~^@^@^@~^@^@^@~^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@?^@^@^@?^@^@^@?^@^@^@? ^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?^@^@^@?                                          ^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@^?^@^@^@~^@^@^@~^@^@^@~^@^@^@~^@^@^@~^@^@^@~^@^@^@}^@^@^@}^@^@^@}^@^@^@}^@^@^@}^@^@^@}^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@|^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@{^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@z^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@y^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@x^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@w^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@v^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@u^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@t^@^@^@s^@^@^@s^


Est-ce que ça c'est bon, suffisant pour l'enregistrement de  .pcm ?

AleaJactaEst

unread,
Aug 26, 2012, 5:38:53 PM8/26/12
to concours-li...@googlegroups.com
Bonjour,

De ce que j'ai compris, il s'agit des données brutes, donc au format "int" (16 bit ou 32 bit).

De plus, les données en entrée (de la mini2440) sont en 16bit. (plage : 0.0V - 3.3V)    0 => 0.0V,  1023 => 3.3V

@+
AleaJactaEst

XIE Enming

unread,
Aug 27, 2012, 3:23:55 AM8/27/12
to concours-li...@googlegroups.com
Merci.
        Pour l'instant, je configure la plage (-5.0V ~ 5.0V), c'est bon ou je dois changer les valeurs toutes à positives (0V ~ 5.0V) ?
        0 correspond 0.0V,  1023 correspond 3.3V , pourquoi ? C'est à nous de définir la correspondance ?
        Merci beaucoup!

XIE Enming

unread,
Aug 27, 2012, 3:40:19 AM8/27/12
to concours-li...@googlegroups.com
Vous avez raison. J'ai vu dans le code C:
unsigned int  bits_per_sample; /**< size in bit of a converted voltage
                                      (10 bits for the mini2440) */
Je dois configure la plage (0.0V ~ 3.3V), 0 => 0.0V,  1023 => 3.3V

Merci beaucoup!

Le dimanche 26 août 2012 23:38:53 UTC+2, AleaJactaEst a écrit :

XIE Enming

unread,
Aug 27, 2012, 4:23:38 AM8/27/12
to concours-li...@googlegroups.com
J'ai un soucis, je éxcute le  xoscope , j'ai vu que le max et min peut avoir la valeur négative, par exemple, dans le premier screenshot joint, le max est 11, le min est -7, la unité est voltage, oui?
Mes courbes sont un peu standard, comme le deuxième screenshot joint, est-ce que je peux configurer la plage (-3.3 ~ 3.3) ou (-5.0 ~ 5.0), mais la correspondance est toujours 0 ~ 1023 ?
Merci.


Le dimanche 26 août 2012 23:38:53 UTC+2, AleaJactaEst a écrit :
Screenshot.png
20120827-1.png

AleaJactaEst

unread,
Aug 28, 2012, 4:03:55 PM8/28/12
to concours-li...@googlegroups.com
Bonjour,

Je ne connais pas xoscope, mais dans l'absolue une tension peut être positive ou négative.
Tout dépend du signal en entrée et de la référence de la masse (0)

Dans le deuxième points, effectivement nous pouvons avoir un signal négatif (via le mode AC par exemple) et il gardera toujours la même plage.
 plage DC : 0.0V, 3.3V  => plage AC : -1.5V, 1.5V
soit -1.5V => 0 et +1.5V => 1023

On est libre concernant le positionnement de l'affichage (sachant que tu as la possibilité d'ajouter un offset qui décalera le zéro)
De plus avec la configuration du Voltage/Division tu changera l'échelle.


@+
AleaJactaEst

Reply all
Reply to author
Forward
0 new messages