Digital System Processing (Audio Processing)
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Lina Ngoopos
el 9 de Dic. de 2020
Comentada: Lina Ngoopos
el 9 de Dic. de 2020
I'm working on project to find the piano notes of a song. From the time domain graph, I was able to find the correct frequency where the note is present. I used: [S,F,T] = spectrogram (y, 512 , [] , 512, fs); to get the frequency of my song. But the size of the matrix S is too big and I cannot find the correcr frequency row. Can someone please help me understand how to get the correct row of frequency knowing the time?
Thanks
2 comentarios
Respuesta aceptada
Elimelech Schreiber
el 9 de Dic. de 2020
Editada: Elimelech Schreiber
el 9 de Dic. de 2020
If you have a specific time, then you should probably find the maximum frequency at that time, in the matrix S.
Each column in the matrix S contains the magnitudes of all the processed frequencies at a certain timestep.
e.g. Lets say t=1.13[sec].
first find the correct time index in T, which index 'i' yields T[i] =~ t (= 1.13) :
[~, i ] = min(abs(T - t))
lets say you've found i = 11,
now find the INDEX of the maximum magnitude in the i-th column of S:
[~, maxIdx] = max(S(:, i) ) % S(:, i)- The i-th column, containing freq. magnitudes at timestep i
finaly convert that index into a frequency, using F:
maxFrequency = F[maxIdx];
5 comentarios
Elimelech Schreiber
el 9 de Dic. de 2020
Yes, replace it if you have already found it.
And skip that step: that line is meant to find the correct index.
Más respuestas (0)
Ver también
Categorías
Más información sobre Pulsed Waveforms en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!