Reputation:
I was programming a morse audio decoder on Matlab but it didn't work. I have multiple files, but my decoder doesn't work, I also have an encoder which my partner gave me and it works.
I cannot find my mistakes, I cannot even create a struct. Can you please help me?
my cells T is 47*2 is like this:
'A' '01'
'B' '1000'
'C' '1010'
'D' '100'
'E' '0'
function decoded = morse_decode(signal, fs)
C = readtable('morsecode.dat', 'ReadVariableNames', false, ...
'Format', '%s%s', 'Delimiter', 'space');
T = table2cell(C);
for i=1 : length(T)*2
if isa(T{i}, 'numeric')
T{i} = num2str(T{i});
end
end
struc = cell2struct(T(:,1), T(:,2));
clear T
morse2char = @(m) getfield(struc, m);
[b,a] = butter(7,1/20);
signal = filter(b,a,signal);
env = abs(real(hilbert(signal)));
fc=600;
[b,a] = butter(2,1/fc/5);
env=filter(b,a,env);
thresh = mean(env)*0.9;
dur=find(env <= thresh,1) - find(env>thresh,1);
if (dur <0)
dur = find(env>thresh,1) - find(env<= thresh,1);
env = env(dur+1:end);
dur = find(env <= thresh,1) - find(env>thresh,1);
end
env=env(dur+1:end);
dists = [dur,1];
dit = dur;
next = find(env>thresh,1);
while (any(next))
if(next<dit)
dit=next;
end
dists=[dists; [next,0]];
env = env(next+1:end);
next=find(env<thresh,1);
if (next<dit)
dit=next;
end
dists= [dists; [next,1]];
env= env(next+1:end);
next = find(env>thresh,1);
end
letter="";
word="";
for i=1:(rows(dists))
if(dists(i,2)==i)
if (dists(i,2)<=dit*1.8)
letter=[letter "0"];
else
letter=[letter "1"];
end
else
if (dists(i,1) > dit * 3.9)
word = [word; [letter; "break"]];
letter = "";
elseif (dists(i,1) > dit*1.5)
word = [word; (letter)];
letter = "";
end
end
end
word = [word; (letter)];
decoded = morse2char(deblank(word(1,:)));
for i=2:(rows(word))
if (strcmpi(strtrim(word(i,:)),"break") ==1)
decoded = [decoded (" ")];
else
decoded = [decoded (morse2char(deblank(word(i,:))))];
end
end
decoded = []; %Replace with actually decoded text
Upvotes: 0
Views: 707
Reputation:
In MATLAB you cannot create a struct with a variable names with number but in Octave it works.
Upvotes: 1