Signal audio : passage dB --> amplitude
Bonjour,
Je suis en train de réaliser un programme sous Matlab (R2009b) dans le domaine de l'audio. Je commence par charger mon fichier audio. Ensuite, je le convertis en dB afin de réaliser le traitement que je désire. Pour finir, je souhaite l'enregistrer pour pouvoir le conserver et l'écouter.
Voici un extrait du code que j'ai développé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
[audio,Fs,B] = wavread('G1.wav');
% audio : contient les données du fichier
% FS : fréquence d'échantillonnage des signaux
% B : nombre de bits considérés pour la quantification des signaux
[N,p] = size(audio);
% N : nombre d'échantillons
% p : nombre de pistes (1 : mono, 2 : stéréo)
% Conversion de mon signal audio en dB
audio_dB = zeros(N,2);
for i = 1:N
if audio(i,1) == 0
audio_dB(i,1) = -90;
else
audio_dB(i,1) = 20*log10(abs(audio(i,1)));
end;
if p ==2
if audio(i,2) == 0
audio_dB(i,2) = -90;
else
audio_dB(i,2) = 20*log10(abs(audio(i,2)));
end;
end;
end;
%**********************************************************************%
% Traitement sur le signal converti en dB %
% (j'ai appelé audio1 le signal sur lequel j'effectue les traitements) %
%**********************************************************************%
wavwrite(audio1,Fs,B,'test.wav'); |
Mon fichier audio1 est en dB, j'ai donc l'exception suivante :
Warning: Data clipped during write to file:test.wav
> In wavwrite>PCM_Quantize at 293
In wavwrite>write_wavedat at 309
In wavwrite at 138
In TestFunctions at 166
En cherchant un peu sur le net, j'ai vu comment régler ce souci si j'ai un signal en amplitude (compris entre -1 et 1, comme le sont habituellement les signaux audios).
J'ai essayé de remettre mon signal en amplitude pour l'enregistrer en faisant :
Code:
1 2 3
| for j = 1:N
file(j) = 10^(audio1(j)/20);
end; |
Et ensuite j'appliquais la fonction wavwrite sur file. Mais en faisant cela, je ne récupère pas réellement mon signal puisque toutes les valeurs sont alors comprises en 0 et 1 et non pas entre -1 et 1.
Quelqu'un saurait-il comment procéder pour réussir à récupérer mon fichier audio traité avec des valeurs comprises entre -1 et 1 et qu'on puisse alors l'écouter ?
Si mes explications ne sont pas claires, n'hésitez pas à poser des questions.
Merci d'avance.