2 votes

double vers int16 (génération ou conversion ?)

fsamp = 2;
deltaf = fsamp/nfft;   % FFT resolution
Nfreqtimestwo = 128;  % Used below
Nsines = Nfreqtimestwo/2 - 1;   % Number of sine waves
fmult = [1:Nsines];  % multiplicative factor
freq_fund = fsamp/Nfreqtimestwo;
freq_sines = freq_fund.*fmult; 
omega = 2*pi*freq_sines;
r = int16(0);
for(ii=1:Nsines)
    r = r + cos((omega(ii)/fsamp)*(0:messageLen-1));   
end

Voici le code que j'utilise actuellement pour créer mon signal d'entrée. Cependant, le résultat final de r est un tableau de 32 768 doubles. Maintenant, je voudrais faire la meilleure approximation de cela en utilisant int16 . Toutefois, je tiens à souligner que l'amplitude n'a pas vraiment d'importance. Par exemple, je pense que ma meilleure approche jusqu'à présent a été :

    fsamp = 2;
    deltaf = fsamp/nfft;   % FFT resolution
    Nfreqtimestwo = 128;  % Used below
    Nsines = Nfreqtimestwo/2 - 1;   % Number of sine waves
    fmult = [1:Nsines];  % multiplicative factor
    freq_fund = fsamp/Nfreqtimestwo;
    freq_sines = freq_fund.*fmult; 
    omega = 2*pi*freq_sines;
    r = int16(0);
    for(ii=1:Nsines)
        r = r + int16(8192*cos((omega(ii)/fsamp)*(0:messageLen-1)));   
    end

Y a-t-il de meilleures façons d'aborder cette question ?

EDIT La raison pour laquelle je veux convertir les doubles en ints est que cette liste est utilisée dans un système embarqué et qu'elle sera éventuellement transmise à un DAC 16 bits... aucun double n'est autorisé.

2voto

r.m. Points 25280

int16(vector) convertit vector de double a int16 et c'est la méthode préférée. L'autre façon de procéder consiste à définir toutes vos constantes sous forme de int16 dans ce cas, MATLAB vous donnera le résultat sous la forme d'un fichier de type int16 . Cependant, cela est lourd, donc restez avec ce que vous avez (à moins que si vous absolument doivent le faire de cette manière).

De plus, sans rapport avec votre question, vous pouvez vous débarrasser de la boucle en utilisant cumsum . Je vous laisse le soin de l'essayer :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X