[phpBB Debug] PHP Warning: in file /includes/functions.php on line 4559: Invalid argument supplied for foreach()
Dampfradioforum • Thema anzeigen - Programm zur Optimierung von Tonarm-Geometrie

Dampfradioforum

Röhrenradioforum: Das Forum für alle Freunde alter Röhrenradios, Kofferradios und Röhrentechnik!
Aktuelle Zeit: Di Apr 16, 2024 8:43

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: Do Sep 25, 2008 15:16 
Offline
Benutzeravatar

Registriert: Mi Jun 04, 2008 0:16
Beiträge: 747
Wohnort: Saarbrücken
Kenntnisstand: Elektrotechnischer Beruf/ Studium
Hier mein angekündigtes (inzwischen schon vier Jahre altes) Rechenprogramm zur Ermittlung der optimalen Tonarmgeometrie bzw. -einstellung von Plattenspielern.

Und bitte keine Angst vor den Programmiersprachen "C" oder "C++" - wer schon mal in BASIC programmiert hat, wird feststellen, dass das unten abgebildete C-Programm auch nur mit Wasser kocht.

Der unten als Zitat abgedruckte Programmcode kann mit der Maus markiert und in einen Texteditor kopiert werden. Dann abspeichern mit der Dateiendung .cpp - also beispielsweise als tonarm.cpp - sodann kann es über den Compiler geschickt werden.

Zur Erinnerung hier nochmal kurz die Bedienung des C++-Compilers:

Befehlseingabe (für obiges Beispiel): g++ -o tonarm tonarm.cpp

Es entsteht eine lauffähige Maschinenversion namens "tonarm", die (in diesem Beispiel) einfach mit dem Befehl tonarm gestartet werden kann.

Beenden des Programms, das in einer Dauerschleife läuft, mit Strg+c (brutal, aber wirkungsvoll).

Anregungen und Verbesserungsvorschläge sind herzlich willkommen!

Gruß Ben

Zitat:
// PROGRAMM ZUR BERECHNUNG DER TONARMGEOMETRIE VON PLATTENSPIELERN
//
// (C) 2004 User "Ben" fuer Dampfradioforum.org
//
// Das Programm fragt zunaechst den Abstand Plattentellerlager - Tonarmlager
// ab. Sodann koennen verschiedene Werte fuer den Ueberhang eingegeben werden,
// und das Programm berechnet hierfuer jeweils die wichtigsten geometrischen
// Daten.
//
// Der Ueberhang kann nun solange variiert werden, bis die Spurfehlwinkel
// minimal werden.
//
// Hierzu wird (quasi) das Integral des Absolutbetrags des
// Spurfehlwinkels über den gesamten Plattenschnitt berechnet.
// Da Spurfehler bei den Innenrillen staerker hoerbar sind, wird zusaetzlich
// noch ein entsprechend bewertetes Integral ausgerechnet.
//
// Darueber hinaus werden die Spurfehlwinkel bei den Innen-
// und Aussenrillen ausgegeben.
//
// Die "optimale Kroepfung" ist ein arithmetischer Mittelwert ueber den
// gesamten Plattenschnitt.
//
// Nach welchem Kriterium letztlich optimiert wird, bleibt dem Anwender ueberlassen.
//
// Zur Herstellung von Einstellschablonen werden zusaetzlich die Plattenradien
// angegeben, bei denen der Tonabnehmer genau senkrecht zur Platten radialen
// steht ("Schablonen-Nullpunkte l und 2").
//
// Eine kommerzielle Verwendung des Programms oder der Programmstruktur ist untersagt!

# include <iostream>
# include <math.h>
# include <stdio.h>

using namespace std;

double inradius, aussradius, radius, schrittweite, ueberhang, nadelabstand, lagerabstand,
optkroepfung, spurfehler, anzahl, sumgamma, sumspurfehlerunbew, sumspurfehlerbew,
signumalt, signumneu, schabloneinnen, schabloneaussen;

// Definition der Funktion cosinussatz, welche bei 3 gegebenen Dreiecksseiten
// einen Winkel berechnet:

double cosinussatz (double gamma)
{
gamma = acos ((radius*radius+nadelabstand*nadelabstand-
lagerabstand*lagerabstand)/2/radius/nadelabstand);
return (gamma);
}

int main ()
{
double gamma;

// Hier die Handeingaben der Schallplatten - Parameter (alle in cm), sowie
// der Schrittweite der Berechnungen (in cm)!

inradius = 5.;
aussradius = 14.6;
schrittweite = 0.001;

cout << "Bitte Lagerabstand (in cm) eingeben: ";
cin >> lagerabstand;

programmstart:

cout << "Bitte Ueberhang (in cm) eingeben: ";

cin >> ueberhang;

cout << endl;

nadelabstand = lagerabstand + ueberhang;
radius = inradius;
sumgamma = 0;
anzahl = 0;
sumspurfehlerbew = 0;
sumspurfehlerunbew = 0;

while (radius <= aussradius)
{
gamma = cosinussatz (gamma);
sumgamma = sumgamma + gamma;
anzahl = anzahl + 1;
radius = radius + schrittweite;
}

optkroepfung = sumgamma / anzahl;

radius = inradius;
signumalt = -1;

do
{
gamma = cosinussatz (gamma);
spurfehler = gamma - optkroepfung;

// Vorzeichenwechsel beim Spurfehler erkennen und dann Schablonenwerte setzen:

signumneu = spurfehler / fabs (spurfehler);
if (signumalt == -1 && signumneu == 1)
schabloneinnen = radius;
if (signumalt == 1 && signumneu == -1)
schabloneaussen = radius;

signumalt = signumneu;

// Summe |spurfehler| im Intervall inradius bis aussradius
// mit Hoerbarkeitsbewertung (innen deutlicher hoerbar als aussen):

sumspurfehlerbew = sumspurfehlerbew + fabs (spurfehler)*aussradius/radius;

sumspurfehlerunbew = sumspurfehlerunbew + fabs (spurfehler);

// Diese Ausgabeanweisungen nur aktivieren, wenn Tabelle aller Spurfehlwinkel
// angelegt werden soll!
// cout << "Radius: ";
// printf ("%12f", radius);

// cout << " cm; Spurfehler: " << spurfehler*180 / M_PI << " Grad" << endl;

radius = radius + schrittweite;
} while (radius <= aussradius);

cout << "Lagerabstand: " << lagerabstand << " cm; " << "Ueberhang: " << ueberhang <<
" cm; " << "optimale Kroepfung: " << 90-optkroepfung*180/M_PI << " Grad" << endl;

radius = inradius;
gamma = cosinussatz (gamma);
spurfehler = gamma - optkroepfung;
cout << "Spurfehler innen: " << spurfehler*180/M_PI << " Grad" << endl;

radius = aussradius;
gamma = cosinussatz (gamma);
spurfehler = gamma - optkroepfung;
cout << "Spurfehler aussen: " << spurfehler*180/M_PI << " Grad" << endl;

cout << "Schablonen-Nullpunkt l: " << schabloneinnen << " cm" << endl;
cout << "Schablonen-Nullpunkt 2: " << schabloneaussen << " cm" << endl;

cout << "Summe |Spurfehler|: " << sumspurfehlerunbew << " Grad" << endl;
cout << "Summe |Spurfehler|, bewertet: " << sumspurfehlerbew << " Grad" << endl;
cout << endl;
goto programmstart;
}


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de

 
Impressum