14 views (last 30 days)

Show older comments

Michael Soskind
on 6 May 2020

Hi Joey,

load('bit_stream.mat');

plot(bit_stream)

[ones,loc_ones,w,p] = findpeaks(bit_stream);

numel(ones) % number of peaks with respect to

[pulses,loc_pulses] = findpeaks(bit_stream, 'MinPeakWidth', 2);

numel(pulses) % number of peaks with a value of 1 2 or more subsequent times

Best,

Michael

Michael Soskind
on 6 May 2020

So it depends, usually, mathematically that would come from the fft of the signal. Hoewever, given that the pulses do not have a particular period, as they are pretty random in the example data you provided, the sidebands you would want are quite small. However, you could still use the following code:

% Using FFT to find the most prevalent period

figure(); % defining a figure to plot the fft in

plot(fftshift(abs(fft(bit_stream)))); % pefrforming an fft of the data (shifting to have 'zero mean', but this )

% from the figure above, looks to be a period of 4, as there is a shift of four between each of the peaks

% More trivial method of taking the average of the distance between the different elements

figure(); % defining a figure to plot the differences in

plot(diff(loc_ones)); hold on; % plotting the differences of loc_ones using the diff function

plot(1:numel(loc_ones), repmat(mean(diff(loc_ones)),1,numel(loc_ones))); % plotting the average, calculated as mean(diff(loc_ones))

The second set of code plots that the average of the difference between the different functions is in fact close to 4, confirming the effectiveness of the fft. However, taking the average of the differences might be easier.

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!