Fachkundige und individuelle Beratung ist für uns selbstverständlich - rufen Sie uns an!
Sie erreichen unsere Hotline werktags von 10:00 bis 18:00 Uhr unter der 07171 8712 0 (Samstags: 10:00 bis 12:00 Uhr). Außerhalb Deutschlands wählen Sie +49 7171 87120. Im Dialog finden wir die optimale Klanglösung für Sie und klären etwaige Fragen oder Schwierigkeiten. Das nuForum ist seit dem 19. Juli 2023 im read-only-Modus: Das Ende einer Ära: Das nuForum schließt

FIR, DBA, Digital-Controller

Diskussionen über Funktionsprinzipien und Grundlagen
teite
Star
Star
Beiträge: 844
Registriert: Mi 8. Dez 2004, 19:08
Wohnort: Schwerin

Beitrag von teite »

Hallo,
Grummel hat geschrieben:wenn du einen DSP bekommst, dann bekommst du auch die Entwicklungsumgebung dafür ;-)
Ich finde LabView ziemlich cool. Sozusagen Point & Click DSP-Programmierung. ;) Aber das gibts wohl nur fuer Sheldon Karten?

Leider sind die gaengigen Industrie-DSP-Karten ziemlich teuer, jedenfalls ueberm Limit zum Experimentieren und Basteln.

Cu,
Stefan
Benutzeravatar
Frank Klemm
Star
Star
Beiträge: 2383
Registriert: So 22. Dez 2002, 19:59
Wohnort: Thüringen
Danksagung erhalten: 9 Mal

Beitrag von Frank Klemm »

Grummel hat geschrieben:zur Fragestellung DSP vs. CPU: soweit ich das bisher beurteilen kann, sollte ein eigener Controller mit DSP wesentlich einfacher aufzubauen sein als entsprechendes Gerät mit aktuellen oder historischen Desktop-CPUs (Intel/AMD und Konsorten). Für letztere braucht man AFAIK einen "ganzen PC" und hat dann wieder das Problem an die analogen / digitalen Daten zu kommen - insbesondere summieren sich ja hier auch noch die Latenzen der verschiedenen Bussysteme im PC.
Ein paar Bemerkungen zum Entwurf von Systemen.

Ich unterscheide immer streng zwischen Proof-Of-Concept-Phase und
Produktentwicklung. Diese haben so unterschiedliche Anforderungen,
daß man sie unbedingt trennen sollte. Wie sie zeitlich/personell
abgedeckt werden, ist aber egal. Man kann das Projekt nach der
Proof-Phase abbrechen, man kann erst die Proof-Phase durchführen,
dann die Geräteentwicklung, man kann auch beides parallel laufen lassen.

Nehmen wir mal die Entwicklung einer DSP-Box (Stereo, 2-Wege)
oder eines riesigen Mehr-Kanal-DSP-Systems (7.1, Fronts mit 5 Chassis,
Center und Rears mit 4 Chassis).

Für die Proof-Of-Concept-Phase möchte ich in 24 Stunden zu arbeiten
anfangen, Teile müssen bei Ungeeignetheit zumindest technisch in
wenigen Stunden auswechselbar sein, ohne das störende Zusatzkosten
entstehen. Ein DSP-System ist dafür etwa so geeignet wie ein Pottwal
zum Fliegen.

Man nimmt einen normalen PC, hängt z.B. über IEEE-1394 AD- und
DA-Wandler dran, nimmt die komfortablen Entwicklungswerkzeuge
des PCs und schreibt eine Applikation, die genau das macht, was später
das Gerät machen soll. Hinter die Wandler kommen dann noch ein
paar Verstärker und daran direkt die Chassis. Zum Testen und Vorführen
reicht das aus. Entwickeln ist um Lichtjahre komfortabler als auf einem
kruden DSP-System. Der Faktor 10 oder mehr zu viel Rechenleistung ist
beim Entwickeln Gold wert. Erst ausprobieren, ob etwas geht (z.B. in 10
Minuten), erst dann optimieren (teilweise monatelang).

Für das Stereo-2-Wege-System reicht eine 4-Kanal-Karte aus, für das
7.1-System nimmt man ein 32-Kanal-System oder zwei kaskadierbare
16-Kanal-Systeme. Gibt es im Musikbedarf nebenan. Ist zwar nicht
billig, aber eine DSP-Eigenentwicklung ist um etliches teurer, dauert
Monate und eigentlich weiß man ja noch gar nicht, was man will und
braucht und ob das mal eine Verkaufslösung wird.

Die eigentliche Verkaufslösung entsteht dann durch die eigentliche
Produktentwicklung. Bei geringen Stückzahlen versucht man möglichst
nah an der PC-Lösung zu bleiben, bei sehr großen Stückzahlen oder
geforderter Kompaktheit sind DSP-Lösungen besser.

Ein PC-Board mit 150 €-CPU sieht zwar gegenüber einem DSP für 8 €
teuer aus, aber dafür werden die Motherboards bei üblichen Stückzahlen
wesentlich teurer (z.B. 4000 € statt 120 €).

Selbst in der Proof-Of-Concept-Phase gibt es verschiedene Phasen:
Phase 1: Programm muß nur irgendwie laufen, CPU-Bedarf, RAM-Bedarf und Latenzzeiten sind unwichtig.
Phase 2: Zum schnellen Durchprobieren sind die Latenzzeiten zu reduzieren. Echtzeitfilterung ist angesagt. Meist sind wesentliche Algorithmen umzustellen.
Phase 3: RAM- und CPU-Bedarf sind zu optimieren
Phase 4: Oberfläche zur Bedienung durch Laien ist zu kreiern, an dieser Stelle sollte man sich langsam auch Gedanken über das Bedienkonzept des Verkaufsproduktes machen.

Die Geräteentwicklung ist komplizierter. Es gibt mehrere Wege, je nachdem,
ob es eher in die Richtung Embedded-PC, Fertig-DSP oder Eigen-DSP-Entwicklung
geht. Das führt hier zu weit.

Zum ATM noch eine Bemerkung. Die EMV-Probleme der Einschaltautomatik
kann man auch mit VCAs lösen. Außer in pathologischen Fällen
treten dann keine Übersteuerungen mehr auf, die in den Nutzsignalweg eingreifen
könnten.
burki

Beitrag von burki »

Hi Stefan,
teite hat geschrieben:Hallo,

@burki:
Was hast du denn fuer ein System?

Man kann sich die Sache natuerlich auch etwas vereinfachen und sich eine DSP-PCI Karte mit AD/DA-Wandler-Extension und Expanderbox fuer die Anschluesse.

Allerdings ist der PC ein eher feindliches Umfeld fuer Signalverarbeitung hoher Qualitaet. :roll: Daher wuerde ich eher eine externe Loesung mit Ethernet Schnittstelle realisieren. Gibt auch schon fertige Karten dafuer wie zum Beispiel: http://www.etools.de/hardware/prozessor ... 5400d7a913

Cu,
Stefan
ich benutze Standard-PC-Ware (ok, es wird fuer einen fetten client noch ein mobiler P4 kommen) und ein "kleines Linux" (aber nicht embedded).

Was bei der hiesigen Diskussion aber m.E. vergessen wird:
Ein DSP ist schoen und gut, doch das Problem beim Selbstbau ist doch, dass (ausser die Kosten fuer das passende board) das Ganze (im "enkodierten Mehrkanalzeitalter") ohne vernuenftige Dekoder wenig Sinn macht.
Einen DD-Dekoder koennte ich nachbauen (auch das waere nicht legal), doch bei dts gibts massive Probleme.
Im Enddeffekt kommt man um eine "vernuenftige Vorstufe", die mehrkanaeliges PCM ausgibt nicht herum und die kostet wieder eine Stange Geld.
Ich bleibe dabei: Als Studienobjekt mag das alles ganz nett sein, doch als kommerzielles Projekt (auch Hr. Nubert kann davon ein Liedchen singen :wink: ) nicht oder nur sehr schwer vermarktbar.
Gruss
Burkhardt
Benutzeravatar
Frank Klemm
Star
Star
Beiträge: 2383
Registriert: So 22. Dez 2002, 19:59
Wohnort: Thüringen
Danksagung erhalten: 9 Mal

Beitrag von Frank Klemm »

burki hat geschrieben:Ein DSP ist schoen und gut, doch das Problem beim Selbstbau ist doch, dass (ausser die Kosten fuer das passende board) das Ganze (im "enkodierten Mehrkanalzeitalter") ohne vernuenftige Dekoder wenig Sinn macht.
Einen DD-Dekoder koennte ich nachbauen (auch das waere nicht legal), doch bei dts gibts massive Probleme.
Im Enddeffekt kommt man um eine "vernuenftige Vorstufe", die mehrkanaeliges PCM ausgibt nicht herum und die kostet wieder eine Stange Geld.
Ich bleibe dabei: Als Studienobjekt mag das alles ganz nett sein, doch als kommerzielles Projekt (auch Hr. Nubert kann davon ein Liedchen singen :wink: ) nicht oder nur sehr schwer vermarktbar.
Es geht die ganze Zeit um ein Gerät, was zwischen kommerzieller Vorstufe
und kommerzielle Endstufe zu schalten ist.

Es geht die ganze Zeit um das Problem, daß sich niemand 20 Geräte
hinstellt, die jeweils ein Problem lösen, 4000 € kosten, 3 HE im
19 Zoll-Rack fressen, wenn das ganze ein Gerät erledigen kann.

Für die Entzerrung einer 6.1-Anlage mit DBA stehen da schon
4 Geräte im Rack für Phasenlinearisierung und Verzögerung der
rückwärtigen Subs. Kostenpunkt : Mehr als ich bis jetzt fürs Auto
ausgegeben habe inkl. Versicherungen, Reparatur, Unterhaltung.

Die die Probleme des Baßmanagements bleiben. Dort wird wieder
alles zur Sau gemacht, weil beim Zuschalten des BM die Trennung
wieder mit Minimalphasenfiltern erledigt wird.

Bei einer Aktiv-DSP-Box hat man BTW immer noch drei
Geräte hintereinandergeschaltet (AV-Vorstufe, The Box, Lautsprecherweiche).
burki

Beitrag von burki »

Hi Frank,
mir ist schon klar, was Du moechtest, doch frage einfach mal Hr. Nubert warum seine aelteren DSP-Boxen nicht den Sprung ins Sortiment fanden und warum nicht schon laengst z.B. das DBA-System in den Regalen steht ?
Ein Studio kauft sich dann halt eine handvoll von FIR-Controllern bei K+H (bzw. einer renommierten Firma) oder gleich die O500C.
Der "kleine" Homeanwender dagegen versteht nicht den Vorteil, wenn er sich eh schon einen AVR mit "Einmesssystem" gekauft hat ...
Ich sehe im Homebereich fuer solch ein Geraet keine grossen Chancen (mach mal wirklich eine handfeste Kalkulation) auf dem Markt.
Etwas anders waere es, wenn der Kontroller in einer modularen Vorstufe integriert waere und deshalb mein obiger Einwand.
Gruss
Burkhardt
teite
Star
Star
Beiträge: 844
Registriert: Mi 8. Dez 2004, 19:08
Wohnort: Schwerin

Beitrag von teite »

Hallo,

@Frank:

Wie willst du möglichst geringe und vor allem fixe Latenzzeiten bei einem PC-System erreichen? Die CPU-Rechenleistung nützt einem nicht viel, wenn man unkalkulierbare Antwortzeiten für I/O-Reqests oder Context-Switches beim Scheduler hat. Es sei denn man definiert gleich ein 1 Sekunden "Default"-Delay für alle Signale und hofft das das in allen Fällen reicht. ;)

IMHO kommt man trotzdem kaum an einem Realtime OS vorbei. Anbieten würden sich QNX oder ev. RT Linux, allerdings scheint da die Entwicklung eingeschlafen zu sein. Nachteil ist die notwendige Crossplatform Entwicklung wenn man auf Standard-Betriebssystemen die Software entwickeln will.


Cu,
Stefan
Benutzeravatar
Frank Klemm
Star
Star
Beiträge: 2383
Registriert: So 22. Dez 2002, 19:59
Wohnort: Thüringen
Danksagung erhalten: 9 Mal

Beitrag von Frank Klemm »

teite hat geschrieben:Hallo,
Wie willst du möglichst geringe und vor allem fixe Latenzzeiten bei einem PC-System erreichen?
Automatiken ausschalten und alle verwendeten Treiber in Extremsituationen
testen. Bei Windows NT sind durchaus <1 ms erreichbar. Probleme sind
Graphikkarten und Netzwerkkarten, manchmal USB-Treiber.

Für Audio/Video reicht "weiche" Echtzeit, moderne "normale" Betriebssyteme
verhalten sich da ausreichend gutmütig.
Die CPU-Rechenleistung nützt einem nicht viel, wenn man unkalkulierbare Antwortzeiten für I/O-Requests oder Context-Switches beim Scheduler hat.
Bei I/O-Requests sind auch bei käuflichen Echtzeit-Betriebssystemen
keine Antwortzeiten garantiert. Praktische Erfahrungen zeigen, daß
sie in dieser Beziehung sogar deutlich schlechter als "normale"
Betriebssysteme sind.
IMHO kommt man trotzdem kaum an einem Realtime OS vorbei. Anbieten würden sich QNX
QNX könnte brauchbar sein. Aber z.B. VxWorks ist für Audio/Video
völlig unbrauchbar. Das hat den Charme eines PDP-11, nanosleep()
hat eine Granularität von 16666667 Nanosekunden, sobald man
irgendwas benutzt, was Hardwarezugriffe macht, ist es mit der
Echtzeitfähigkeit vorbei. Selbst der käuflich erwerbbare Profiler
versaut einem die Echtzeitfähigkeit in einer Weise, daß es zum
Himmel schreit.

Wie bestimme ich eigentlich die minimal garantierte Antwortzeit
eines RT-OS? Bei einem RT-OS gibt es ja so eine Zahl, also muß man
sie doch bestimmen können! Ich habe noch nie eine gelesen.
oder ev. RT Linux, allerdings scheint da die Entwicklung eingeschlafen zu sein. Nachteil ist die notwendige Crossplatform Entwicklung wenn man auf Standard-Betriebssystemen die Software entwickeln will.
Die letzte RT-Linux-Version, die ich gesehen habe, war ein 2.0.xx-Kernel.
Für die Entwicklung empfehle ich einfach auf einem PC zu entwickeln
mit einigen Designregeln, die einem das Portieren/Parallelentwickeln
auf das Zielsystem unterstützen. Das macht sich sehr gut.
Benutzeravatar
Frank Klemm
Star
Star
Beiträge: 2383
Registriert: So 22. Dez 2002, 19:59
Wohnort: Thüringen
Danksagung erhalten: 9 Mal

Beitrag von Frank Klemm »

burki hat geschrieben:Ich sehe im Homebereich fuer solch ein Geraet keine grossen Chancen (mach mal wirklich eine handfeste Kalkulation) auf dem Markt.
Ich möchte auch gar nichts verkaufen.

Zwischen einer "privaten, sehr gut laufenden Version" und einer "verkaufbaren Version inkl. Garantie und Service" liegt ein
Aufwandsunterschied von 1:10 bis 1:20 (z.B. 3 Monate + gegen
4 Jahre Entwicklungsaufwand

Verbunden mit der Unsicherheit der Verkaufszahlen ist es
daher billiger, gar nicht erst was verkaufen zu wollen.

Mir geht es darum, Probleme, die mich täglich nerven, zu lösen.
Wenn andere davon profitieren, ist das schön, mehr aber auch nicht.

Weiterhin nerven mich Produkte, in die man keine eigene Software
einschleifen kann. Dann landet man doch wieder bei der PC-Lösung
und hätte gleich alles auf dem PC machen können.

Wandler (8x ana in + 8x ana out, brauchbarer SNR):
http://www.rme-audio.com/english/firewire/ff800.htm

Hier fehlen 8 analoge Outputs, sieht aber so aus, als wenn man digital ausgeben könnte:
http://www.m-audio.de/fw1814.htm

Geräuscharmen PC oder Backbone kann man entweder zusammenbauen
oder es scheint auch schon brauchbare Fertiglösungen zu geben.
Oder man hat den PC ohnehin nicht im Raum stehen.

Bleibt kleines Display und Fernbedienung. Das Hauptsetup kann man
mit einem VGA-Display machen. Da würden sich Bastler nicht dran stören
(mir gefällt es sogar besser, alles auf 1600 x 1200 Pixel ordentlich
angezeigt zu bekommen).
teite
Star
Star
Beiträge: 844
Registriert: Mi 8. Dez 2004, 19:08
Wohnort: Schwerin

Beitrag von teite »

Hallo Frank,
Frank Klemm hat geschrieben:Automatiken ausschalten und alle verwendeten Treiber in Extremsituationen
testen. Bei Windows NT sind durchaus <1 ms erreichbar. Probleme sind
Graphikkarten und Netzwerkkarten, manchmal USB-Treiber.
Beim Linux 2.6er Kernel hat sich ja auch schon einiges dank Kernel Preemption
und O(1)-Scheduler mit HZ=1000 getan. Zeiten in 1ms Bereich kann man da wohl
auch im "Normalfall" erreichen.
Für Audio/Video reicht "weiche" Echtzeit, moderne "normale" Betriebssyteme
verhalten sich da ausreichend gutmütig.
Hmm, sicher? Gerade Unsynchronitäten im Stereobereich fallen doch ziemlich stark auf oder nicht?
Wie hast du denn überhaupt vor, die Synchronität über alle 7.1+1-Kanäle zu realisieren?
Aber z.B. VxWorks ist für Audio/Video
völlig unbrauchbar. Das hat den Charme eines PDP-11
VxWorks kenn ich auch, allerdings eher als Anwender von Industriesteuerungen. War ne ziemliche Quälerei damit. ;)
Eine PDP-11 ist mittlerweile Kult :D, leider hab ich nie mit gearbeitet. War vor meiner Zeit.

Cu,
Stefan
Benutzeravatar
Frank Klemm
Star
Star
Beiträge: 2383
Registriert: So 22. Dez 2002, 19:59
Wohnort: Thüringen
Danksagung erhalten: 9 Mal

Beitrag von Frank Klemm »

teite hat geschrieben:Beim Linux 2.6er Kernel hat sich ja auch schon einiges dank Kernel Preemption und O(1)-Scheduler mit HZ=1000 getan. Zeiten in 1ms Bereich kann man da wohl auch im "Normalfall" erreichen.
Echtzeit wird nicht schedult.

Die Audio-Task kommt nach jedem Hardwareinterrupt der Soundkarte
dran und gibt, wenn sie nichts mehr zu tun hat, die Rechenzeit ab.
Macht z.B. ASIO so. Du bekommst z.B. bei 48 kHz alle 8 Sample ein
Interrupt (d.h. alle 166,7 µs), verarbeitest diese 8 Sample und gibst
sie über ASIO wieder aus.

Verbleibende Rechenzeit (oder verbleibende CPUs) kann man dann für Oberfläche, Graphik, Festplatte, Maus, Bedienung, Betreibssystem
benutzt werden.

Wichtig ist, daß alle Treiber sauber programmiert sind (d.h. sie dürfen
Interrupts nicht blockieren), ein Problem, was Du aber genauso bei
klassischen Echtzeit-OS hast. Du brauchst erst mal Treiber und diese
Treiber müssen echtzeitfähig sein. Und die Treiber sollen nicht 10x so
teuer wie die Hardware sein.

So eine Filtertask kann z.B. so aussehen:

double Scalar ( const float* A, const float* B, size_t len ) ;

static float FIR [1024] ; // FIR-Filter, max. Länge 1016
static float past [2] [1024] ;
unsigned int Index ;

static void __interrupt
FILTER ( void )
{
int32_t Samples [8] [2] ;
double sum ;
int i;
int j;

// Lesen
ReadSamples ( handle, Samples, 64 ) ;

// Einsortieren
for ( i = 0; i < 8; i++ ) {
past [0] [Index+i] = Samples [0];
past [1] [Index+i] = Samples [1];
}
Index = (Index + 8) & 1023 ;

for ( i = 0; i < 8; i++ ) {
sum = Scalar ( FIR, past[0] + index + i, 1024-index-i ) + ...
Samples [0] = float2int32 ( sum );
sum = Scalar ( FIR, past[1] + index + i, 1024-index-i ) + ...
Samples [1] = float2int32 ( sum );
}

// Write
ReadSamples ( handle, Samples, 64 ) ;
signal_IRQ (IRQ);
}

Weiterhin empfinde ich die Scheduler der üblichen Betriebssysteme
ziemlich altertümlich. Egal, ob HZ=60, 100, 1000 oder 1024 ist.
Solche festen Zeitslots sind Stand der 70er Jahre. Man benötigt
Scheduler mit variablen Zeitslots. Mit diesen lassen sich
Timinggenauigkeiten von ca. 0,84 µs erreichen (PC-Architektur),
gleichzeitig hat man nicht das Trade-Of-Problem zwischen
Genauigkeit und CPU-Zeit-Verlust durch das Betriebssystem.

Du verwaltest einen Baum, wann wer geweckt werden will und
weckst jeden Prozeß exakt zu der Zeit.

Für Audio/Video reicht "weiche" Echtzeit, moderne "normale" Betriebssysteme verhalten sich da ausreichend gutmütig.

Hmm, sicher? Gerade Unsynchronitäten im Stereobereich fallen doch ziemlich stark auf oder nicht?[/quote]
Stereokarte benutzen und nicht zwei Monokarten ;-)
Die bekommt man ohnehin nicht synchron hin.

Wie hast du denn überhaupt vor, die Synchronität über alle 7.1+1-Kanäle zu realisieren?

Eine (ordentliche) n-Kanalkarte hat nicht n getrennt zu fütternde Kanäle, sondern es gibt einen Ausgabestrom, in dem alle Kanäle gemultiplext sind.

Probleme lauern wo ganz anders. Zum Beispiel kenne ich keine
einzige Echtzeitimplementierung eines Dateisystems. Zum Beispiel
habe ich einen Dateihandle zu einer Datei, und ich möchte immer
24 Kbyte/s aus dieser Datei lesen, egal, was andere Prozesse
machen. Denn CPU-Zeit reicht nicht aus, wenn die Prozesse
keine Daten bekommen. Linux hat da z.B. sehr ernsthafte
Probleme mit FAT32. 24 kByte/s sind ein Problem selbst auf Platten,
die eigentlich 30...40 MByte/s schaffen.
Antworten