Datei:Tastgrad-Spektrum.ogv
Aus testwiki
Zur Navigation springen
Zur Suche springen
Tastgrad-Spektrum.ogv (Dateigröße: 2,39 MB, MIME-Typ: application/ogg)
Diese Datei stammt aus Wikimedia Commons und kann von anderen Projekten verwendet werden. Die Beschreibung von deren Dateibeschreibungsseite wird unten angezeigt.
Beschreibung
| BeschreibungTastgrad-Spektrum.ogv |
Deutsch: Spektrum in Abhängigkeit vom Tastgrad. |
| Datum | |
| Quelle | Eigenes Werk |
| Urheber | Mik81 |
| Andere Versionen |
|
Lizenz
Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
| Diese Datei wird unter der Creative-Commons-Lizenz CC0 1.0 Verzicht auf das Copyright zur Verfügung gestellt. | |
| Die Person, die das Werk mit diesem Dokument verbunden hat, übergibt dieses weltweit der Gemeinfreiheit, indem sie alle Urheberrechte und damit verbundenen weiteren Rechte – im Rahmen der jeweils geltenden gesetzlichen Bestimmungen – aufgibt. Das Werk kann – selbst für kommerzielle Zwecke – kopiert, modifiziert und weiterverteilt werden, ohne hierfür um Erlaubnis bitten zu müssen.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
Source code
#! /bin/octave
% GNU Octave / MATLAB
% Benutzer:mik81 @ de.wikipedia.org
%
%
% Große Frage:
% Welche "amplitude" haben die Spektren?
%
%
%
% Ermittle Signalform
%
function [square, realDutycycle] = waveform(dutycycle)
global periods;
global stepsPerPeriod;
realDutycycle = 0;
steps = periods*stepsPerPeriod;
for period=0:1:periods-1
for step=0:1:stepsPerPeriod-1
if ( step >= dutycycle *stepsPerPeriod)
square = [square, 0.];
if ( realDutycycle == 0)
realDutycycle = step/stepsPerPeriod
dutycycle
endif
else
if (period == 0 && step == 0)
square = [+1.];
else
square = [square, +1.];
endif
endif
endfor
endfor
dutycycleString = sprintf("%0.3f", dutycycle);
plot((0:1:steps/(0.25*periods)-1)/stepsPerPeriod
, square(1,1:steps/(0.25*periods)), [";Tastgrad: " , dutycycleString, ";"], "linewidth", 2);
axis ([0, 0.25*periods, -0.2, +1.2]);
axis ("nolabel");
axis("labely", "ticxy");
% xlabel ("");
set(gca(), "linewidth", 1.5);
endfunction
%
% Berechne Spektrum
%
function [dft, envelop] = spektrum(square, realDutycycle)
global periods;
global stepsPerPeriod;
global timebase;
steps = periods*stepsPerPeriod;
freqSteps = steps/2;
%
% Frequenz = freq*Samplerate*steps
% n * Fenster
for freq=0:1:freqSteps
pad = square .* sin(freq*2*pi*timebase/length(timebase));
dft(1, freq+1) = sum( pad(1,:) );
pad = square .* cos(freq*2*pi*timebase/length(timebase));
% cos^2 + sin^2
dft( 1, freq+1) = dft(1, freq+1)^2 + sum( pad(1,:) )^2;
endfor
dft = sqrt(dft);
dft = dft/(periods*stepsPerPeriod);
temp = 1/30; % gib nen sinnvollen Namen
envelop = dft(1,1) * abs(sinc((0:temp:freqSteps)*realDutycycle));
if(realDutycycle > 0.5)
envelop2 = (1-dft(1,1)) * abs(sinc((0:temp:freqSteps)*(1-realDutycycle)));
endif
dftSelected = [dft(1,1)];
for selected=periods+1:periods:freqSteps+1
dftSelected = [dftSelected, dft(1,selected)];
endfor
dft = dftSelected;
plot([0, (periods+1:periods:freqSteps+1)/periods-1/periods], dft(1, :), "or;Spektallinien;", "linewidth", 1.5);
hold("on");
h = stem([0, (periods+1:periods:freqSteps+1)/periods-1/periods], dft(1, :), "r");
set(h, "linewidth", 1.5);
if(exist("envelop2", "var") != 1)
plot((0:temp:freqSteps), envelop, ";Einhuellende;", "linewidth", 1.5);
else
plot((0:temp:freqSteps), envelop, ";Einhuellende;", "linewidth", 0.5);
plot((0:temp:freqSteps), envelop2, "g;Invertierte Einhuellende;", "linewidth", 1.5);
endif
hold("off");
axis ([0, 20, 0, 1.1]);
axis("labelxy", "ticxy", "on");
xlabel ("Harmonische der Grundfrequenz");
set(gca(), "linewidth", 1.5);
%axis ("ticx");
endfunction
%
%
% M A I N
%
%
printf("mik81 @ de.wikipedia.org\n\n");
printf("Spectrum of rectengular waveform\n\n");
begin_cputime = cputime();
frames = 10; % Teilung
frames = 256; % 2^n
frames = frames-1; % Zaunpfahl
Dimensions = "-S1600,900";
global stepsPerPeriod = 512; % 2^n wegen FFT
global periods = 8; % 2^4
steps = periods*stepsPerPeriod;
global timebase = 0:1:steps-1;
size(timebase)
% dutycycle = 0.05;
mkdir("./png");
axis("labelxy", "ticxy", "on");
for count=1:1:frames % Hack: vermeide Tastgrad 1.00
close();
countString = sprintf("%03i", count);
dutycycle = count/(frames+1);
printf("\nCalculating waveform: %i\n", count);
subplot(2,3,1, "align");
[square, realDutycycle] = waveform(dutycycle);
% print(["./png/waveform", countString, ".png"], "-dpng");
%
% DFT
%
printf("Calculating DFT: %i\n", count);
subplot(1,3,2:3, "align");
[dft, envelop] = spektrum(square, realDutycycle);
print(["./png/spectrum", countString, ".png"], "-dpng", Dimensions);
endfor
printf("Total cpu time: %f seconds\n", cputime()-begin_cputime);
printf("Finished\n");
% EOF
Script
#! /bin/bash
echo "Script of mik81 @ de.wikipedia.org"
framerate=5
name="spectrum"
octave pwm.m
mkdir yuv
rm yuv/*
png2yuv -j ./png/$name%03d.png -f $framerate -I p -b 1 > ./yuv/out.yuv
rm ./$name.ogv
./ffmpeg2theora-0.29.linux32.bin ./yuv/out.yuv -F $framerate -v 9 -o ./$name.ogv;
Kurzbeschreibungen
Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
In dieser Datei abgebildete Objekte
Motiv
Einige Werte ohne einen Wikidata-Eintrag
27. Juli 2014
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
| Version vom | Maße | Benutzer | Kommentar | |
|---|---|---|---|---|
| aktuell | 14:38, 27. Jul. 2014 | (2,39 MB) | wikimediacommons>Mik81 | User created page with UploadWizard |
Dateiverwendung
Die folgende Seite verwendet diese Datei:
