Forum: Digitale Signalverarbeitung / DSP / Machine Learning fft eines Rechteckimpuls


von dsp_noob (Gast)


Lesenswert?

Hallo,
ich möchte einen Rechteckimpuls mithilfe der FastFourierTransformation 
das spektrum dieses Signals darstellen.

1. Erstellen eines Rechteckimpuls (dafür habe ich eine Funktion 
geschrieben, welche mir einen Signalvektor zurückgibt der länge N 
zurückgibt und ab K beginnt der impuls und hält ganze M abtastwerte den 
impuls auf 1)
y = rechteckimpuls(K,M,N)

Code:

function y = rechteckimpuls(K,M,N)

if K + M > N
    y = [zeros(1,K) ones(1,N-K)];

else
    y = [zeros(1,K),ones(1,M),zeros(1,N-(K+M))];

end
end





Nun habe ich ein Skript geschrieben in der ich das Signal 
rechteckimpuls(100,50,4000) mit fft() transformiere und das 
betragsspektrum darstellen möchte , x-achse soll frequenzwerte anzeigen. 
Wie komme ich auf diese Werte.

Mir fehlt doch die Abtastfrequenz dafür.

In der Aufgabenstellung steht das Signalvektor Länge N hat und normierte 
Zeit t_n=0:N-1.



Mein Code bisher:


Code:


r_imp = rechteckimpuls(100,50,4000);

r_fft = fft(r_imp);
r_ifft = ifft(r_fft);

bin_vals = [0 : length(r_imp)-1];



subplot(2,4,1)
plot(bin_vals,r_imp)
title('Ausgangssignal');
xlabel('Zeit')
ylabel('Impulshöhe')

subplot(2,4,2)
plot(bin_vals,abs(r_fft))
title('Spektrum des Signals in Betragsdarstellung');
xlabel('Frequenz(in bins)')
ylabel('Betrag')

subplot(2,4,3)
plot(bin_vals,angle(r_fft))
title('Spektrum des Signals in Winkeldarstellung');
xlabel('Frequenz')
ylabel('Winkelgröße')

subplot(2,4,4)
plot(bin_vals,r_ifft)
title('Zurückgewonnenes Signal');
xlabel('Zeit')
ylabel('Impulshöhe')

von Gerhard Z. (germel)


Lesenswert?

dsp_noob schrieb:
> In der Aufgabenstellung steht das Signalvektor Länge N hat und normierte
> Zeit t_n=0:N-1.

Mit einer normierten Zeitachse bekommst du auch nur eine normierte 
Frequenzachse. Wie schon in deinem anderen Thread geschrieben ist die 
Frequenzschrittweite der transformierten Funktion 1/T mit T die Zeit der 
N eingelesenen Werte.

Nehmen wir an deine Samplingfrequenz wäre SF, dann ist deine Einlesezeit

T = N/SF

also ist

1/T = SF/N

SF/N ist also der Abstand deiner Frequenzlinien, SF/2 der Wert für das 
N-te Array-Element (da du N/2 Frequenzwerte bekommst), evtl. genauer
(N-1)/(2N)*SF; für jede feste SF kannst du sofort den Wert ausrechnen, 
solange aber die Abtastfrequenz unbekannt ist bleibt auch deine 
Frequenzachse natürlich nicht näher bestimmbar.

Gerhard

von nachtmix (Gast)


Lesenswert?

dsp_noob schrieb:
> möchte einen Rechteckimpuls mithilfe der FastFourierTransformation
> das spektrum dieses Signals darstellen.

Wozu?
Das Spektrum von Rechteckimpulsen ist bekannt.

von Dirk B. (dirkb2)


Lesenswert?

dsp_noob schrieb:
> möchte , x-achse soll frequenzwerte anzeigen.
> Wie komme ich auf diese Werte.

Die Abtastfrequenz musst du doch kennen.
Es ist dein Experiment.

Tipp: nimm für die FFT Zeierpotenzen.
also 4096 Werte

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

Dirk B. schrieb:
> Tipp: nimm für die FFT Zeierpotenzen.

Warum? Soviel Unterschied macht das nicht.

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.