Guitar Tuning Stability Code

From DDL Wiki

(Difference between revisions)
Jump to: navigation, search
(New page: == Introduction == This page contains all the MATLAB files necessary to run the tuning analysis we did. In order to run the code, copy the text from each section into its own MATLAB file...)
(bridge_analysis.m)
Line 137: Line 137:
% axis([0 90 0 400]);
% axis([0 90 0 400]);
hold off;
hold off;
-
 
== eten.m ==
== eten.m ==

Revision as of 01:34, 5 December 2008

Contents

Introduction

This page contains all the MATLAB files necessary to run the tuning analysis we did. In order to run the code, copy the text from each section into its own MATLAB file (named for the title of the section). Put all these files in the same directory, then run them in MATLAB. These functions were written in MATLAB 2007b with the symbolic math toolbox, and may or may not run in other versions. The files are completely automated, no user input is necessary.

To run the analysis, simply open MATLAB, and run the bridge_analysis.m file. All other files are helper functions.


bridge_analysis.m

% Jeremy Ozer % November 8th, 2008 % Engineering Design II

close all; clear all; clc;

global stiffness k ten0 def;

stiffness = 2e11; k = [46.2/5.63 49.0/3.99 57.4/2.21 59.3/3.46 62.5/2.74 65.7/2.53]*1000; % Spring constants in N/m ten0 = [46.2 49.0 57.4 59.3 62.5 65.7];  % Neutral string tensions def = [5.63 3.99 2.21 3.46 2.74 2.53] / 1000;  % Neutral string deflections

theta = linspace(0,5,1000)*pi/180; % Create set of angles we are evaluating between 0 and 2 degrees

% Shifting Saddle Analysis

m = sin(theta)*0.0254; ot = offtune(theta); figure; plot(1000*m, ot); title('Comparison of Saddle Slippage to Tune Shift'); xlabel('Saddle offset (mm)'); ylabel('Frequency Error (Cents)'); legend('e','B','G','D','A','E');


% Now twisting Analysis

theta = linspace(0,90,1000)*pi/180; dia = [229 279 406 610 813 1067]*10^-6;

l0 = 25.5*0.0254; for i=1:length(theta)

   ltwist(i,:) = l0+pi*dia*theta(i);

end % figure; % plot(theta, ltwist);

delta = ltwist-l0; for(j=1:length(theta))

   for i=1:6
       t(j,i) = ten0(i) + k(i)*delta(j);
   end

end

% figure; % plot(theta,t);

ml = [1.67 3.16 5.88 10.84 20.33 38.10]*10^-4; ml = ml.*[1 1 1 0.902 0.886 0.867];

for(j=1:length(theta))

   for i=1:6
       tunes(j,i) = 1/2*(t(j,i)./(ml(i)*l0)).^0.5;
   end

end

% figure; % plot(theta,tunes);

f0 = tune(0);

sharp = [349.23 261.63 207.65 155.56 116.54 87.31]; for j=1:length(theta)

   for i=1:6
       n(j,i) = 1200*log2(tunes(j,i)/f0(i));
   end

end cents = n;


nx = [0 100]; n = [100 100]; figure; hold on; plot(theta*180/pi, cents); title('Comparison of Ball End Rotation to String Tune'); xlabel('Ball End Rotation (degrees)'); ylabel('Frequency Error (Cents)'); legend('e','B','G','D','A','E'); plot(nx,n,'r--',nx,2*n,'r--',nx,3*n,'r--'); axis([0 90 0 400]); hold off;


% Prototype 2 Analysis a = atan(0.0015/0.75); lextra = 0.2*sin(a)*0.0254 l0 = 25.5*0.0254; t = zeros(1); delta = lextra; for i=1:6

   t(i) = ten0(i) + k(i)*delta;

end t % figure; % plot([0 a], [ten0;t]);

tunes = zeros(1); for i=1:6

   tunes(i) = 1/2*(t(i)./(ml(i)*(l0+delta))).^0.5;

end % figure; % plot([0 a], [tune(0); tunes]);

f0 = tune(0); sharp = [349.23 261.63 207.65 155.56 116.54 87.31]; for j=1:length(theta)

   for i=1:6
       n(i) = 1200*log2(tunes(i)/f0(i));
   end

end cents = n;


nx = [0 100]; n = [100 100]; figure; hold on; plot([0 180/pi*a], [zeros(1,6);cents]); title('Comparison of Ball End Rotation to String Tune'); xlabel('Ball End Rotation (degrees)'); ylabel('Frequency Error (Cents)'); legend('e','B','G','D','A','E'); % plot(nx,n,'r--',nx,2*n,'r--',nx,3*n,'r--'); % axis([0 90 0 400]); hold off;

eten.m

function tension = eten(theta) global stiffness k ten0 def;


% orig_length = string_length(0); % lengths = string_length(theta); % delta = orig_length - lengths; % t = zeros(length(theta),6); % for(j=1:length(theta)) % for i=1:6 % if delta(j) < def(i) % t(j,i) = ten0(i)-slope(i).*delta(j); % else % t(j,i) = 0; % end % end % end % tension = t;

l0 = string_length(0); l = string_length(theta); delta = l-l0; for(j=1:length(theta))

   for i=1:6
       t(j,i) = ten0(i) + k(i)*delta(j);
   end

end

tension = t;


hands.m

function fhand = hands(theta) lhand = 0.127; lstring = 0.01346962; lspring = 0.0254;

fspring = spring(theta); tensions = eten(theta); fstring = tensions(:,1)+tensions(:,2)+tensions(:,3)+tensions(:,4)+tensions(:,5)+tensions(:,6); fstring = fstring'; fhand = (-fstring.*lstring+fspring.*lspring)./lhand;


offtune.m

function cents = offtune(theta)

f0 = tune(0); f = tune(theta);

% Frequencies from http://www.phy.mtu.edu/~suits/notefreqs.html sharp = [349.23 261.63 207.65 155.56 116.54 87.31]; for j=1:length(theta)

   for i=1:6
       n(j,i) = 1200*log2(f(j,i)/f0(i));
   end

end cents = n;


spring.m

function tension = spring(theta) hstring = 0.01346962; hspring = 0.0254; kspring = 7100.59; initial_stretch = 0.0254;

tension = kspring.*spring_stretch(theta)+kspring*initial_stretch;


% stens = eten(theta); % stenst = zeros(1); % for i=1:length(theta) % stenst(i) = sum(stens(i,:)); % end % % tension = stenst*hstring/hspring;


spring_stretch.m

function stretch = spring_stretch(theta) stretch = 0.0254*sin(theta);


string_length.m

function lengths = string_length(theta)

l0 = 25.5; m = sin(theta); % Find horizontal offset l = (m.^2+l0^2).^0.5+(1-cos(theta)); lengths = 0.0254*l; % Convert inches to meters


tune.m

function frequency = tune(theta) orig_length = string_length(0); lengths = string_length(theta); delta = lengths - orig_length; l = string_length(theta); T = eten(theta); density = 7800; % a = [4.10 6.13 12.9 29.2 51.9 89.4]*10^-8; % m = a*7800; m = [1.67 3.16 5.88 10.84 20.33 38.10]*10^-4; m = m.*[1 1 1 0.902 0.886 0.867]; % length(T(1,:)) % length(m) % length(l(1)) % length(.5.*(T(1,:)./(m.*l(1))).^0.5)

f = zeros(length(theta),6); for i=1:length(theta)

   f(i,:) = 1/2.*(T(i,:)./(m.*l(i))).^0.5;

end frequency = f;

Personal tools