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

Testsignal erzeugen /Multisinus

 

Transfunktionator
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.06.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 30.06.2010, 08:32     Titel: Testsignal erzeugen /Multisinus
  Antworten mit Zitat      
Grüße und guten Morgen,

ich hab ein Problem. Ich brauche eine Multisinus Testsignal für eine Messung mit meinem selbstgebauten Messsystems. Ich bräuchte einen Multisinuns der bei 32Hz beginn und in 32Hz Schritten bis zu 16kHz geht und dann möglichst gleiche Pegel erzeugt (CREST-Faktor sollte auch klein sein) . Ich habe versucht mir ein passendes Zeitsignal als Wave-Datei in MATLAB zu erzeugen. Für die tiefen Frequenzen läuft mein Programm ganz gut, jedoch macht es in höheren Frequenzen 64Hz Sprünge und der Pegel sinkt bei hohen f. Sieht einer von Euch meinen Fehler für die 64Hz Sprünge. Oder kennt einer eine besser Möglichkeit zur Erzeugung eines solchen Signal? Besten Dank!
Code:

clear;
close;
fa = 44100;          
T = 1/fa;            
l = 2;              
N = fa*l;            
f1 =0;    
t = 0:1/fa:1/fa*(N-1) ;
Y = 1:1:length(t);
h=length(t)/(log(1000)+1);
hh=length(t)/(log(1000)+1);
k=32;
n=1;
a=1;
for t1=1:1:length(t)
    if t1>=h
        n=n+1;
        k=k+32;
        a=a+0.02;
        if k>16000
            Y2 = Y(1 t1-1));
            break;
        end
        h=h+hh/n;
    end
    Y(t1)=(a)*sin(2*pi*t(t1)*k);
end;
Y=Y2;
t2=t(1:length(Y));
t=t2;
subplot(2,1,1);
plot(t,Y),axis([0 2*l -5 5]),
 title('Signal im Zeitbereich'),
 xlabel('Zeit / s'),
 ylabel('Abtastwert'),
 grid,
 zoom on;
 
S = fft(Y,N);          
Sabs = abs(S);          
 
f = 0:fa /(N-1):fa ;    
 
subplot(2,1,2);
plot(f,(Sabs)),              
semilogy(f,Sabs),
 title('Signal im Frequenzbereich'),
 xlabel('Frequenz / Hz'),
 ylabel('Amplitude'),
 grid,
 zoom on;

 fn  = 'c:\MATLAB7\work\ Kamm.wav';  

wavwrite(Y,fa,32,fn);
 
Private Nachricht senden Benutzer-Profile anzeigen


Lord nibbler

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.06.2010, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

Mir fallen zwei Dinge ein:

1. gibt es in Matlab eine chirp.mat in der ein Sinussweep abgelegt ist.
2. Es gibt ein Simulink Source-Block Chirp Signal, der ebenfalls ein solches Signal erzeugt. Du könntest ihn ja in Simulink aufnehmen und als mat-File abspeichern. Ob das deine Ansprüche erfüllt kann ich nicht sagen.

Gruß
Lord nibbler
 
Transfunktionator
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.06.10
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 30.06.2010, 10:35     Titel:
  Antworten mit Zitat      
Danke für den Input. Hatte mir in vorherigen Versuchen selber einen Chirp gebastelt. Es darf aus Vergleichbarkeitsgründen zu älteren Messungen aber kein sweep/chirp sein. Es muss wieder die 32Hz Schritte besitzen und an das alte Signal komm ich leider nicht ran.
Hatte aber noch eine Idee bei der es leider an der Umsetzung hapert es.
Ich hab mir im Frequenzspekt. mein Wunschsignal zusammen gebastelt und würde das gerne in ein Zeitsignal zurückführen. Es kommt aber nix gutes dabei rum. Hat das schonmal jemand sowas gemacht oder wird das nicht gehen? (ps. das Zeitsignal sollte ca. 2Sek lang sein).
Code:

clear;
close;
fa = 44100;           %Abtastfrequenz
T = 1/fa;             %Periodendauer
l = 2;               %Länge des erzeugten Signal
N = fa*l;             %Anzahl der Werte
 
f = 0:0.1:16000;
S = 1:1:length(f);
 
A = 0.1;    %Amplitute der Spitze
n = 100;     %Breite der Dreiecksfunktion
for i=1:length(f)
    S(i)=0;
end;
for i=1:length(f)
    if floor(f(i)/32) == f(i)/32
        if i-n>0 && i+n<length(f)
            for j=(i-n)i+n)
                S(j) = S(j) + A - abs(f(i)-f(j))*A/(f(i)-f(i-n));
            end;
        end;
    end;
end;
 

Y = fft(S,2*N);
length(Y)
Y = Y(ceil(length(Y)/2):length(Y));
length(Y)
t=01/44100):l;
length(t)
Y = Y(1:length(t));
length(Y)
 
subplot(2,1,1);
semilogy(f,S),
  title('Signal im Frequenzbereich'),
  xlabel('Frequenz / Hz'),
  ylabel('Amplitude'),
  grid,
  zoom on;
 
 
  subplot(2,1,2);
plot(t,Y),
  title('Signal im Zeitbereich'),
  axis([0 2 -40 40]),
  xlabel('Frequenz / Hz'),
  ylabel('Amplitude'),
  grid,
  zoom on;
 
 
  fn  = 'c:\MATLAB7\work\NEUNEU.wav';  %Quellen-File benennen (chirp.wav mit fa = 44100Hz)
wavwrite(Y,fa,32,fn);
 
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.