On Tue, Feb 18, 2014 at 5:30 AM, Martin Braun <martin.br...@ettus.com>wrote:

> On 02/18/2014 12:28 AM, Jonathan Fox wrote:
> > Dear List,
> >
> > I am writing a custom QPSK modulator block (demod is next) and I am
> > caught up on figuring out the output.
> >
> > I am taking the byte data type (which I am using C++ char) and for each
> > bit of the byte I  would have a custom symbol per bit rate. For an
> > absolute minimum in a successful PSK system, I would need about two
> > symbols per bit. So the sequence of data to be passed through is growing.
>
> Always use uint8_t or unsigned char when handling bytes. I don't
> understand the rest--minimum for PSK would be 1 bit/byte (BPSK). Are you
> adaptively changing the modulation?
>
> > Now for where I am getting confused, when I come up with the I and Q
> > data as a complex number I can only send out one sample at a time,
> > right? So for each time my general_work executes it can send out only
> > one sample at a time while having even more samples calculated
> > representing just one value of input_items which upon modulation would
> > have quite a bit output samples. At least that is how I am interpreting
> > the process.
>
> Have you read the tutorial on how to write a block?
> I don't understand what you're writing. In any block, you can output as
> much items as is space in the output buffer (and should).
>
> > How do I get out all these samples before I get the next value of the
> > input? Should I write the sample values to a buffer that the block
> > should check whether it is full before processing the next char sample?
> > Anyone with experience writing modulator code have any tips? Can I keep
> > updating the value of out in the general_work and it will pass on to the
> > flowgraph?
>
> OK, I really don't know what you're trying to do. Can you please make
> sure you've read the tutorial on how to write blocks, and then tell us
> exactly what your application is meant to do. Code snippets would also
> help.
>
> > I have tried looking at what I believe is the PSK modulator source code,
> > gr_constellation.cc but it is a pretty hard piece of code to follow.
>
> gr_constellation is just the mapping logic bits <-> symbols.
>
> > I appreciate any help and feedback.
>
> MB
>
> _______________________________________________
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>

Thank you for the response, I apologize, I wasn't very clear at all in
explaining my problem and I can see that I came across confusing. Let me
quickly re-explain.

I am creating a QPSK modulator. I have a variable duration/sample rate
(stretching out the bit sequence, incase my terminology is incorrect). The
minimum of it should be about two samples per input bit. I am also having a
minimum two samples/symbol (just like the stock PSK modulator). I am taking
the bit sequence of the input char and I am using unsigned char datatype
like the one block example from the tutorial unpack_k_bits_bb. Now I am
modulating the bit sequence into a waveform that has a set number of
samples as a result of the duration that is specified. So in the end I have
N number of samples generated for every byte that is received from the
input buffer.

My confusion is the output_buffer. I look at the squarer code from the
tutorial and see general_work() and think of one input sample comes in, one
output sample comes out for each execution of the routine. Lets just say
after processing 1 byte from the input, I have 800 samples of I and Q
data that make up the modulated waveform. Those 800 samples need get out to
the flow graph before the next input comes in.

> I don't understand what you're writing. In any block, you can output as
> much items as is space in the output buffer (and should).

So I can write to the output buffer as much as I need to do, does it
involve set_output_multiple()?

Do I make sure noutput_items is equal to number of samples I wish to
output? I always though nouput_items equals 1 for non-vector data, and
d_vlen for any vectors whose size is d_vlen.

Would that change the output from a single sample to a vector of samples?

I am going to feed directly to the USRP sink, so a vector output is not
what I want, just a continuous stream of samples.

Also, where can I see the source code for the PSK modulator block? When I
type "PSK" in Nautilus' search function, the only C++ code I see the
receiver, snr estimator. I see python scripts for it qpsk and dpsk, that
have calls for constellation. If that is it, I apologize for my ignorance,
I thought it would be a normal C++ block.

Again, thank you very much, you have no idea how grateful I am for this
help.

Jon
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to