Module:Harmonics in edo: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 7: | Line 7: | ||
local tabs = {'! | Error ([[cent|¢]]) '} | local tabs = {'! | Error ([[cent|¢]]) '} | ||
local tdeg = {'! | Steps'} | local tdeg = {'! | Steps'} | ||
local fmt_approx = string.format(' %%.%df', prec) | |||
local fmt_abs = string.format(' %%+.%df', prec) | local fmt_abs = string.format(' %%+.%df', prec) | ||
local fmt_rel = ' %+.0f' | local fmt_rel = ' %+.0f' | ||
| Line 14: | Line 15: | ||
ev = math.floor(v + .5) | ev = math.floor(v + .5) | ||
table.insert(todd, ' ' .. p .. '/' .. 2^math.floor(s) ) | table.insert(todd, ' ' .. p .. '/' .. 2^math.floor(s) ) | ||
table.insert(tapprox, string.format( | table.insert(tapprox, string.format(fmt_approx, 1200*(ev % edo)/edo) ) | ||
table.insert(tabs, string.format(fmt_abs, 1200 * (ev - v ) / edo)) | table.insert(tabs, string.format(fmt_abs, 1200 * (ev - v ) / edo)) | ||
table.insert(tdeg, ' ' .. ev % edo .. ' ') | table.insert(tdeg, ' ' .. ev % edo .. ' ') | ||
Revision as of 21:37, 13 April 2021
| Module:Harmonics in edo is deprecated and has been replaced by Module:Harmonics in equal. Further use of this module is not advised. This module is kept for historical purposes and should not be deleted. |
Used in Template:Odd harmonics in edo.
local p = {}
local function edoprox(edo, odds, title, prec)
local f = 1/edo
local todd = {'! | Odd harmonic '}
local tapprox = {'! | Approximation '}
local tabs = {'! | Error ([[cent|¢]]) '}
local tdeg = {'! | Steps'}
local fmt_approx = string.format(' %%.%df', prec)
local fmt_abs = string.format(' %%+.%df', prec)
local fmt_rel = ' %+.0f'
for _, p in pairs(odds) do
s = math.log(p) / math.log(2)
v = s*edo
ev = math.floor(v + .5)
table.insert(todd, ' ' .. p .. '/' .. 2^math.floor(s) )
table.insert(tapprox, string.format(fmt_approx, 1200*(ev % edo)/edo) )
table.insert(tabs, string.format(fmt_abs, 1200 * (ev - v ) / edo))
table.insert(tdeg, ' ' .. ev % edo .. ' ')
end
local titleMarkup = ''
if title then
titleMarkup = '|-\n|+ ' .. title .. '\n'
end
return '{| class="wikitable center-all"\n' ..
titleMarkup ..
'|-\n' ..
table.concat(todd, '\n!') .. '\n' ..
'|-\n' ..
table.concat(tapprox, '\n|') .. '\n' ..
'|-\n' ..
table.concat(tabs, '\n|') .. '\n' ..
'|-\n' ..
table.concat(tdeg, '\n|') .. '\n' ..
'|}'
end
local odds = { 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43 }
function p.harmonics_in_edo (frame)
local edo = frame.args[1] or frame.args['edo'] or 12 -- edo (default=12)
local columns = frame.args['columns'] or 8 -- number of columns
local start = frame.args['start'] or 1 -- start column, default: start with harmonic 3
local title = frame.args['title'] or 'Approximation of odd harmonics in ' .. edo .. ' EDO'
local prec = frame.args['prec'] or 1 -- for now only variable precision for abs error
return edoprox( edo, {unpack(odds, start, start+columns-1)}, title, prec)
end
return p;