Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-11-26, 05:01   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 Morse Audio Decoder on MATLAB

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=next;
end
dists=[dists; [next,0]];
env = env(next+1:end);
next=find(env if (next 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





More answer...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 16:08


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.