Merged in f5soh/librepilot/LP-575_fedora_package (pull request #491)
[librepilot.git] / ground / gcs / src / experimental / SerialLogger / analyzeRaw.m
blob24ff0ec33304166dcbd11d68715dd18bc2d477b5
1 function analyzeRaw(device)
3 downsample = 12;   % relevant for knowing block size
4 Fs = 512;          % need to verify, close
6 if ischar(device)
7     s = serial(device,'Baud',115200);
8     set(s,'InputBufferSize',10000);
9     fopen(s);
10     
11     dat = [];
12     for i = 1:20
13         i
14         if(i > 5)  % must flush buffer
15             dat = [dat; uint8(fread(s))];
16         end
17     end
18 else 
19     dat = uint8(device);
20 end
22 raw_framing = 0:15;
23 starts = strfind(char(dat'),char(raw_framing));
24 if(starts) % found raw data, process
25     % warning - could occasionally crash if at very last 3 or less bytes
26     counts = typecast(reshape(dat(bsxfun(@plus,starts,(16:19)')),1,[]),'int32');
27     gaps = find(diff(counts) > 1) % exclude any discontiuous sections
28     if(gaps)
29         starts(1:gaps(end)) = [];
30     end
31     blocks = typecast(reshape(dat(bsxfun(@plus,starts(1:end-1),(20:20+downsample*8*2-1)')),1,[]),'int16');
32     blocks = double(reshape(blocks,8,[])); 
33     
34     accel_y = 0.012*(blocks(1,:)-2048);
35     accel_x = 0.012*(blocks(3,:)-2048);
36     accel_z = 0.012*(blocks(5,:)-2048);
37     gyro_x = 0.007*(blocks(2,:)-1675);
38     gyro_y = 0.007*(blocks(4,:)-1675);
39     gyro_z = 0.007*(blocks(6,:)-1675);
41     time = (1:length(accel_x))/512;
42     
43     % display accels
44     figure(1)
45     subplot(321);
46     plot(time,accel_x);
47     xlim([0 1])
48     ylim([mean(accel_x)-2*std(accel_x) mean(accel_x)+4*std(accel_x)]);
49     title('Accel X');
50     subplot(322);
51     pwelch(accel_x-mean(accel_x),[],[],[],Fs);
52     
53     subplot(323);
54     plot(time,accel_y); 
55     xlim([0 1])
56     ylim([mean(accel_y)-2*std(accel_y) mean(accel_y)+4*std(accel_y)]);
57     title('Accel Y');
58     subplot(324);
59     pwelch(accel_y-mean(accel_y),[],[],[],Fs);
61     subplot(325);
62     plot(time,accel_z); 
63     xlim([0 1])
64     ylim([mean(accel_z)-2*std(accel_z) mean(accel_z)+4*std(accel_z)]);
65     title('Accel Z');
66     subplot(326);
67     pwelch(accel_z-mean(accel_z),[],[],[],Fs);
68     
69     % display gyros
70     figure(2)
71     subplot(321);
72     plot(time,gyro_x);
73     xlim([0 1])
74     ylim([mean(gyro_x)-2*std(gyro_x) mean(gyro_x)+4*std(gyro_x)]);
75     title('Gyro X');
76     subplot(322);
77     pwelch(gyro_x-mean(gyro_x),[],[],[],Fs);
78     
79     subplot(323);
80     plot(time,gyro_y); 
81     xlim([0 1])
82     ylim([mean(gyro_y)-2*std(gyro_y) mean(gyro_y)+4*std(gyro_y)]);
83     title('Gyro Y');
84     subplot(324);
85     pwelch(gyro_y-mean(gyro_y),[],[],[],Fs);
86     
87     subplot(325);
88     plot(time,gyro_z); 
89     xlim([0 1])
90     ylim([mean(gyro_z)-2*std(gyro_z) mean(gyro_z)+4*std(gyro_z)]);
91     title('Gyro Z');
92     subplot(326);
93     pwelch(gyro_z-mean(gyro_z),[],[],[],Fs);
94 end
95     
96     
97