Module:Harmonics in edo: Difference between revisions
module to generate odd harmonics approximations |
ArrowHead294 (talk | contribs) |
||
(32 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
local function edoprox(edo, odds, title, prec) | local function edoprox(edo, odds, title, prec) | ||
local f = 1/edo | local f = 1/edo | ||
local todd = {'! colspan="2" | Odd | local todd = {'! colspan="2" | Odd harmonic '} | ||
local tapprox = {'! colspan="2" | Approximation '} | |||
local tabs = {'! rowspan="2" | Error \n! absolute ([[cent|¢]]) '} | local tabs = {'! rowspan="2" | Error \n! absolute ([[cent|¢]]) '} | ||
local trel = {'! [[Relative error|relative]] (%) '} | local trel = {'! [[Relative error|relative]] (%) '} | ||
local tdeg = {'! colspan="2" | Steps ([[octave reduction|reduced]])'} | local tdeg = {'! colspan="2" | Steps ([[octave reduction|reduced]])'} | ||
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 13: | Line 15: | ||
v = s*edo | v = s*edo | ||
ev = math.floor(v + .5) | ev = math.floor(v + .5) | ||
table.insert(todd, ' ' .. p) | table.insert(todd, ' ' .. p ) | ||
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(trel, string.format(fmt_rel, 100 * (ev - v))) | table.insert(trel, string.format(fmt_rel, 100 * (ev - v))) | ||
Line 40: | Line 43: | ||
function p.harmonics_in_edo (frame) | function p.harmonics_in_edo (frame) | ||
local edo = frame.args[1] or frame.args['edo'] or 12 -- edo (default=12) | local edo = frame.args[1] or frame.args['edo'] or 12 -- edo (default=12) | ||
local columns = frame.args['columns'] or | local columns = frame.args['columns'] or 15 -- number of columns (default = 15, harmonics 3 to 31) | ||
local start = frame.args['start'] or 1 -- start column, default: start with harmonic 3 | 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 .. ' | 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 | 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) | return edoprox( edo, {unpack(odds, start, start+columns-1)}, title, prec) |