Matlab: sauver des échantillons qui se répètent tous les 300 ms

voix
0

Je veux goûter un signal audio. J'ai un fichier wav 5 secondes. Je veux sauver tous les 300 ms échantillons. J'utilise audioread fonction dans laquelle on pouvait lire Matlab échantillons contenant dans le fichier, voici mon code:

[signal,fs]=audioread('file.wav');

dt = 1/fs;
N = length(signal);
t = 0:dt:(N-1)*dt;

plot(t,signal)
ms=t*0.001;

Comment puis-je faire enregistrer dans un échantillon de tableau qui se répètent tous les 300 ms?

Créé 24/10/2019 à 12:01
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Supposons que votre wavfichier a un taux d'échantillonnage fs = 44100( ce qui est assez fréquent), vous avez donc des 44100échantillons par seconde. Maintenant, vous voulez avoir un échantillon chacun 0.3 s. Vous devez calculer le nombre correspondant d'échantillons à « sauter » par rapport à votre taux d'échantillonnage d' origine, à savoir skip = 0.3 * fs = 13230dans ce cas. Maintenant, vous pouvez simplement accéder à chaque skipième élément original signal(et intervalle de temps t).

Voici un code pour faire le travail, et de visualiser ce qui précède:

% Artificial data
signal = sin(linspace(0, 2*pi, 5 * 44100));
fs = 44100;
dt = 1 / fs;
N = length(signal); 
t = 0:dt:(N-1)*dt; 

% "Re-sampling" parameters
dt_new = 0.3; 
skip = dt_new * fs;

% Extract every skip'th value from original time interval and signal
t_new = t(1:skip:end).'
signal_new = signal(1:skip:end);

% Some visualization
figure(1);
hold on;
plot(t, signal);
plot(t_new, signal_new, 'r.', 'MarkerSize', 15);
hold off;

Nous obtenons la sortie suivante, le signal original est bleu, les points rouges sont les échantillons à chaque 0.3 s:

Sortie

Si vous avez un oeil à t_new, vous voyez que les points d'échantillonnage correspondent exactement à votre intervalle souhaité de 0.3 s:

t_new =
     0.00000
     0.30000
     0.60000
     0.90000
     1.20000
     1.50000
     1.80000
     2.10000
     2.40000
     2.70000
     3.00000
     3.30000
     3.60000
     3.90000
     4.20000
     4.50000
     4.80000

J'espère que ça t'as aidé!

EDIT: Il y a aussi une resamplefonction disponible dans le traitement du signal Boîte à outils . Je ne sais pas, si cette fonction est utile ici, puisque le nouveau taux d'échantillonnage serait fs_new = 1 / 0.3 = 3.3333, mais resampleaccepte que les entiers. Peut-être, il y a une autre fonction plus sophistiquée (boîte à outils) pour faire le travail automatiquement.

Créé 24/10/2019 à 12:53
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more