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

Aneinanderreihen von Sinusfunktionen

 

ThKo26
Forum-Century

Forum-Century


Beiträge: 184
Anmeldedatum: 21.09.17
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 24.06.2020, 12:19     Titel: Aneinanderreihen von Sinusfunktionen
  Antworten mit Zitat      
Hallo zusammen,

ich möchte eine Anzahl von Sinusfunktionen einander reihen. Dabei soll es für jede frequenz vier Überhöhungen geben.

Mein Code funktioniert auch größtenteils, leider kommt es in den Übergangen zu kleinen Sprüngen (Vorallem bei höheren frequenzen)

Code:

clear; close all
pi = 3.14159265359;
%% Input
freq = 1:1:35; % Frequenzen
amp  = flip(linspace(1,60,length(freq))); % Amplitude
fs   = 1000; % Sampling frequncy in [Hz]
% END Input

%% SIM
start = 1; ende = 0; tvec = 0;

for igv = 1:length(freq)
    t = 0:1/fs:(4/freq(igv));
    tlaenge = length(t);
    tvec = t(end) + tvec;
    ende = tlaenge + ende;
    anreg = amp(igv)* sin((t)*2*pi* freq(igv));
    input(start:ende) = anreg;    
    start = start + length(t);
end
timevec = linspace(0, tvec, length(input));
figure
subplot(2,1,1);hold all
plot(timevec, input); grid on
xlabel('Time (sec)')
ylabel('Amplitude (-)')

 


Bitte um Hilfe

Danke

Viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen


T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2020, 09:40     Titel:
  Antworten mit Zitat      
Du gehst deinen ersten Sinus bis zum Ende (-> bis er wieder bei 0 ankommt) und startes dann den nächsten auch wieder bei 0. Dadurch hast du natürlich immer zwei Werte hintereinander die 0 sind, dadurch der Knick. Abhilfe schafft hier, den Sinus nicht ganz bis zum Ende auszuwerten.

Code:
t = 0:1/fs:(4/freq(igv))-1/fs;


Alternativ kannst du naütrlich auch den nächsten erst bei 1/fs starten lassen.

Einen kleinen Knick wirst du auch hier sehen, das lässt sich nicht vermeiden wenn zwei Funktionen mit unterschiedlichem Anstieg aneinandergereiht werden.

VG
auch Thomas.
Private Nachricht senden Benutzer-Profile anzeigen
 
ThKo26
Themenstarter

Forum-Century

Forum-Century


Beiträge: 184
Anmeldedatum: 21.09.17
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 25.06.2020, 10:15     Titel:
  Antworten mit Zitat      
hey Thomas,

danke für die schnelle Rückmeldung und die Verbesserung!

Von matlab gibt es keine function, dass dies 'optimaler' umsetzt?

Sobald man die FFT bilder, ist es ein sehr unsaubere Darstellung.

Code:
timevec = linspace(0, tvec, length(input));
figure
subplot(2,1,1);hold all
plot(timevec, input); grid on
xlabel('Time (sec)')
ylabel('Amplitude (-)')
yfft = fft(input, 32768);
% FREQUENZVEKTOR
fspec   = linspace(0,fs, 32768);  % Frequenzvektor

% AMPLITUDE
ampspec = (2.*abs(yfft))/length(input); % Amplitude falsche, muss length(y) sein!!
ampspec(1,1) = ampspec(1,1) / 2;    % weil bei Null die Spektrallinieen zusammengelegt werden und somit /2
ampgang = fftshift(ampspec);        % Verschieben der Elemente des Amplitudenvektors,
                                    % so dass die Darstellung des Amplitudengangs
                                    % von -fn...0...fn erfolgen kann:
                             
subplot(2,1,2);hold all
plot( fspec(1:end/2), ampspec(1:end/2)); grid on
plot( fspec(1:end/2), ampgang(end/2:end-1)); grid on
xlim([0 35])
xlabel('Frequenz (Hz)')
ylabel('Amplitude (-)')
 


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
T16
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 31.01.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2020, 10:35     Titel:
  Antworten mit Zitat      
Versuche mal die Samplefrequenz zu erhöhen, dann sollte das Ergebnis der FFT wesentlich besser aussehen. Du darfst aber auch nicht vergessen, dass die FFT gundsätzlich für periodische und unendlich lange Signale gedacht ist. Dein Signale ist durch die sich veränderlichen Amplituden und Frequenzen alles andere als periodisch. Für transiente Signale bietet sich die Short-Time-Fourier-Transformation (stft()), oder besser, die Continous Wavelet Transformation (cwt()) an. Als output gibt es hier ein Spektrogramm, damit lassen sich die Frequenzanteile und deren Amplitude über den gesamten Zeitverlauf des Signals auswerten.

Edit: Ich betone besser nochmal, dass deine FFT nicht das Resultat eines "unsauberen" Zusammenfügens der Sinusfunktionen ist, sauberer kann man sie nicht mehr zusammenfügen. Die FFT ist einfach für gewisse Signale nicht geeignet.
Private Nachricht senden Benutzer-Profile anzeigen
 
ThKo26
Themenstarter

Forum-Century

Forum-Century


Beiträge: 184
Anmeldedatum: 21.09.17
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 25.06.2020, 10:57     Titel:
  Antworten mit Zitat      
danke für die ausführliche erklärung!

ich werde mir das ganze nochmal genauer anschauen und probieren!
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.