WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Verschiedene Frequenzen in eine WAV-Datei abspeichern

 

nicogtx1
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.07.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2020, 09:40     Titel: Verschiedene Frequenzen in eine WAV-Datei abspeichern
  Antworten mit Zitat      
Hallo,

ich möchte in einer Audiodatei mit dem Befehl audiowrite die Frequenzen von 1 - 20 kHz abspeichern und weiß nicht genau, wie man verschiedene Frequenzen in eine Datei abspeichert. (Die Datei soll die Frequenz langsam hochfahren und im höheren Frequenzbereich schneller variieren)
Bisher habe ich es nur hinbekommen, eine feste Frequenz abzuspeichern.

Könnt ihr mir helfen?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen


T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2020, 10:11     Titel:
  Antworten mit Zitat      
Ich vermute, du erstellst dein Audiosignal mit einem sinus


y=\sin({\omega t}) \\
<br />
\omega=2\pi f

mit einer konstanten Frequenz f. Der Trick liegt nun darin, deine konstante Frequenz f durch eine Funktion von t zu ersetzen, beispielsweise durch einen linearen Anstieg über t.

f(t)=f_{start}+m_f t

Einsetzen in die Formel für omega und dann Einsetzen in die Gleichung für y sollte das gewünschte Ergebnis liefern.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.07.2020, 10:13     Titel: Re: Verschiedene Frequenzen in eine WAV-Datei abspeichern
  Antworten mit Zitat      
Hallo nicogtx1,

Eine "Frequenz" ist eine Zahl. Was bedeutet dann "eine Frequenz abspeichern"? Es gibt unendlich viele Zahlen zwischen 1 und 20, dann würdest du auch ein unendlich großes File erzeugen.
Zitat:
(Die Datei soll die Frequenz langsam hochfahren und im höheren Frequenzbereich schneller variieren)

Dateien fahren keine Frequenzen. Bitte erkläre genau, was du eigentlich erreichen willst.

Ich nehme an, das Abspeichern ist nicht das Problem, denn das geht mit audiowrite ja ganz einfach.
Möchtest du ein Signal erzeugen, dass zu Beginn 1kHz hat und dann im Laufe von 10 Sekunden auf 20kHz linear ansteigt?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
nicogtx1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.07.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2020, 10:41     Titel:
  Antworten mit Zitat      
Danke T16 für deine Antwort, ich werde ich gleich mal versuchen.

@Jan: Ja du hast Recht, ich möchte ein Signal erzeugen, welches über eine gewisse Zeit die Frequenz von bspw. 1 kHz bis 20 kHz ansteigen lässt.
Private Nachricht senden Benutzer-Profile anzeigen
 
nicogtx1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.07.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2020, 18:24     Titel:
  Antworten mit Zitat      
Habe das jetzt ausprobiert und festgestellt, dass am Ende die Frequenz komischerweise wieder sinkt... Woran könnte das liegen? Kann ich das auch so programmieren, sodass am Anfang die Frequenz langsamer ansteigt als am Ende? Da ich die tiefen Frequenzen auch gerne hören möchte.

Code:

fs = 48000;
t_t = 0:1/fs:20;
f_start = 20;
f_stop = 20000;


f_t = f_start+1000.*t_t;


y = sin(2*pi.*f_t.*t_t);

figure(1),
    plot(t_t,f_t), grid on
    axis([0 20 0 20000])
    title('Frequenz-Zeit-Diagramm')
    xlabel('Zeit in Sekunden')
    ylabel('Frequenz in kHz')

audiowrite('frequenzspektrum.wav',y,fs);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2020, 08:56     Titel:
  Antworten mit Zitat      
Erstmal muss ich mich dafür entschuldigen dich angelogen zu haben Smile
Meine Formel oben ist nur halb richtig, die Eigenkreisfrequeunz der Sinusfunktion ist nämlich nicht zwangsweise das omega vor dem t, sondern immer die Ableitung des Arguments der Sinusfunktion nach der Zeit. Ist das omega von t abhängig wirds also etwas komplizierter.

y=sin(g(t)) \\
<br />
g(t)=\omega(t) t=\omega_{start}t+\Delta_{\omega}t^2 \\
<br />
\frac{\partial g(t)}{\partial t}= \omega_{start}+2t\Delta_{\omega}

Die Eigenkreisfrequenz deines Signals ist daher am Ende wesentlich höher als geplant. Sie fällt auch nicht ab, was du da hörst ist eine Konsequenz des Nyquist-Abtasttheorems: Die Samplefrequenz muss mindestens doppelt so hoch sein wie deine maximale Frequenz, da deine maximale Frequenz aber wesentlich höher ist als geplant, ist deine Samplefrequenz jetzt zu niedrig und kann die hohen Frequenzen nicht mehr abbilden.

Eine gute Methode um deine Frequenzen auszuwerten ist das Erstellen eines Spektrogramms oder einer Continous Wavelet Transformation cwt(y,fs). Da siehst du genau den Frequenzverlauf deines Signals über die Zeit. (cwt kann allerdings je nach Signallänge etwas dauern.) und kannst sofort erkennen ob deine maximale Frequenz stimmt. Wenn der Strahl im Spektrogramm am oberen Ende reflektiert, ist das Abtasttheorem verletzt, siehe Bild im Anahng.

Dass deine Frequenz am Anfang weniger stark ansteigt, kannst du über eine quadratische Funktion erreichen, dann musst du allerdings noch mehr mit der Ableitung aufpassen.

Unbenannt.JPG
 Beschreibung:

Download
 Dateiname:  Unbenannt.JPG
 Dateigröße:  28.28 KB
 Heruntergeladen:  156 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
nicogtx1
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 09.07.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2020, 11:19     Titel:
  Antworten mit Zitat      
Habe gerade leider nicht die entsprechende Toolbox auf dem Rechner, muss ich mir noch installieren...

Ich habe das jetzt mal so implementiert, ist dies den prinzipiell richtig?

Code:

fs = 96000;
t = 0:1/fs:20;
f_start = 20;
f_stop = 20000;

g = 2*pi*f_start + 2*pi*100.*t;
y = sin(g.*t);

figure(1),
    spectrogram(y)


audiowrite('frequenzspektrum.wav',y,fs);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2020, 12:13     Titel:
  Antworten mit Zitat      
Deine Frequenz ist nach wie vor noch höher als f_stop. Versuch es mal hiermit:

Code:
fs = 96000;
t = 0:1/fs:2;
f_start = 20;
f_stop = 20000;

g = 2*pi*(f_start*t+.5*(f_stop-f_start)/(t(end))*t.^2);
y = sin(g);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.