Forum: HF, Funk und Felder RF Modul Packet Error Test, Packet Error Rate(PER) mit Hilfe von Signalgenerator bestimmen


von Andi M. (Gast)


Lesenswert?

Hallo Leute,
ich brauche dringend eure Hilfe! Und zwar muss ich für mein Praktikum 
die PER eines RF-SoC mit Hilfe von dem Signal Generator Rohde&Schwarz 
SMIQ bestimmen.

Den Aufbau habe ich mir folgendermaßen gedacht.
Ich generiere in LabView eine zu IEEE 802.15.4 kompatible Datenliste 
schicke sie zum Signal Generator über GPIB und der soll diese dann auf 
2,45Ghz mit OQPSK modulieren. Das RF Modul empfängt das Signal und 
demoduliert es, falls es richtig angekommen ist. Das wird wiederum über 
SPI ausgelesen.

Was haltet Ihr soweit von der Idee??

Also zunächst habe ich einen fertiges Packet Sniffer, welcher über das 
Debug Interface, alle RX Signale auf IEEE 802.15.4 des RF moduls 
empfängt. Also deswegen kann ich hierbei Fehler ausschließen.

Nun zu meinen Problemen:
Ich weiß nicht genau, wie ich den Signal Generator richtig konfiguriere.
Ich habe ihn im Moment auf
Modulation GMSK
Symbol rate 2 Msym/s
Filter Gauss/2.0
Source: Datalist
Clock: Coupled/Symbol

Muss ich noch einen Trigger einstellen? oder ein Coding?
Kennst sich von euch jemand mit der Thematik aus? Im Praktikum kann mir 
dazu leider keiner weiterhelfen.

Vielen Dank!!
Viele Grüße

Andi M.

von Andi M. (vivaultra)


Lesenswert?

sorry war gerade nicht angemeldet:
Also eine weitere Sache ist das erstellen der Datenliste. Vorallem die 
Softwareimplementierung der FCS/Frame Check Sequence, welche 
"normalerweiße" immer via Hardwarechip erstellt wird.
Hat das schoneinmal jemand gemacht? Hat jemand ein Beispiel? Gerne auch 
eine andere Programmiersprache!

Danke

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andi M. schrieb:
> Vorallem die
> Softwareimplementierung der FCS/Frame Check Sequence, welche
> "normalerweiße" immer via Hardwarechip erstellt wird.

Dafür gibt's doch ein Beispiel im IEEE-802.15.4-Standard.

Hier ein Progrämmchen, das ich vor Jahren mal zusammengehackt habe:
1
/*
2
 * ----------------------------------------------------------------------------
3
 * "THE BEER-WARE LICENSE" (Revision 42):
4
 * Joerg Wunsch wrote this file.  As long as you retain this notice you
5
 * can do whatever you want with this stuff. If we meet some day, and you think
6
 * this stuff is worth it, you can buy me a beer in return.        Joerg Wunsch
7
 * ----------------------------------------------------------------------------
8
 */
9
#include <stdint.h>
10
#include <stdio.h>
11
#include <stdlib.h>
12
#include <unistd.h>
13
14
static uint16_t crc_ccitt_update (uint16_t crc, uint8_t data)
15
{
16
    data ^= crc & 0xff;
17
    data ^= data << 4;
18
19
    return ((((uint16_t)data << 8) | ((crc & 0xff00) >> 8))
20
            ^ (uint8_t)(data >> 4)
21
            ^ ((uint16_t)data << 3));
22
}
23
24
static void
25
usage(void)
26
{
27
    fprintf(stderr, "usage: gencrc [-b base] number...\n");
28
    exit(64);
29
}
30
31
int
32
main(int argc, char **argv)
33
{
34
    long i;
35
    int c, base;
36
    uint16_t crc = 0;
37
    uint8_t byte;
38
39
    base = 0;
40
    while ((c = getopt(argc, argv, "b:")) != -1)
41
        switch (c)
42
        {
43
        case 'b':
44
            base = strtol(optarg, 0, 0);
45
            break;
46
47
        default:
48
            usage();
49
        }
50
    argc -= optind;
51
    argv += optind;
52
53
    while (argc-- > 0) {
54
        i = strtol(argv[0], 0, base);
55
        byte = (uint8_t)i;
56
        crc = crc_ccitt_update(crc, byte);
57
        argv++;
58
    }
59
    printf("CRC = 0x%04x\n", crc);
60
    return 0;
61
}

von Andi M. (vivaultra)


Lesenswert?

vielen Dank fuer die Antwort! Werde es die Tage testen. Hab im Moment 
was anderes zu tun bekommen, aber sobald das fertig ist, werde ich mal 
testen.

Danke! :)

von Andi M. (vivaultra)


Lesenswert?

Ahh jetzt bin ich unerwartet schnell fertig geworden, sodass ich mich 
jetzt doch schon wieder daran machen werde. In den 15 Minuten, wo der 
alte Beitrag editiert werden kann, hab ichs leider nicht mehr geschafft 
;)

Also mein erstes Hindernis ist erstmal eine Datenliste auf dem 
Signalgenerator zu erstellen und rueberzuschicken, sodass diese von dem 
SoC RF-Modul erkannt wird.

Ich habe ein Programm runtergeladen, in welchem ein/1 MAC/PHY Beispiel 
command frame angezeigt wird:
0x 00 00 00 00 A7    0A     03 00 10    01 01 42 0C 39       B3 69
        SHR          PHR      MHR        MAC Payload          FCS


Also theorethisch sollte das frame stimmen.
Nun muss man ja diese Symbole(4Bit) zu einer 32bit chip folge nach 
folgender Tabelle konvertieren: Quelle: Agilent.com

http://edocs.soco.agilent.com/download/attachments/100337712/ZigBee_Introduction-4.gif?version=1&modificationDate=1260242976000

und danach dann modulieren oder?

Danke!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andi M. schrieb:

> Ich habe ein Programm runtergeladen, in welchem ein/1 MAC/PHY Beispiel
> command frame angezeigt wird:
> 0x 00 00 00 00 A7    0A     03 00 10    01 01 42 0C 39       B3 69
>         SHR          PHR      MHR        MAC Payload          FCS
>
>
> Also theorethisch sollte das frame stimmen.

Ja:
1
./gencrc -b16  03 00 10 01 01 42 0C 39 B3 69
2
CRC = 0x0000
(Präambel, SFD und PHR zählen nicht mit in die CRC-Generierung.)

Wobei 03 00 10 kein sinnvoller MHR ist; das wäre ein MAC command,
aber ohne jegliche Adressierungsfelder.

> Nun muss man ja diese Symbole(4Bit) zu einer 32bit chip folge nach
> folgender Tabelle konvertieren:

Davon habe ich leider keine Ahnung, mit einem Signalgenerator musste
ich sowas bislang noch nicht selbst tun.

von Andi M. (vivaultra)


Angehängte Dateien:

Lesenswert?

Ahhhh merci!!!
Klappt aber leider immer noch nicht. Ich habe gerade mal mit einem 
zweitem Modul etwas rübergesendet und mit dem Packet Sniffer 
aufgefangen. Ich habe das Bild angehängt.

Kann man aus den Daten dort das komplette gesendete Frame 
rekonstruieren?
Auch wenn ich c++ (noch) nicht kann, müsste man dein programm ja so 
verändern können, dass die FCS direkt ausgegeben wird und nicht nur das 
ganze auf richtigkeit überprüft wird, oder?

Im IEEE Datenblatt gibts dazu in 7.2.1.8 FCS field den entsprechenden 
Algorithmus, den ich aber nicht so ganz verstehe...

Hab dazu leider überhaupt nichts im Internet gefunden und wüsste auch 
sonst nicht, an wen ich mich damit wenden kann.
Vielen Dank für dein Unterstützung!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Andi M. schrieb:

> Kann man aus den Daten dort das komplette gesendete Frame
> rekonstruieren?

Der Frame steht doch direkt drunter, wobei die CRC nicht mit dabei
steht.  Den kann der hier vermutlich benutzte CC2420 nämlich nicht
mit liefern, wenn er ihn zugleich überprüfen soll: stattdessen
liefert er dann ein "CRC OK"-Flag und den LQI-Wert.

Allerdings ist der Frame auch wieder Nonsense.  Das sieht man
beginnend am frame type 4 ("R100"), der ein "reserved frame type"
im Standard ist.  Weiterhin wird behauptet, dass er verschlüsselt
sei, was deinen Sniffer dann dazu bewegt, alle möglichen Annahmen
über den benutzten Schlüssel zu implizieren und diese in die
dekodierte Ausgabe einzubauen.  Dadurch enthält die dekodierte
Ausgabe deutlich mehr Informationen als die 3 abschließenden Bytes
MAC Payload, die da eigentlich drin sind. ;-)

> Auch wenn ich c++ (noch) nicht kann, müsste man dein programm ja so
> verändern können, dass die FCS direkt ausgegeben wird und nicht nur das
> ganze auf richtigkeit überprüft wird, oder?

Das macht es schon jetzt. ;-)
1
./gencrc -b16 03 00 10 01 01 42 0C 39 
2
CRC = 0x69b3

Wenn du die CRC weglässt, wird sie berechnet; gibst du sie mit an, so
muss das Ergebnis 0 sein.  Das ist genau die Funktionsweise einer CRC
...

> Im IEEE Datenblatt gibts dazu in 7.2.1.8 FCS field den entsprechenden
> Algorithmus, den ich aber nicht so ganz verstehe...

Den muss man auch nicht verstehen, um ihn benutzen zu können.  Es
genügt völlig, dass Mathematiker und Informationstheoretiker diese
Algorithmen verstehen können. ;-)  Die Umsetzung in C hast du ja
weiter oben stehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.