% Skript fft_2.m, in dem die DFT (oderFFT) für ein cosinusförmiges
% Signal ermittelt und dargestellt wird
clear
% ------- Parameter der Simulation
T0 = 2;    % Angenommene Periode der Grundwelle
           % oder das Untersuchungsintervall
N = 32;    % Anzahl der Abtastwerte in T0
Ts = T0/N; % Abtastperiode
fs = 1/Ts; % Abtastfrequenz
ampl = 10; % Amplitude des Signals
phi = pi/3;% Nullphase bezogen auf das Untersuchungsintervall
m = 40;    % Faktor der die Periode bestimmt
n = 0:N-1; % Indizes der Abtastwerte 
k = n;     % Indizes der DFT oder FFT (Bins)
% ------- Cosinusförmiges Signal
dt = T0/(m*20);      t = 0:dt:T0;   % Zeitwerte für das
xt = ampl*cos(2*pi*m*t/T0 + phi); % kontinuierliche Signal
xn = ampl*cos(2*pi*m*n/N + phi);  % Diskretisiertes Signal
% ------- DFT
Xk = fft(xn);   % DFT des Signals
betrag_Xk = abs(Xk);     phase_Xk = angle(Xk);
p = find(abs(real(Xk))<1e-8 & abs(imag(Xk))<1e-8); 
phase_Xk(p) = 0;  % Entfernen der Fehler in der Phasenberechnung
% ------- Darstellungen mit Abszissen in s bzw. Hz
figure(1);
subplot(311), stem(n*Ts, xn, 'LineWidth', 1.2);
hold on; plot(t,xt);
title(['Abtastwerte des Signals (N = ',num2str(N),';  m = ',...
    num2str(m),' > N / 2)']);
xlabel('Zeit in s');  grid on;  hold off;
axis tight;
subplot(312), stem(k*fs/N, betrag_Xk/N);
title(['Betrag der DFT/N (N= ',num2str(N),'; m = ',...
    num2str(m),' > N / 2)']);
ylabel('|DFT|/N');   grid on;   axis tight;
subplot(313), stem(k*fs/N, phase_Xk);
title(['Winkel der DFT (N= ',num2str(N),'; m = ',...
    num2str(m),' > N / 2)']);
ylabel('Rad');   grid on;  xlabel('Hz');
axis tight;

