Inviato: 02 dic 2009, 23:26
Toh. Codice MATLAB/Octave e frequenze (a sinistra dell'FPH, a destra dell'equabile). Nota che il residuo (cioè il valore di $ \left\Vert Ax-b\right\Vert_2 $) dell'equabile è già sufficientemente piccolo: 0.010100 contro lo 0.00857 (ottimale) dell'FPH. Stiamo lavorando su modifiche delle frequenze attorno all'uno per mille.
Avrei messo anche il CHAS ma non mi è chiaro come si generano le frequenze materialmente; se qualcuno me lo spiega brevemente ce lo aggiungo.
I conti qui sono fatti minimizzando solo sul "rapporto" tra le ottave e le quinte. Se volete che ci aggiunga anche le terze o altra roba si può fare. Anche se in teoria la cosa migliore sarebbe stabilire, per ogni singolo pezzo da suonare, quali esattamente sono le note che serve "suonino bene" senza battimenti (esempio, DO,MI,SOL se suono un accordo di do maggiore, eccetera) e minimizzare solo su quelle, creando un'accordatura ottimale per ogni pezzo. Anzi, pesando sul tempo per cui questi accordi vengono suonati. Ok, sto delirando -- meglio se vado a dormire.
Avrei messo anche il CHAS ma non mi è chiaro come si generano le frequenze materialmente; se qualcuno me lo spiega brevemente ce lo aggiungo.
Codice: Seleziona tutto
n=12*7+3; #numero di tasti su un pianoforte
#matrice e termine noto con i vincoli sulle ottave
A=-eye(n)+diag(ones(n-12,1),12);
A=A(1:n-12,:);
a=log(2)*ones(n-12,1);
#matrice e termine noto con i vincoli sulle quinte
B=-eye(n)+diag(ones(n-7,1),7);
B=B(1:n-7,:);
b=log(3/2)*ones(n-7,1);
#tutto insieme
M=[A;B]; m=[a;b];
#una "buona" accordatura è una che rende M*log(acc)-m piccolo
fph=exp(pinv(M)*m);
equabile=(2^(1/12)).^(1:n)';
#normalizziamo in modo che il LA di mezzo sia a 440
fph=fph/fph(49)*440;
equabile=equabile/equabile(49)*440;
#stampa le frequenze una a fianco all'altra
disp(sprintf('frequenze: fph | equabile '));
format long;
[fph equabile]
Codice: Seleziona tutto
2.74417004e+01 2.75000000e+01
2.90736624e+01 2.91352351e+01
3.08085753e+01 3.08677063e+01
3.26391465e+01 3.27031957e+01
3.45837835e+01 3.46478289e+01
3.66343679e+01 3.67080960e+01
3.88143631e+01 3.88908730e+01
4.11401716e+01 4.12034446e+01
4.35861753e+01 4.36535289e+01
4.61855202e+01 4.62493028e+01
4.89290334e+01 4.89994295e+01
5.18432825e+01 5.19130872e+01
5.49132558e+01 5.50000000e+01
5.81797674e+01 5.82704702e+01
6.16536292e+01 6.17354127e+01
6.53178988e+01 6.54063913e+01
6.92107842e+01 6.92956577e+01
7.33198327e+01 7.34161920e+01
7.76844692e+01 7.77817459e+01
8.23111417e+01 8.24068892e+01
8.72055911e+01 8.73070579e+01
9.24064163e+01 9.24986057e+01
9.78970591e+01 9.79988590e+01
1.03729137e+02 1.03826174e+02
1.09888041e+02 1.10000000e+02
1.16426377e+02 1.16540940e+02
1.23365790e+02 1.23470825e+02
1.30698807e+02 1.30812783e+02
1.38489222e+02 1.38591315e+02
1.46716884e+02 1.46832384e+02
1.55453488e+02 1.55563492e+02
1.64701088e+02 1.64813778e+02
1.74495791e+02 1.74614116e+02
1.84896228e+02 1.84997211e+02
1.95884308e+02 1.95997718e+02
2.07556491e+02 2.07652349e+02
2.19890563e+02 2.20000000e+02
2.32977723e+02 2.33081881e+02
2.46850295e+02 2.46941651e+02
2.61523252e+02 2.61625565e+02
2.77109670e+02 2.77182631e+02
2.93577436e+02 2.93664768e+02
3.11065984e+02 3.11126984e+02
3.29566578e+02 3.29627557e+02
3.49167492e+02 3.49228231e+02
3.69967567e+02 3.69994423e+02
3.91953589e+02 3.91995436e+02
4.15313472e+02 4.15304698e+02
4.40000000e+02 4.40000000e+02
4.66199635e+02 4.66163762e+02
4.93946299e+02 4.93883301e+02
5.23299123e+02 5.23251131e+02
5.54481014e+02 5.54365262e+02
5.87432912e+02 5.87329536e+02
6.22445555e+02 6.22253967e+02
6.59462128e+02 6.59255114e+02
6.98692136e+02 6.98456463e+02
7.40297415e+02 7.39988845e+02
7.84278576e+02 7.83990872e+02
8.31026176e+02 8.30609395e+02
8.80423413e+02 8.80000000e+02
9.32899676e+02 9.32327523e+02
9.88407193e+02 9.87766603e+02
1.04709374e+03 1.04650226e+03
1.10947285e+03 1.10873052e+03
1.17539597e+03 1.17465907e+03
1.24549502e+03 1.24450793e+03
1.31955562e+03 1.31851023e+03
1.39814471e+03 1.39691293e+03
1.48137449e+03 1.47997769e+03
1.56932378e+03 1.56798174e+03
1.66285400e+03 1.66121879e+03
1.76168266e+03 1.76000000e+03
1.86687116e+03 1.86465505e+03
1.97792187e+03 1.97553321e+03
2.09504731e+03 2.09300452e+03
2.21982987e+03 2.21746105e+03
2.35169225e+03 2.34931814e+03
2.49193991e+03 2.48901587e+03
2.64009909e+03 2.63702046e+03
2.79829736e+03 2.79382585e+03
2.96481517e+03 2.95995538e+03
3.14060865e+03 3.13596349e+03
3.32772579e+03 3.32243758e+03
3.52545123e+03 3.52000000e+03
3.73582550e+03 3.72931009e+03
3.95799560e+03 3.95106641e+03