Verfasst am: 15.01.2011, 16:43
Titel: Amplitude in einem Saegezahnsignal stimmt nicht
Hallo,
Ich sitze jetzt schon seit Tagen an dieser kleinen Funktion, die ein logarythmisch abklingendes Saegezahnsignal erzeugt.
Sie macht mir ein Problem:
Wenn ich eine Amplitude von 1 eingebe kommt eine von 0,irgendwas heraus, eine Amplitude von 2 ergibt genau eine Amplitude von 1 und eine Amplitude von 3 ergibt eine von 9. Nach meinem Verständnis sollte, wenn ich eine Amplitude von 1 eingebe auch eine von 1 herauskommen.
Die Formel zur Fouriertransformation wurde mir vorgegeben und da ich letztes Semester nicht sehr fleißig war steige ich da auch nicht durch, vielleicht sieht ja einer von euch wo der Fehler liegt.
Wenn jemand einen Tip hat wäre ich wirklich dankbar.
Code:
function saegezahnhannes(A,f,f_s,s,a)
%Saegezahn erzeugen,uebergebe Amplitude,Frequenz,Samplerate,Dauer,Fouriekomponentenanzahl
%A=input('Geben Sie eine Amplitude ein');
%f=input('Geben Sie eine Frequenz ein') ; %Frequenz
%f_s=input ; %Abtastfrequenz
%s=input('Geben Sie die Dauer des Signales in Sekunden ein'); % Dauer in Sekunden
%a=input('Geben Sie die Anzahl der Fouriekomponenten ein');
t=(0:f_s^-1:s)'; %x Achse von 0 bis s in f_s^-1 Schritten
n=1; %Zaehler in der For-Schleife
argument = nargin ; %definiert anzahl der eingegebenen argumente
aa = 0 ;
ff = f ;
Obergrenze = (f_s/2)+1 ; %maximale Frequenzhöhe
if(argument==4); % verzweigung wenn nur 4 argumente eingegeben wurden while(ff < Obergrenze);
aa = aa+1 ; % aa wird solange mit 1 addiert bis die jeweils verdoppelte freq. die Obergrenze erreicht.
ff = 2*ff;
end
a = aa ; %aa wird zu a gemacht also die anzahl der Fouriekomponenten
end
y=zeros(a,f_s^-1); % Matrix zum speichern der Sinusschwingungen.
n=n+1;
end
signal_a=sum(y); % alle Spalten der a-zeiligen Matrix werden addiert.
dd = logspace(0,-3,(f_s*s+1)); %erzeugt einen vektor in der größe des signals mit werten zwischen 0 und A
signal = (signal_a.*dd); %multipliziert das signal mit dd um es ausfaden zu lassen
disp(sprintf('Sie sehen ein Rechteckssignal der Frequenz %f',f));
disp(sprintf('dargestellt mit %f Sinusschwingungen',a));
disp(sprintf('im Zeit Intervall von 0 bis %f Sekunden',s));
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
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.