first commit
This commit is contained in:
commit
9b99ac6ba8
100
Matlab 1/script.m
Normal file
100
Matlab 1/script.m
Normal file
@ -0,0 +1,100 @@
|
||||
%% --- 1.1 Vorgegebene Parameter ---
|
||||
f_grund = 50; % Grundfrequenz in Hz
|
||||
T = 1 / f_grund; % Periodendauer in Sekunden (20 ms)
|
||||
U_DC = 100; % DC-Versorgungsspannung in V
|
||||
t_schaltpunkte = [0, 1.7e-3, 3.4e-3, 8.3e-3, 10.0e-3, 11.7e-3, 13.4e-3, 18.3e-3, T];
|
||||
U_out = [0, U_DC/2, U_DC, U_DC/2, 0, -U_DC/2, -U_DC, -U_DC/2];
|
||||
|
||||
%% --- 1.2 Periodisches Signal über 40 Perioden erstellen ---
|
||||
% (Rationaler Ansatz: Vektorisierte Operation)
|
||||
Anzahl_Perioden = 40;
|
||||
T_total = Anzahl_Perioden * T;
|
||||
|
||||
% Hohe Abtastfrequenz für genaue Auflösung der Schaltflanken
|
||||
fs = 1e6; % 1 MHz Abtastfrequenz
|
||||
ts = 1 / fs;
|
||||
t = 0:ts:(T_total - ts);
|
||||
|
||||
% Vektorisierte Signalerzeugung
|
||||
t_mod = mod(t, T);
|
||||
y = interp1(t_schaltpunkte(1:end-1), U_out, t_mod, 'previous', U_out(end));
|
||||
|
||||
% --- WICHTIG: DC-Anteil entfernen ---
|
||||
% Der THD bezieht sich auf die AC-Komponenten.
|
||||
% Ein DC-Anteil (bei 0 Hz) würde die FFT verfälschen.
|
||||
y = y - mean(y);
|
||||
|
||||
%% --- 2. THD-Berechnung (Standard-MATLAB via FFT) ---
|
||||
% (Analytischer Ansatz)
|
||||
|
||||
fprintf('Berechne THD manuell mittels FFT...\n');
|
||||
|
||||
% 2.1 FFT durchführen
|
||||
L = length(y); % Länge des Signals (Anzahl Abtastpunkte)
|
||||
Y = fft(y); % FFT des Signals berechnen
|
||||
|
||||
% 2.2 Einseitiges Amplitudenspektrum berechnen
|
||||
% Wir brauchen die Amplituden, nicht die komplexen FFT-Werte
|
||||
P2 = abs(Y/L); % Zweitseitiges Spektrum (normiert auf Länge)
|
||||
P1 = P2(1:floor(L/2)+1); % Einseitiges Spektrum
|
||||
P1(2:end-1) = 2*P1(2:end-1); % Amplituden verdoppeln (außer DC und Nyquist)
|
||||
|
||||
% 2.3 Frequenzvektor erstellen
|
||||
f_vec = fs*(0:floor(L/2))/L;
|
||||
|
||||
% 2.4 Frequenzauflösung (Delta-F) der FFT
|
||||
% Da wir exakt 40 Perioden (0.8s) bei 1MHz Fs analysieren, ist L = 800000
|
||||
% delta_f = fs / L = 1e6 / 800000 = 1.25 Hz
|
||||
delta_f = fs / L;
|
||||
|
||||
% 2.5 Amplituden der Harmonischen extrahieren
|
||||
% Wir definieren, wie viele Harmonische wir betrachten (z.B. N=50 -> 2.5 kHz)
|
||||
N_Harmonische = 50;
|
||||
V_amplituden = zeros(1, N_Harmonische);
|
||||
|
||||
for k = 1:N_Harmonische
|
||||
f_k = k * f_grund; % Frequenz der k-ten Harmonischen (50, 100, 150...)
|
||||
|
||||
% Finde den exakten Index (Bin) im Frequenzvektor
|
||||
% +1, da MATLAB 1-indiziert ist und f_vec(1) = 0 Hz (DC)
|
||||
idx_k = round(f_k / delta_f) + 1;
|
||||
|
||||
% Prüfen, ob der Index im Spektrum liegt (Schutz vor Nyquist-Grenze)
|
||||
if idx_k <= length(P1)
|
||||
V_amplituden(k) = P1(idx_k);
|
||||
else
|
||||
% Falls f_k > fs/2, brich ab
|
||||
break;
|
||||
end
|
||||
end
|
||||
|
||||
% 2.6 THD berechnen
|
||||
V_grund = V_amplituden(1); % Amplitude der Grundschwingung (V1)
|
||||
|
||||
% Summe der quadrierten Amplituden der Oberschwingungen (V2, V3, ...)
|
||||
P_harm_sum = sum( V_amplituden(2:end).^2 );
|
||||
|
||||
% THD-Formel anwenden
|
||||
V_harm_rms = sqrt(P_harm_sum);
|
||||
thd_linear = V_harm_rms / V_grund;
|
||||
|
||||
% Umrechnung in Prozent und dB
|
||||
thd_prozent = thd_linear * 100;
|
||||
thd_dB = 20 * log10(thd_linear);
|
||||
|
||||
fprintf('----------------------------------------------\n');
|
||||
fprintf('MANUELLE BERECHNUNG (Standard-FFT):\n');
|
||||
fprintf('Grundschwingung (V1 bei %.1f Hz): %.2f V\n', f_grund, V_grund);
|
||||
fprintf('RMS der Oberschwingungen (V2-V%d): %.2f V\n', N_Harmonische, V_harm_rms);
|
||||
fprintf('Total Harmonic Distortion (THD) (in %%): %.2f %%\n', thd_prozent);
|
||||
fprintf('Total Harmonic Distortion (THD) (in dB): %.2f dB\n', thd_dB);
|
||||
fprintf('----------------------------------------------\n');
|
||||
THD=thd_prozent;
|
||||
%% --- 3. Optionale Visualisierung (zur Überprüfung) ---
|
||||
figure;
|
||||
stem(f_vec(1:idx_k), P1(1:idx_k)); % Zeige Spektrum bis zur N-ten Harmonischen
|
||||
title('Einseitiges Amplitudenspektrum (Standard-FFT)');
|
||||
xlabel('Frequenz (Hz)');
|
||||
ylabel('Spannung (V)');
|
||||
xlim([0, f_vec(idx_k) + f_grund]); % Etwas über die letzte Harmonische hinaus zoomen
|
||||
grid on;
|
||||
Loading…
Reference in New Issue
Block a user