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
pitch synthesis and lpc codebooks and excitation signal
Started by ●December 12, 2009
Reply by ●December 12, 20092009-12-12
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
Reply by ●December 14, 20092009-12-14
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 codebookindex>> and 4 bits as pitch index. I used these 12 bits to produce 160 samplesof>> 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) togenerate>> pitch. I read a random file and converted it to voice using lpccodebook>> and pitch index. Then I used the voice like data to convert back toactual>> 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 voiceto>> 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 myrx>> 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 atthis>> 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 limitedpitch>> indexes. The pitch impulses are also changed as they tend to show alittle>> vibrations and few more peaks at both positive and negative sides. >> >> Should I be using different excitation signal, eg dtmf tones orsomething>> like that, this will help me with pitch detection as well. What can bethe>> 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 >