Forum: Digitale Signalverarbeitung / DSP / Machine Learning Audio Datei aus I2S-Daten erstellen


von Burkhard K. (buks)


Lesenswert?

Wie bekommme ich aus gespeicherten Rohdaten im I²S Format (2 Kanäle á 16 
Bit, signed, left justified) eine abspielbare Audio-Datei?

Lassen sich unkompromierten Daten in einem Container (.ogg?) verpacken? 
Oder geht es nicht ohne Codec wie FLAC oder Vorbis? Gibt es evtl. 
passende Pakete für Octave oder SciLab?

von Hans (Gast)


Lesenswert?

Du kannst einfach ein WAV-File daraus machen. Das File-Format ist 
ziemlich einfach. Es besteht nur aus einem Header und dann den Rohdaten. 
Es gibt 8- und 16-bit, sowie Mono und Stereo. Bei Bedarf kannst Du das 
Wav-File mit einem beliebigen Kodierer in MP3 oder OGG wandeln.

BTW: Ich nehme an, es geht um dein Ultraschallprojekt. Welches Mikrophon 
verwendest du?

von Hans (Gast)


Lesenswert?


von c-hater (Gast)


Lesenswert?

Hans schrieb:

> Du kannst einfach ein WAV-File daraus machen. Das File-Format ist
> ziemlich einfach. Es besteht nur aus einem Header und dann den Rohdaten.
> Es gibt 8- und 16-bit, sowie Mono und Stereo. Bei Bedarf kannst Du das
> Wav-File mit einem beliebigen Kodierer in MP3 oder OGG wandeln.

Das ist so nicht ganz richtig dargestellt. Was du hier beschreibst, ist 
PCM-Wav, also ein Spezialfall von Wav für unkomprimierte Daten. 
Sozusagen der historische Urgrund des Wav-Formats. So aber natürlich 
genau passend für das Problem des TO.

Man sollte aber auch erwähnen, dass Winzigweich schon damals im letzten 
Jahrtausend viel weitsichtiger war als viele OSS-Projekte es heute sind 
und eine Art Escape von den trivialen PCM-Daten von Anfang an vorgesehen 
hat, die FCC-ID.

D.h.: Ein Wav-Container kann im Prinzip jedes Audiozeugs beinhalten, 
auch das, was heute "High-End" ist. Theoretisch muss dazu nur die FCC-ID 
bei Microsoft registriert werden, damit es auch formal "offiziell" wird. 
Keine Ahnung, ob das entsprechende Registrierungsverfahren heute 
überhaupt noch existiert...

Aber egal, Fakt ist jedenfalls, dass es etliche offiziell registrierte 
FCC-IDs tatsächlich gibt, die eben NICHT PCM-Wav sind. Das sollte man 
beim Programmieren immer im Hinterkopf haben, wenn man mit Wav-Dateien 
hantiert...

von Burkhard K. (buks)


Lesenswert?

Hans schrieb:
> Welches Mikrophon
> verwendest du?

Knowles FG-23629 Elektret mit selbstgebauten Verstärker zur 
Frequenzganganpassung.

Hans schrieb:
> Octave: wavwrite

wavwrite und wavread kennt meine 5.1 Installation nicht, dafür 
audiowrite und audioread, die können auch WAV-Format. Danke.

von J. S. (engineer) Benutzerseite


Lesenswert?

Ich würde einen I2S-Core in ModelSIM einladen und per file write 
speichern.

Mit C müsste es auch leicht zu machen sein. I2S(nach SPEC) enthält 
uncodierte signed Daten in PCM.
Du musst nur schauen, wie es mit den Rohdaten aussieht und diese 
gespeichert wurden. U.U. gibt es einen offset gegenüber dem WS.

von GEKU (Gast)


Lesenswert?

Burkhard K. schrieb:
> ie bekommme ich aus gespeicherten Rohdaten im I²S Format (2 Kanäle á 16
> Bit, signed, left justified) eine abspielbare Audio-Datei?

Mit Audacity Datei/Importieren/Rohdaten

https://www.audacityteam.org/download/

von IFF (Gast)


Lesenswert?

c-hater schrieb:

> Man sollte aber auch erwähnen, dass Winzigweich schon damals im letzten

Es war Electronic Arts..

von Analogmann (Gast)


Lesenswert?

GEKU schrieb:
> Mit Audacity Datei/Importieren/Rohdaten

Mein Audacity kann keine I2S-Daten importieren. Rohdaten im CSV-Format 
geht. Das ist aber etwas anderes.

von Burkhard K. (buks)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die Tipps und Hinweise.

Bis ich die Rohdaten habe, muss ich noch etwas basteln. Bis dahin eine 
kleine Spielerei mit Downchirps (hyperbolisch vs. exponentiell) in 
Octave.

von Hans (Gast)


Lesenswert?

Es ist besser, wenn Du ein Semikolon an die Zeilenenden machst, sonst 
läuft dein Output über.

Mit sound(sig,fab) kann man das Signal hörbar machen.
1
fab=19200;
2
3
t = [0:0.001:10.239];
4
figure(1);
5
plot(t,((32-e)*e.**(-t))+e+40,t,(16./(t+0.5))+40);
6
hchidx = (16./(t+0.5)).+40;
7
hchirp = cos(hchidx.*(2*pi).*t);
8
echidx = ((32-e)*e.**(-t))+e+40;
9
echirp = cos(echidx.*(2*pi).*t);
10
11
figure(2);
12
plot(t,echirp, t,hchirp);
13
14
audiowrite('eh_chirp.wav', transpose([hchirp;echirp]), fab, 'BitsPerSample', 16);
15
16
figure(3);
17
plot(t,echirp.-hchirp, t,hchirp.-echirp);
18
audiowrite('ehdelta_chirp.wav', transpose([hchirp-echirp;echirp-hchirp]), fab, 'BitsPerSample', 16);
19
20
sound(echirp,fab);

von GEKU (Gast)


Lesenswert?

Analogmann schrieb:
> Mein Audacity kann keine I2S-Daten importieren

Audacity kann neben Textdatei (CSV)  auch "Binäre Dateien" importieren.

von Hein (Gast)


Lesenswert?

Wo ich das gerade lese:

GEKU schrieb:
> Audacity kann neben Textdatei (CSV)  auch "Binäre Dateien" importieren.

Wie muss das Format aufgebaut sein? In der Audacity Doku ist kein 
Hinweis oder Beispiel dafür.

(Bäuchte einen einfachen Analogdatenabspieler)

von c-hater (Gast)


Angehängte Dateien:

Lesenswert?

Hein schrieb:

> Wie muss das Format aufgebaut sein?

Dafür gibt es viele Möglichkeiten, aus denen du beim Import frei wählen 
kannst.

Siehe Anhänge...

von c-hater (Gast)


Lesenswert?

IFF schrieb:

> Es war Electronic Arts..

Nö, von denen stammte nur das Grundgerüst des Containers. Die konkrete 
Ausprägung der Fileformate stammt von den jeweiligen Lizenznehmern. Im 
Falle von Wav, Anim und Avi halt von Microsoft.

von Burkhard K. (buks)


Lesenswert?

c-hater schrieb:
> aus denen du beim Import frei wählen
> kannst.

... und musst. Bisher habe ich keine Möglichkeit gefunden, eine 
Defaulteinstellung für den Import vorzugeben. Die Samplingrate ist zwar 
frei wählbar, aber trotzdem steht in der Maske immer 44100Hz. Da ich mit 
50kHz oder 100kHz arbeite, muss ich dieses Feld bei jedem Import neu 
anfassen.

: Bearbeitet durch User
von Hans (Gast)


Lesenswert?

Warum machst Du nicht einfach alles in Octave?

.. wavread ... o.ä.

von J. S. (engineer) Benutzerseite


Lesenswert?

Hans schrieb:
> .. wavread ... o.ä.

Weil der TE (angeblich) einen I2S-Datenstrom hat und der ist nicht so 
direkt zu importieren.

von Tobias (. (Gast)


Lesenswert?

c-hater schrieb:
> Dafür gibt es viele Möglichkeiten, aus denen du beim Import frei wählen
> kannst.

Kann der auch ASCII lesen?

Ich hatte das auch bereits einmal probiert, komme aber nicht weiter. Hat 
wer mal ein Beispiel für ein konkretes Datenformat oder Rohdatenfile und 
der dazu passenden Einstellung des Importfilters?

Ich hätte gerne so etwas als WAV:

4564, 2342
2344,  123
... , ...

also zweireihig direkt aus Excel, gfs mit Semikolon, wenn sein muss.

von c-hater (Gast)


Lesenswert?

Tobias N. schrieb:

> Kann der auch ASCII lesen?

Nein.

> Ich hätte gerne so etwas als WAV:
>
> 4564, 2342
> 2344,  123
> ... , ...
>
> also zweireihig direkt aus Excel, gfs mit Semikolon, wenn sein muss.

Dann musst du es aus Excel halt im Binärformat exportieren. Dazu sind 
nur sehr wenige Zeilen VBA-Code nötig. Ungefähr 5...

Mit ein paar Zeilen mehr könnte man dann allerdings auch gleich direkt 
aus Excel ein *.wav speichern...

Man muss halt einfach nur generell programmieren können und die VBA-Doku 
lesen.

von Burkhard K. (buks)


Lesenswert?

Jürgen S. schrieb:
> Weil der TE (angeblich) einen I2S-Datenstrom hat und der ist nicht so
> direkt zu importieren.

Warum "(angeblich)"? Ich schreibe tatsächlich den Datenstrom an den 
Codec 1:1 mit.

Soweit ich sehe, besteht Octave's audioread() auf einem Container, 
Audacity importiert auch Rohdaten.

Import mit fread() ginge sicher - aber das Handling in Audacity (z.B. 
beim Zuschneiden) ist deutlicher einfacher.

von Hans (Gast)


Lesenswert?

>Soweit ich sehe, besteht Octave's audioread() auf einem Container,
>Audacity importiert auch Rohdaten.

Du musst ja nicht audioread(...) nehmen. Mit fread(...) kann man ja 
beliebige Binärdaten lesen, also auch Deine I2S Daten:
https://octave.org/doc/v4.2.1/Binary-I_002fO.html

von Tobias (. (Gast)


Lesenswert?

c-hater schrieb:
> Mit ein paar Zeilen mehr könnte man dann allerdings auch gleich direkt
> aus Excel ein *.wav speichern...
>
> Man muss halt einfach nur generell programmieren können und die VBA-Doku
> lesen.

Wenn man es programmieren muss, braucht es auch das VBA nicht. Ich bezog 
mich auf den scheinbar ein fachen Vorschlag von oben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.