aboutsummaryrefslogtreecommitdiff
path: root/specan.m
blob: d1d52ad25cb34660cbb3f693d72448fff760a987 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function specan(filename)
	% Spectrum analyser
	%
	% Analyse and plot the frequency spectrum of a waveform
	% given by a tab-separated value (TSV) file.
	%
	% The following column headers for the TSV are assumed:
	% time, v1, v2, v3, i1, i2, i3
	%
	% Time measurements are assumed to be in milliseconds.
	% All voltages and currents are assumed to be given
	% in Volts and Amperes, respectively.

	data = readtable(filename, FileType="text", Delimiter="\t");

	L = length(data.time);
	% Assumes data is sampled at regular intervals.
	T = 1e-3*(data.time(end)-data.time(1))/(L-1);
	fs = 1/T;
	% Frequency axis for plotting.
	f = fs/L*(0:L-1);

	Y1 = abs(fft(data.v1)/L);
	Y2 = abs(fft(data.v2)/L);
	Y3 = abs(fft(data.v3)/L);
	Y4 = abs(fft(data.i1)/L);
	Y5 = abs(fft(data.i2)/L);
	Y6 = abs(fft(data.i3)/L);

	figure(1);

	subplot(2, 1, 1);
	hold on;
	plot(f, Y1, "r", LineWidth=2);
	plot(f, Y2, "g", LineWidth=2);
	plot(f, Y3, "b", LineWidth=2);
	title("Frequency Spectrum of Voltage Measurements");
	xlim([0 1e3]);
	xlabel("Frequency, $f$ (Hz)", Interpreter="latex");
	ylabel("$\left|\mathcal{F}(V)\right|$ (V)", Interpreter="latex");
	legend("V_1", "V_2", "V_3");

	subplot(2, 1, 2);
	hold on;
	plot(f, Y4, "r", LineWidth=2);
	plot(f, Y5, "g", LineWidth=2);
	plot(f, Y6, "b", LineWidth=2);
	title("Frequency Spectrum of Current Measurements");
	xlim([0 1e3]);
	xlabel("Frequency, $f$ (Hz)", Interpreter="latex");
	ylabel("$\left|\mathcal{F}(I)\right|$ (A)", Interpreter="latex");
	legend("I_1", "I_2", "I_3");
end