Je suis intéressé par produire une fréquence de tonalité à l'exécution avec la fréquence et la durée étant des paramètres variables. Quel serait le meilleur moyen de générer ce fichier son dans MATLAB et de le rendre accessible dans le script pour être ensuite concaténé avec d'autres fichiers audio générés de manière similaire pour différentes fréquences/durées? Merci d'avance pour les commentaires.Comment générer des fréquences bi-ton dans MATLAB?
Répondre
La durée de lecture d'un vecteur dépend du nombre d'éléments dans le vecteur et de la fréquence d'échantillonnage. Par exemple, un vecteur de 1000 éléments, lorsqu'il est joué à 1 kHz, durera 1 seconde. Lorsqu'il est joué à 500 Hz, il durera 2 secondes. Par conséquent, le premier choix que vous devriez faire est le taux d'échantillonnage que vous voulez utiliser. Pour éviter aliasing, la fréquence d'échantillonnage doit être twice as large as the largest frequency component of the signal. Cependant, vous pouvez vouloir le rendre encore plus grand que cela pour éviter l'atténuation des fréquences proches de la fréquence d'échantillonnage.
Compte tenu d'un taux d'échantillonnage de 1 kHz, l'exemple suivant crée un vecteur sonore d'une durée donnée et la fréquence de tonalité (en utilisant les fonctions LINSPACE et SIN):
Fs = 1000; %# Samples per second
toneFreq = 50; %# Tone frequency, in Hertz
nSeconds = 2; %# Duration of the sound
y = sin(linspace(0, nSeconds*toneFreq*2*pi, round(nSeconds*Fs)));
Lors de la lecture à 1 kHz en utilisant la SOUND fonction, ce vecteur va générer une tonalité de 50 Hz pendant 2 secondes:
sound(y, Fs); %# Play sound at sampling rate Fs
le vecteur peut alors être enregistré en tant que fichier wav en utilisant la fonction WAVWRITE:
wavwrite(y, Fs, 8, 'tone_50Hz.wav'); %# Save as an 8-bit, 1 kHz signal
Le son vecteur peut ensuite être chargé à l'aide de la fonction WAVREAD. Si vous voulez concaténer deux vecteurs sonores, vous devez vous assurer qu'ils sont tous deux conçus pour utiliser la même fréquence d'échantillonnage.
Est-ce que je spécifie la fréquence dans la variable Fs? Je voudrais avoir une méthode systématique pour déterminer comment générer un ton particulier à la même période. Quelles seraient vos recommandations à ce sujet? – stanigator
@stanigator: J'ai révisé le code pour le rendre plus général. Il calcule le vecteur sonore en fonction de la fréquence d'échantillonnage, de la fréquence de tonalité et de la durée. – gnovice
Le code de gnovice semble être défectueux. Je pense qu'il a chamboulé la fonction du linspace. Vous pouvez le vérifier vous-même en comparant la même fréquence avec différentes fréquences d'échantillonnage - le son diffère, ce qui ne devrait évidemment pas être le cas.
(je suis stupide. Lorsque vous utilisez la fonction de son Matlab, assurez-vous d'utiliser la même fréquence d'échantillonnage que vous avez utilisé pour générer le ton. Sinon, tu vas avoir un mauvais moment.)
Voici une fonction qui complète la fonctionnalité de génération de tonalité.
function pureTone (frequency, duration, amplitude, sampleFreq, save2file)
% Generate pure tones.
% Enter at least 1 argument.
% Defaults are:
% duration 1 sec
% amplitude 1
% sampleFreq 48000 Hz
% save2file no
%--------------------
% If you want to save the tone to a file, provide a name.
switch nargin
case 0
error('Enter a frequency.')
case 1
duration = 1;
amplitude = 1;
sampleFreq = 48000;
save2file = 0;
case 2
amplitude = 1;
sampleFreq = 48000;
save2file = 0;
case 3
sampleFreq = 48000;
save2file = 0;
case 4
save2file = 0;
end
t = linspace(0, duration, duration * sampleFreq);
% http://de.wikipedia.org/wiki/Sinuston
s = amplitude * sin(2 * pi * frequency * t);
sound(s, sampleFreq);
if save2file
wavwrite(s, sampleFreq, 32, save2file);
end
end
Les résultats de votre code et mon code semblent être identiques. Je viens de tester le mien avec différentes fréquences d'échantillonnage pour un certain nombre de tons et n'a pas eu l'erreur que vous voyez. Quels sont les paramètres que vous utilisiez qui ont entraîné une erreur? – gnovice
Vous avez raison. S'il vous plaît voir mon edit. – c06n
- 1. Comment annoter des graphiques dans MATLAB?
- 2. Renommer des fichiers dans MATLAB
- 3. Échantillonnage sonore aux basses fréquences
- 4. Base de données gratuite des fréquences de mots de Google?
- 5. comment générer des URLs conviviales dans Joomla?
- 6. Comment tracer des intervalles de confiance dans MATLAB?
- 7. Comment tracer des triangles sur une grille 6x6 dans MATLAB?
- 8. Déclencheurs DAQ dans Matlab
- 9. Comment émuler le comportement 'include' dans MATLAB?
- 10. Comment générer des partitions entières?
- 11. Binning dans matlab
- 12. Comment générer des identités aléatoires?
- 13. Comment faire un tri imbriqué dans MATLAB?
- 14. Comment faire fonctionner MATLAB xUnit sur MATLAB R2008b (7.7)?
- 15. Makefile erreur dans Matlab Real-Time Workshop
- 16. Quels algorithmes comptent les fréquences des éléments communs dans une collection d'ensembles?
- 17. Lire des images à partir d'un fichier dans MATLAB
- 18. Editer des cases à cocher dans une interface graphique Matlab
- 19. Échange Matlab
- 20. Comment dessiner des tracés 3d (semi-) logarithmiques? (Matlab)
- 21. Comment générer des formulaires avec AJAX?
- 22. arguments d'entrée Trop dans Matlab
- 23. Comment générer dynamiquement des éléments d'écran dans la plateforme OutSystems?
- 24. Comment puis-je générer des zéros en tête dans Ruby?
- 25. Comment générer des images à la volée dans ASP.NET
- 26. Comment générer des noms d'utilisateur anonymes uniques dans RoR?
- 27. Comment générer des images mipmap dans OpenGL ES?
- 28. Comment générer des exécutables dans un gem avec Rake?
- 29. Comment automatiser la génération de code Matlab/Simulink/Real-TimeWorkshop?
- 30. Comment imprimer un tableau dans un fichier .txt dans Matlab?
http://www.mathworks.com/help/techdoc/ref/sound.html –