我想在 Matlab 中生成一個歐幾里得節奏作為 1 和 0 的序列,但我不知道如何開始。
所以我知道我有一個變數 a = 1 的數量,b = 長度 c = 0 的數量 所以這將給出 a = a(你可以選擇一個數字),b = b(你可以選擇一個數字)和 c = ba 對于節奏,我希望在整個 0 中盡可能均勻地劃分所有 1(Bjorklund 演算法)。
例如:b = 13 和 a = 5
因此,將每個 1 與 0 放在一起可能會更好,那就是:
01 01 01 01 01 000
現在你有三個 0 和五對 01。
現在用對除以 0:
010 010 010 0101
現在把兩個01平均分成三個010
0100101001010
這是因為我們可以在 13 的長度上均勻分布五個 1。現在我想在 matlab 中創建一個腳本,當你輸入隨機的 a 和 b 時,它會自動給你一個節奏(假設 b > a)
任何幫助,將不勝感激。
uj5u.com熱心網友回復:
這不應該是一個“請為我寫代碼”的網站,但 Bresenham 演算法非常簡單,它的撰寫速度與建議你應該如何撰寫它一樣快。
function sequence = euclideansequence(events, beats)
increment = events / beats;
sequence = ''; % initialise the sequence
last = 0;
for ii = 1:beats
current = last increment;
if floor(current) > floor(last)
bit = '1';
else
bit = '0';
end
sequence = strcat(sequence, bit); % append bit to the sequence
last = current;
end
end
這將輸出作為字符向量回傳:
>> euclideansequence(5, 12)
ans =
'001010010101'
如果您希望它以其他形式出現,那么弄清楚如何修改代碼應該不會太難。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412037.html
標籤:
