Я новичок в MATLAB, и я работаю над программой, которая занимается частотой человеческого голоса на основе микрофонного ввода. Самая большая проблема, с которой я сталкиваюсь, заключается в том, что музыкальные ноты (что я имею в виду в этом проекте) увеличивают частоту экспоненциально, приблизительно 1.059463^x для каждого полутона в музыкальном масштабе.
В программе, с которой я имею дело, мне нужно как масштабировать график так, чтобы обнаруженная частота была близка к номеру ноты, которой она соответствует, а также масштабировала данные, чтобы я мог работать с номерами нот в терминах заметок и музыкальные центы, поэтому частотный график можно легко преобразовать в MIDI-данные.
Единственный другой вариант, который я нашел, - это создать библиотеку частот для записанных частот, которые нужно сравнить, но это излишне сложно и требует много времени.
Итак, в сущности, я пытаюсь масштабировать данные так, чтобы А2 с частотой 110 Гц соответствовал его номеру ноты 45. Есть ли способ сделать это?MATLAB semilog scaling
ответ
Я думаю, что это делает то, что вы хотите:
f = 110; %// frequency in Hz
n = log10(f/440)/log10(2)*12+69; %// 440 Hz (note A4) is note 69
note = round(n);
cents = round((n-note)*100);
Примеры: f = 110
дает
note =
45
cents =
0
f = 345
дает
note =
65
cents =
-21
в соответствии с this reference и this converter.
Спасибо. Есть ли способ масштабировать весь граф, используя это? Например, если вы используете микрофонный вход в реальном времени, есть ли способ, чтобы обнаруженная частота отображалась и записывалась с точки зрения номера ноты и центов, а не только частоты? –
"_the __detected__ частота, которая должна быть __displayed__ и __recorded___". Извините, я не понимаю, что вы имеете в виду. Записанный аудиофайл содержит звуковые фрагменты, представляющие форму волны. Обнаружение частот из этого (а затем их отображение) - это другое дело. –
У меня есть алгоритм определения высоты тона, который я могу использовать, но мне нужен способ легко преобразовать частоту, которую программа обнаруживает в номере ноты MIDI. По сути, если я получаю 4 точки данных f = 110, f = 116.541, f = 123.471 и f = 103.826, я хотел бы, чтобы полученный граф отображал номер ноты, а не частоту, давая мне точки данных n = 45, n = 46, n = 47 и n = 44. –
- 1. Scaling участка в MATLAB
- 2. Matlab Hist3/Imagesc Ось Scaling
- 3. Semilog in python
- 4. semilog plot: axes не будет оставаться постоянным
- 5. Scaling для линейной регрессии и классификации с использованием MATLAB
- 6. Windows scaling
- 7. Scaling EhCache
- 8. Scaling SKSpriteNode
- 9. GraphEngine Scaling
- 10. MongoDB scaling
- 11. postscript scaling
- 12. CGPDFDocument scaling
- 13. Scaling Drupal
- 14. Scaling значение прогресс бар
- 15. CPU Intensive App Scaling
- 16. Scaling phoenix on heroku
- 17. Scaling Spring on Heroku
- 18. XNA Window Scaling Performance
- 19. Scaling socket.io broadcast
- 20. Self Scaling on Heroku
- 21. JavaFX Button hover scaling
- 22. Latex pgfplots loglogaxis scaling
- 23. pyqtgraph custom scaling issue
- 24. AS3 9 slice scaling
- 25. Scaling An R Image
- 26. Scaling Physics World
- 27. Scaling Dynos с Heroku
- 28. Keras Custom Scaling Layer
- 29. Scaling для сайта TYPO3
- 30. Canvas drawImage scaling
[This] (http://newt.phys.unsw.edu.au/jw/notes.html) может быть полезным –
Я действительно использовал это как ссылку, но я не знаю, как для масштабирования данных в масштабе MIDI. –
См. Мой ответ –