Sono interessato a produrre una frequenza di tono in fase di esecuzione con la frequenza e la durata che sono parametri variabili. Quale sarebbe il modo migliore per generare questo file audio in MATLAB e renderlo accessibile nello script per utilizzarlo in seguito per concatenarlo con altri file audio generati in modo simile per frequenze/durate diverse? Grazie in anticipo per i commenti.Come si generano le frequenze dual tone in MATLAB?
risposta
La durata per la quale un determinato vettore verrà riprodotto dipende dal numero di elementi nel vettore e dalla frequenza di campionamento. Ad esempio, un vettore di 1000 elementi, se suonato a 1 kHz, durerà 1 secondo. Quando viene riprodotto a 500 Hz, durerà 2 secondi. Pertanto, la prima scelta da fare è la frequenza di campionamento che si desidera utilizzare. Per evitare aliasing, la frequenza di campionamento deve essere twice as large as the largest frequency component of the signal. Tuttavia, potrebbe essere necessario renderlo ancora più grande di quello per evitare l'attenuazione delle frequenze vicino alla frequenza di campionamento.
Data una frequenza di campionamento di 1 kHz, l'esempio seguente crea un suono vettore di una data frequenza la durata e il tono (utilizzando i LINSPACE e SIN funzioni):
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)));
Quando ha giocato a 1 kHz utilizzando il SOUND funzione, questo vettore genererà un tono di 50 Hz per 2 secondi:
sound(y, Fs); %# Play sound at sampling rate Fs
il vettore può essere salvata come file wav utilizzando la funzione WAVWRITE:
wavwrite(y, Fs, 8, 'tone_50Hz.wav'); %# Save as an 8-bit, 1 kHz signal
Il vettore audio può essere successivamente caricato utilizzando la funzione WAVREAD. Se hai intenzione di concatenare due vettori sonori, dovresti assicurarti che siano entrambi progettati per utilizzare la stessa frequenza di campionamento.
Devo specificare la frequenza nella variabile Fs? Mi piacerebbe avere un metodo sistematico di capire come generare un tono particolare allo stesso periodo di tempo però. Quali sarebbero i tuoi consigli su questo? – stanigator
@stanigator: ho modificato il codice per renderlo più generale. Calcola il vettore del suono in base alla frequenza di campionamento, alla frequenza dei toni e alla durata. – gnovice
Il codice di gnovice sembra essere difettoso. Penso che abbia incasinato la funzione linspace. Puoi verificarlo da te stesso confrontando la stessa frequenza con frequenze di campionamento diverse - il suono differisce, cosa che ovviamente non dovrebbe.
(che sono stupido. Quando si utilizza la funzione audio di Matlab, assicurarsi di utilizzare la stessa frequenza di campionamento che si è utilizzato per generare il tono. In caso contrario, dovrai un brutto momento.)
Ecco una funzione che avvolge la funzionalità di generazione toni.
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
I risultati del tuo codice e il mio codice sembrano identici. Ho appena testato il mio con frequenze di campionamento diverse per un numero di toni e non ho ricevuto l'errore che stai vedendo. Quali sono stati i parametri che stavi utilizzando che hanno provocato un errore? – gnovice
Hai ragione. Si prega di consultare la mia modifica. – c06n
- 1. Come si generano le note di rilascio?
- 2. Come si usa hist per tracciare le frequenze relative in R?
- 3. come si fa matlab?
- 4. Come si generano tutti i file in una directory?
- 5. Secondary/Dual axis - ggplot
- 6. PHP: come si generano tutte le possibili combinazioni di valori in un array?
- 7. Come si generano le stored procedure CRUD da una tabella in SQL Server Management Studio
- 8. generano automaticamente le dichiarazioni di modulo ambientali
- 9. Salvare le impostazioni in MATLAB
- 10. La magia di DUAL
- 11. Come si campiona una matrice in MATLAB?
- 12. Come si cancella la console in MATLAB?
- 13. Come si eseguono assegnazioni multiple in MATLAB?
- 14. Come si generano staticamente dati float al momento della compilazione?
- 15. Mostra frequenze insieme barplot in ggplot2
- 16. dual sim android sdk
- 17. Come si generano numeri casuali protetti da crittografia con PHP?
- 18. pygame dual monitor e fullscreen
- 19. SELEZIONA 1 da DUAL: MySQL
- 20. Come utilizzare char al posto di varchar quando si generano le tabelle db dalle entità?
- 21. conteggio delle frequenze degli oggetti in pitone
- 22. Come estrarre le frequenze semi-precise da un file WAV usando le trasformate di Fourier
- 23. funzioni anonime si chiamano in MATLAB
- 24. multithreading su macchina dual core?
- 25. Rails: non generano aiutanti
- 26. Android Audio - Streaming generatore di sine-tone comportamento strano
- 27. Come si crea una funzione anonima "vuota" in MATLAB?
- 28. Clojure principi fondamentali: il conteggio frequenze
- 29. Come si emula il comportamento "include" in MATLAB?
- 30. ggplot: frequenze relative di due gruppi
http://www.mathworks.com/help/techdoc/ref/sound.html –