모스부호 소리 해독 - moseubuho soli haedog

모스부호라는 것을 아시나요? 전기를 소리로 바꾸어서 언어를 전달하는 것인데 이것을 보면 굉장히 대단합니다 지금의 문자와 비교해 상당히 불편해보이면서 대부분의 내용을 말끔하게 전달할 수가 있습니다.

물론 지금 같이 통신이 상당히 발전된 상황에서 활용도가 높을지는 모르겠지만 원래 사용하던 용도 역시도 긴급상황이 발생하였을때이기 때문에 추후에 어떤일이 발생할지 모르니 배워두는 것도 나쁘지 않을 것 같습니다

모스부호의 장점이라고 한다면 , 아주 적은 에너지를 사용하고 왠만한 잡음에도 끄떡 없이 내용을 분명히 전달할 수 있다는 점입니다 . 만약 요즘 같은 시대에 중계기 같은 것이 타격을 입게 되면 전화와 같은 통신은 소용이 없게 될 수도 있습니다 물론 라디오 통신이 있기 때문에 크게 상관은 없을 수도 있겠습니다만..

모스부호 소리 해독 - moseubuho soli haedog

이러한 구조로 생겼습니다 아마 전쟁 영화같은 것에도 자주 봤을 것이라 예상됩니다 단자를 접촉하면 소리가 나지요 장단점으로 이루어져 있습니다 여기서 장단점이라는 것은 긴점과 짧은 점을 이야기 합니다

여튼 오늘은 모스부호 번역기 , 해석기에 대해서 알아보도록 하겠습니다

우리가 해당 도구를 구할 수가 없기 때문에 간단하게 사이트에서 번역할 수 있는 곳이 있습니다 그냥 문자만 치면 자동적으로 장단점이 출력되어 나오지요

http://admin0.github.io/morse/

이곳입니다

우선 한글 혹은 영어, 숫자로 원하는 내용을 입력한 후 TRANSLATE를 눌러주시면 됩니다

그러면 위와 같은 기호로 변환이 되지요 저 상태로는 무슨말인지 전혀 알아볼 수가 없습니다.

물론 이것에 대해 지식이 있는 분들은 한 눈에 파악할 수가 있겠지요 하지만 처음 봤을 때는 그 구조를

이해하기가 무척이나 어렵군요

이것은 문자 -> 모스부호로 변환한 것입니다

다시 모스부호를 문자로 변환하고자 하려면 하단에 있는 메뉴중에 해석기를 선택합니다

문자의 종류를 골라줍니다

내용을 넣은 뒤 ANALYZE(분석)을 선택하시면 다시 언어로 번역 되지요 . 꽤나 신기 합니다

또한 이것을 음성으로 변환할 수도 있는 것 같은데 그건 스마트폰 어플로도 있는 것 같습니다

하지만 이런식으로는 그 구조를 이해하기가 어려운데요 한번쯤 공부해보고 싶은 요소이기도 합니다 

모스부호 번역을 순식간에 하는 방법, 모스부호 번역기!

모스부호 소리 해독 - moseubuho soli haedog

과거 세계대전을 다룬 전쟁영화를 보다보면 모스부호를 주고받는 장면이 나옵니다. 짧고 긴 소리를 들으면서 문자로 번역해내는 장면을 보면서 굉장히 신기하다는 생각을 했습니다. 

모스부호는 1800년대에 개발된 전신 기호입니다. 전류를 짧게 또는 길게 발신하면서 전신부호를 구성했고, 이를 조합해 문장을 만들어내는 것입니다. 보통 길이에 따라 점과 선으로 구분되고 우리나라에서는 이걸 돈, 쓰로 읽습니다. 

모스부호는 최근에는 거의 쓰이지 않습니다. 영상까지 순식간에 전송하는 시대이니 말이죠. 하지만 위급한 상황에서는 여전히 사용되고 있습니다. 재해 등으로 통신 장비가 파손되거나 통신 장애가 있을 때 사용하는 것이죠. 소리를 전달하거나 플래시 같은 빛을 이용해 의사를 전달할 수도 있습니다. 

이러한 모스부호를 번역하기 위해선 번역표를 이용하는 방법 밖에는 없어보이는데요. 하지만 다시 한 번 이야기하지만, 얼마나 대단한 세상인가요? 아주 손쉽게 모스부호를 번역해주는 번역기가 있습니다. 

http://admin0.github.io/morse/

이 사이트에서는 원하는 글자, 단어, 문장을 모스부호로 변환해줍니다. 또한 모스부호를 입력하면 다시 이를 우리말로 번역해줍니다. 눈깜작할 사이에 말이죠. 

일반인이 모스부호를 쓸만한 일은 거의 없을 것 같지만, 구조신호 정도는 알아두면 좋을 것 같습니다. SOS를 모스부호로 변환하면  "· · · - - - · · · (돈돈돈 쯔쯔쯔 돈돈돈)"입니다. 산에서 조난 당했을 때 핸드폰 빛 등을 이용해 위급한 상황을 알리면 유용하겠죠? 

 · – – ·  – · ·  · · · –  · – · ·  –  – · –  · · · ·  · · – ·  · – – –  ·  · · · –  · · · ·  · – –  · –  · · – ·  – – · –  – – ·  – · – –  – · –  – ·

자, 그럼 위에 적힌 모스부호는 어떤 뜻일까요? 모스부호 번역기를 이용해 해석해보세요. :)

계산 음성

모스 코드 신호의 생성 및 해독

모스 코드 사전을 생성합니다.

전체 Wolfram 언어 입력 표시하기

In[1]:=

모스부호 소리 해독 - moseubuho soli haedog

code = <|"a" -> ".-", "b" -> "-...", "c" -> "-.-.", "d" -> "-..", "e" -> ".", "f" -> "..-.", "g" -> "--.", "h" -> "....", "i" -> "..", "j" -> ".---", "k" -> "-.-", "l" -> ".-..", "m" -> "--", "n" -> "-.", "o" -> "---", "p" -> ".--.", "q" -> "--.-", "r" -> ".-.", "s" -> "...", "t" -> "-", "u" -> "..-", "v" -> "...-", "w" -> ".--", "x" -> "-..-", "y" -> "-.--", "z" -> "--..", "1" -> ".----", "2" -> "..---", "3" -> "...--", "4" -> "....-", "5" -> ".....", "6" -> "-....", "7" -> "--...", "8" -> "---..", "9" -> "----.", "0" -> "-----", "." -> ".-.-.-", "," -> "--..--", "!" -> "-.-.--", "?" -> "..--.."|> withgaps = Map[StringRiffle[Characters[#], "_"] &, code]; withpauses = Map[StringInsert[#, "___", -1] &, withgaps]; withspace = AssociateTo[withpauses, " " -> "_______"]; replacements = Map[StringReplace[#, {"-" -> "111", "." -> "1", "_" -> "0"}] &, withspace];

Out[1]=

모스부호 소리 해독 - moseubuho soli haedog

이 사전을 사용하여 메시지를 음성 신호로 변환하는 함수를 생성합니다.

In[2]:=

모스부호 소리 해독 - moseubuho soli haedog

createMorseSignal[s_String, t_] := Module[{events = Characters[StringReplace[ToLowerCase[s], Normal@replacements]], ts, amps}, ts = TimeSeries[ToExpression@events, {0, (Length[events] - 1)*t, t}]; amps = AudioGenerator[ts, SampleRate -> 1000]; AudioGenerator[{"Sin", 800}, Duration@amps, SampleRate -> 8000] amps ]

문자열을 음성 신호로 부호화합니다.

In[3]:=

모스부호 소리 해독 - moseubuho soli haedog

morse = createMorseSignal["hello world", .07]

Out[3]=

모스부호 소리 해독 - moseubuho soli haedog

시간에 대한 연상을 배제하고 모스 신호를 해독합니다.

In[4]:=

모스부호 소리 해독 - moseubuho soli haedog

inversecode = AssociationThread[Values[code], Keys[code]]

Out[4]=

모스부호 소리 해독 - moseubuho soli haedog

전체 Wolfram 언어 입력 표시하기

In[5]:=

모스부호 소리 해독 - moseubuho soli haedog

decodeMorseSignal[audio_] := Module[{rms, rounded, crossings, transients, shifted, dit}, rms = AudioLocalMeasurements[audio, "RMSAmplitude", PartitionGranularity -> {.01, .002}]; rounded = Round[rms/Max@rms]; crossings = TimeSeriesInsert[ TimeSeries[ CrossingDetect[rounded["Values"] - .5, CornerNeighbors -> True], {rounded["Times"]}], {0, 1}]; transients = TimeSeries@Select[Normal@crossings, #[[2]] == 1 &]; shifted = TimeSeriesShift[transients, -transients["FirstTime"]]; dit = MinimumTimeIncrement[shifted]; StringSplit[ StringJoin[ Table[{Differences[shifted["Times"]][[i]], Mod[i, 2]}, {i, Length@Differences[shifted["Times"]]}] /. {{x_, 1} /; .5 dit < x < 1.5 dit -> ".", {x_, 1} /; 2.5 dit < x < 3.5 dit -> "-", {x_, 0} /; 2.5 dit < x < 3.5 dit -> "/", {x_, 0} /; .5 dit < x < 1.5 dit -> Nothing, {x_, 0} /; 5 dit < x < 12 dit -> "/_/"}], "/"] /. "_" -> " " ]

In[6]:=

모스부호 소리 해독 - moseubuho soli haedog

decoded = decodeMorseSignal[morse]

Out[6]=

모스부호 소리 해독 - moseubuho soli haedog

In[7]:=

모스부호 소리 해독 - moseubuho soli haedog

StringJoin[decoded /. inversecode]

Out[7]=

모스부호 소리 해독 - moseubuho soli haedog