2017-10-31 3 views
0

Wir versuchen, eine Funktion zu schreiben, die arr nimmt und zählt, wie viele 0 und 1 in der Reihenfolge erscheinen. Die Ausgabe sollte ein 2D-Array sein, wobei Spalte 1 angibt, wie viele in der Sequenz erscheinen und Spalte 2 ist, welches Token es ist (0 oder 1). Unsere Funktion untenMATLAB Morse Code diff und finden Funktionen

function [token] = tokenizeSignal(arr) 
    matA = diff(find(diff([log_vector;-1]))); 
    addA = zeros(size(matA, 1),1); 
    matA = [matA, addA]; 

    matB = diff(find(diff([log_vector;0]))); 
    addB = ones(size(matB, 1), 1); 
    matB = [matB, addB]; 

    [nRowsA, nCols] = size(matA); 
    nRowsB = size(matB, 1); 

    AB = zeros(nRowsA + nRowsB, nCols); 
    AB(1:2:end, :) = matA; 
    AB(2:2:end, :) = matB; 

    token = AB; 

Arbeiten mit

arr = [0; 0; 0; 1; 1; 1; 0]; 

aber nichts anderes, weil es fügt Zufallszahlen in die Matrix. Warum tut es das und wie kann ich es beheben?

+0

ein nicht triviales Beispiel für das Hinzufügen, was Sie würde helfen wollen –

+0

Wie wollen Sie Ihr Ergebnis aus abzuhängen 'arr', wenn Sie Benutze es nirgends? –

Antwort

0

Hier ist Code, der jedes Array arr nimmt und was Sie wollen:

% input checking/processing 
% ... convert the input into a column vector 
arr = arr(:); 
% ... check that the input is nonempty and numeric 
if ~isnumeric(arr), error('Bad input'); end 
if isempty(arr), error('Bad input'); end 

% determine the starting indices of each sequence in arr 
I = [1 ; find(diff(arr)) + 1]; 

% determine the values of each of these sequences 
values = arr(I); 

% determine the length of each of these sequences 
value_counts = [diff(I) ; length(arr) - max(I) + 1]; 

% produce the output 
token = [value_counts, values];