DSPRelated.com
Forums

pitch synthesis and lpc codebooks and excitation signal

Started by staseer December 12, 2009
I am trying to use gsm network to send secure data encoded as voice. For
this purpose during my initial research I used 8 bits as lpc codebook index
and 4 bits as pitch index. I used these 12 bits to produce 160 samples of
voice like data.

I am new to dsp so using my limited knowledge I generated random
sequences, passed it thru lpc and used these coefficients to generate
codebook. I used impulses (setting corresponding indexes to 1) to generate
pitch. I read a random file and converted it to voice using lpc codebook
and pitch index. Then I used the voice like data to convert back to actual
data and almost original and final file matched 99%.

Then I realized that I need to pass it thru a vocoder to get the voice to
other side. I played the output and recorded it to see the difference. I
also concatenated a header sequence to mark start of frame. I used
correlation to find the start of the frame. When I passed voice thru my rx
side to convert it back to data I found that the waveform is so much
changed that it hardly resembles the original one. Now I am stuck at this
point. 

I want to know how should I generate the codebook, as I know I will be
using only these lpc coefficients at the tx side and only limited pitch
indexes. The pitch impulses are also changed as they tend to show a little
vibrations and few more peaks at both positive and negative sides. 

Should I be using different excitation signal, eg dtmf tones or something
like that, this will help me with pitch detection as well. What can be the
best method for pitch detection in my application.

Can anyone suggest a good paper for details of these problems,

Thanks and Regards,
Saba


staseer wrote:

> I am trying to use gsm network to send secure data encoded as voice.
This is fun project to do just as DSP challenge; but hardly useful for anything practical.
> For > this purpose during my initial research I used 8 bits as lpc codebook index > and 4 bits as pitch index. I used these 12 bits to produce 160 samples of > voice like data.
What is your reasoning for such selection? How do you convert indexes to parameters?
> I am new to dsp so using my limited knowledge I generated random > sequences, passed it thru lpc and used these coefficients to generate > codebook. I used impulses (setting corresponding indexes to 1) to generate > pitch. I read a random file and converted it to voice using lpc codebook > and pitch index. Then I used the voice like data to convert back to actual > data and almost original and final file matched 99%.
The 1% of errors is very poor result. There should be ideal matching.
> Then I realized that I need to pass it thru a vocoder to get the voice to > other side. I played the output and recorded it to see the difference. I > also concatenated a header sequence to mark start of frame. I used > correlation to find the start of the frame. When I passed voice thru my rx > side to convert it back to data I found that the waveform is so much > changed that it hardly resembles the original one. Now I am stuck at this > point.
Of course. Vocoder frames are not synchronized to your data. This is part of challenge.
> > I want to know how should I generate the codebook, as I know I will be > using only these lpc coefficients at the tx side and only limited pitch > indexes. The pitch impulses are also changed as they tend to show a little > vibrations and few more peaks at both positive and negative sides. > > Should I be using different excitation signal, eg dtmf tones or something > like that, this will help me with pitch detection as well. What can be the > best method for pitch detection in my application. > Can anyone suggest a good paper for details of these problems,
Coding/decoding of pseudo-voice is complicated problem. Judging on your rather naive questions, I'd recommend you to generate the simplest DBPSK signal at 300 bps; it comes through vocoder reasonably well. You can also consider FFT based encoder/decoder in spectral domain; the parameter update rate should be slower then half of the vocoder frame rate; i.e. something like 20 times per second. Vladimir Vassilevsky DSP and Mixed Signal Design Consultant http://www.abvolt.com
Thanks for your reply. Why do you say that this cant be used in anything
practical, as I have read a number of papers in this regards, on the basis
of which I am persuing this. 

I made a 256 entries codebook for LPC coefficients and changed pitch index
to pitch in the samples by setting 40+pitch index*2 indexes in the samples
array to one. 

I am not having problem in findind the header, I find it quite easily by
correlation as I use a DTMF tone as header. The basic problem which I think
I have is that I dont have a proper LPC codebook, which is the best way for
getting a codebook in my case. Also I am just putting indexes at
corresponding pitch locations to a high value, which are causing the
problem. I think it should be some tapering kind of waveform for the
vocoder to consider it a valid signal and not just accidental impulse. What
kind of waveform can it be.

Thanks and Regards,
Saba Taseer.
> >staseer wrote: > >> I am trying to use gsm network to send secure data encoded as voice. > >This is fun project to do just as DSP challenge; but hardly useful for >anything practical. > >> For >> this purpose during my initial research I used 8 bits as lpc codebook
index
>> and 4 bits as pitch index. I used these 12 bits to produce 160 samples
of
>> voice like data. > >What is your reasoning for such selection? >How do you convert indexes to parameters? > >> I am new to dsp so using my limited knowledge I generated random >> sequences, passed it thru lpc and used these coefficients to generate >> codebook. I used impulses (setting corresponding indexes to 1) to
generate
>> pitch. I read a random file and converted it to voice using lpc
codebook
>> and pitch index. Then I used the voice like data to convert back to
actual
>> data and almost original and final file matched 99%. > >The 1% of errors is very poor result. There should be ideal matching. > >> Then I realized that I need to pass it thru a vocoder to get the voice
to
>> other side. I played the output and recorded it to see the difference.
I
>> also concatenated a header sequence to mark start of frame. I used >> correlation to find the start of the frame. When I passed voice thru my
rx
>> side to convert it back to data I found that the waveform is so much >> changed that it hardly resembles the original one. Now I am stuck at
this
>> point. > >Of course. Vocoder frames are not synchronized to your data. This is >part of challenge. > >> >> I want to know how should I generate the codebook, as I know I will be >> using only these lpc coefficients at the tx side and only limited
pitch
>> indexes. The pitch impulses are also changed as they tend to show a
little
>> vibrations and few more peaks at both positive and negative sides. >> >> Should I be using different excitation signal, eg dtmf tones or
something
>> like that, this will help me with pitch detection as well. What can be
the
>> best method for pitch detection in my application. >> Can anyone suggest a good paper for details of these problems, > >Coding/decoding of pseudo-voice is complicated problem. Judging on your >rather naive questions, I'd recommend you to generate the simplest DBPSK
>signal at 300 bps; it comes through vocoder reasonably well. You can >also consider FFT based encoder/decoder in spectral domain; the >parameter update rate should be slower then half of the vocoder frame >rate; i.e. something like 20 times per second. > > >Vladimir Vassilevsky >DSP and Mixed Signal Design Consultant >http://www.abvolt.com >