marzullo maio
2007-Jun-07 08:17 UTC
[Speex-dev] Adding robustness to Speex on wireless networks.
I've not so much bandwidth to add channel coding but i've few bytes to spare for error detection. With a polynomial CRC-8 i've already more than 99.6 % to detect a burst error in a frame. So let's suppose the critical fields of Speex are: Wideband bit Mode ID LSP OL pitch OL pitch gain OL Exc gain So my plans are to calculate a CRC on these fields for each frame i send, then if i detect an error on the receiver side, i would replace the bad frame header with the last good frame header received. I remember this was supposed to work (a guess), i'll try it out on the CSD channel then. I hope this will slightly rise the quality expecially in bad signal conditions when i've more than 5% of frame loss. Is this approach better than just passing NULL for each frame lost? I could add interleaving too but i would double the "packet build latency" so i'm not convinced, latency is crucial for me. I would appreciate any other suggestion to add robustness to Speex. Thanks. --------------------------------- --------------------------------- L'email della prossima generazione? Puoi averla con la nuova Yahoo! Mail -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.xiph.org/pipermail/speex-dev/attachments/20070607/d12ed997/attachment.htm
Jean-Marc Valin
2007-Jun-08 22:51 UTC
[Speex-dev] Adding robustness to Speex on wireless networks.
marzullo maio a ?crit :> I've not so much bandwidth to add channel coding but i've few bytes > to spare for error detection. With a polynomial CRC-8 i've already > more than 99.6 % to detect a burst error in a frame. So let's suppose > the critical fields of Speex are: > > Wideband bit Mode ID LSP OL pitch OL pitch gain OL Exc gain > > So my plans are to calculate a CRC on these fields for each frame i > send, then if i detect an error on the receiver side, i would replace > the bad frame header with the last good frame header received. I > remember this was supposed to work (a guess), i'll try it out on the > CSD channel then. I hope this will slightly rise the quality > expecially in bad signal conditions when i've more than 5% of frame > loss. Is this approach better than just passing NULL for each frame > lost? I could add interleaving too but i would double the "packet > build latency" so i'm not convinced, latency is crucial for me.The "replace with previous known good value" approach is only recommended if you do it on a field-by-field basis (e.g. detect error in LSPs, keep last LSP value, use newer values for the rest). If your CRC is only at the frame level, you should consider the frame lost and use the LPC instead (passing NULL to speex_decode). Jean-Marc