Autor Beitrag
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Mo 07.07.03 20:09 
Hallo,

ich habe ein Prog geschreiben, dass mit WaveIn...() kleine Blöcke mit Audiodaten aufnimmt und anzeigt. Jeder Block besteht aus 512 Samples, deses Sample ein Float-Wert (0..1). Jeder Block soll auf EINEN EINZIGEN Wert reduziert werden (Augenblickswert). Ich mache das momentan so, dass ich den höchsten Wert im Block nehme, aber da kommen natürlich relativ hohe Werte raus. Wenn ich immer den Durchschnitt nehme, ist das Signal recht zappelig und bei Beats zu klein.

Also: Welchen Algo würdet ihr dazu anwenden? Mir langt ein kleiner Pseudocode, will nur ein paar Ideen sammeln.

_________________
Life is a bad adventure, but the graphic is really good!
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mo 07.07.03 20:38 
Du kannst ja mal ungefähr so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function getDurchschnitt(Block -> array[0..512of Float): Float;
var
  x: integer;
  i: integer;
  einschritt: integer;
  drschnitt: float;
begin
  x := 10;
  einschritt := 512 div x;
  drschnitt := 0;

  for i := 0 to x do
    drschnitt := drschnitt+Block[i*einschritt];
  result := drschnitt/x;
end;


Und dann mal mit x rumprobieren... Mir fällt halt grad nix besseres ein...

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Andreas Pfau Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Mo 07.07.03 20:49 
Hallo,

wenn ich das richtig verstehe, willst du also (bei X=10) nur 10 von 512 Pegeln auswerten. Habe es versucht. Sehr, schnell, wenig Fehlerrate (wenn jetzt halt zufällig nur 10 kleine Pegel erwischt werden, ist das Ergebnis halt auch kleiner als in echt). Habe mal mehr als 10 genommen, damit das ganze doch etwas genauer wird.

Und danke für deine Mitarbeit :D ! Habe schon befürchtet, bei so 'nem Topic muss ich ewig warten.

_________________
Life is a bad adventure, but the graphic is really good!
Matthias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: Di 08.07.03 17:51 
Hallo,

in der Messtechnik wird sehr häufig mit dem Median Filter gearbeitet. Das heißt, du nimmst die einen Ringpuffer mit einer x - Werten und füllst diesen z.B. mit deinen Mittelwerten oder Maximas. Aus diesen Puffer nimmst Du den Wert, der nach dem sortieren in der Mitte liegt.

Hierdurch werden z.B. Knackser oder kurze Löcher herausgefiltert.

Eine andere alternative ist es einen gleitenden Mittelwert zu berechnen.

ciao
Matthias
Andreas Pfau Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Di 08.07.03 17:55 
Hallo,

Ich weiß zwar nicht, was ein Ringpuffer ist, aber... wenn ich das richtig verstehe, soll ich alle Werte in einen Array schreiben, diesen sortieren, und danach den Wert anzeigen, der in der Mitte des Arrays liegt?

Nun, ich werde es versuchen. Mal schauen, da brauche ich eine verflucht schnelle Sortiermethode... QuickSort... ich melde mich, wenns klappt!

_________________
Life is a bad adventure, but the graphic is really good!