Re: Multiplexación de señales con Python

Medardo Rodriguez (Merchise Group) med.swl en gmail.com
Mar Nov 18 15:24:08 CET 2008


2008/11/17 Jorge Luis Betancourt González <jlbetancourt en estudiantes.uci.cu>:
> Me podrías explicar como implemento eso en Python u en otro lenguaje?

Busca los algoritmos, e implementarlo en Python es simple. Alguna vez
hice eso mientras era estudiante -hace 21 años, más o menos- en la
carrera de telecomunicaciones y automática, al menos en mi época, esos
algoritmos eran comunes en la carrera.

No obstante la idea básica es que usa un pedazo proporcional del canal
para trasmitir cada señal consistente en un stream de bits con marcas
de cambio de señal. Hay normas para esto, claro; pero el algoritmo es
simple, aquí te va la idea:

<code>
# -*- coding: utf-8 -*-

# Copyright (c) 2008 Medardo Rodriguez (Merchise Group)
#
# This is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License (GPL) as published by the
# Free Software Foundation;  either version 2  of  the  License, or (at
# your option) any later version.


def fdm(each_channel_width, *channels):
    '''
    Supone cada chanel como un iterador de ints.
    Cuando un canal está agotado, comienza a trasmitir ceros por su banda.
    '''
    exhausted_value = 0
    count = len(channels)
    valids = [True]*count
    channels = tuple(iter(channel) for channel in channels)
    finished = False
    while not finished:
        some_valid = False
        for i in xrange(count):
            channel = channels[i]
            for j in xrange(each_channel_width):
                if valids[i]:
                    try:
                        yield channel.next()
                    except StopIteration:
                        valids[i] = False
                else:
                    yield exhausted_value
            if valids[i]:
                some_valid = True
        if not some_valid:
            finished = True


one = [1, 2, 3]
two = [4, 5, 6, 7, 8]
three = [9, 10]

def Test(each_channel_width):
    print 'Prueba %d' % each_channel_width
    res = [v for v in fdm(each_channel_width, one, two, three)]
    print res


Test(1)
Test(2)
Test(3)
</code>

Recuerda buscar las normas y usar los streams adecuados; Esto es sólo una idea.

Saludos
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es