Welcome to Terra Stele.

Terra Stele is a hybrid communication protocol-language system aimed at communicating and educating other advanced spacefaring civilizations, as a part of NASA Space Apps Challenge 2018.

You can learn about our approach and code in this webpage and the links.

Purpose

The Modernized Golden Record

It's 2018 now, so almost 40 years have passed since the launch of the Voyager 1 and 2. There had been drastic , yet significant advancements in most of the existing fields of study, especially fields that are related to technology.
After reviewing the contents that were included in the 1977's golden record, we could easily notice that the idea of sending a golden record into the space is quite outdated, and the contents were also from the past. This made us to think that in order to provide the correct representation of mankind, we need to renew the information of the golden record in some way. Since the original golden record had some information stored in it in form of sound waves, we decided to include a transmitter that transmits specific electromagnetic waves which will give us information when decrypted, and several images that describes the Earth most effectively.
So basically, our goal is to recreate a digitalized version of the Voyager Golden Record.

The Spacecraft

Hazards of Space

To withstand the extreme conditions of space and time, we have created our main information plates out of gold-plated copper. The two radio transmitters are powered by an RTG(Radioisotope Thermal Generator) for long-lasting, stable power. One antenna transmits our custom language system, while the other transmits our image quinary system.

The Language

We have used 9 different objects to create a self-contained mathematical and logical language that can be further extended to define more subjects such as science, humanities and arts. We started by defining basic logical and mathematical expressions.

First of all, we valued the numbers of '.' and arabian characters in order to make extraterretorial civilization understand modern numerical system. After that, we defined Equal, Inequal, and the four fundamental arithmetic operations. Also, we made them know the defination of 'set', a basis of inclusion relation, proposition, and its True/False. Starting from Natural numbers, we defined Integers, Rationals, and Real numbers. And finally we interpreted Elements of the universe, Solar system, and Human culture. Especially, we defined the relation between the device which will send out TerraStele(9 characters decimal system) and the device which will send out pixelized image(5 characters Quinary system) in order to show them "refer to 'image' signal".

At first, we defined 'Element' as a set, consists of 118 elements that humanity has found so far. And we defined 3 different lists. Each of them shows the list of elements which form the solar system, the earth, and human body. Also, we pixelized the Neils Bohr's atom model in order to help them understand the structure of an atom. Next, we pixelized 4 different images highly related with human's interdependency(sociality), fundamental basis of every human culture. 6 images include pictogram, Western/Oriental paintings which explain how human look like were pixelized too. We used 4 different kinds of concords to show them that not only image, but also sound is a part of human culture. At last, from the defination of 'motion' and 'rotation', we described planetary motion, placed the position of the Earth among 8 planets of our solar system. Following code we wrote will be transfered into electromagnetic wave so that radio transmitters can send out the message. And during this process, each characters in both TerraStele (9 characters decimal system) & Image (Quinary System) will have distinctive wavelength, representing distinctive message.

/help ----------------------------------Introduction-------------------------------- ‘abcd’ will introduce about function like ‘+’, ‘-’, etc. Our language system will be tetramal system. ‘xy’ represent random number that make a generalization. Basically, our number will be represent as binary system. 0,1,01,11,100,101,110,111,1000,1001 -----------------------------------Command--------------------------------- 1. extra: means “and so on” ex) 0,1,10,11,100,101,110,extra 2. equal: means “=” ex) x equal y (x and y can be exact value or set) 3. add: means “+” ex) x add y 4. minus: means “-” ex) x minus y 5. negative: means “-number” ex) negative x 6. multiply: means “x” ex) x multiply y 7. compare: means “<” ex) x compare y 8. bool: means “logic” ex) bool(x) 9. true: means “answer of bool(x), when assumption is corresponding with conclusion” 10. false: means “answer of bool(x), when assumption is not corresponding with conclusion” 11. not: means “~ sth” ex) not x 12. include: means “∈” ex) x include y 13. or: means “||” ex) x or y 14. and: means “&&” ex) x and y 15. exist: means “∃” ex) exist x 16. all: means “∀” ex) all x 17. len: means “number of the set” ex) len x 18. emptyset: means “∅” 19. union: means “∪” ex) x union y 20. intersection: means “∩” ex) x intersection y 21. divide: means “÷” ex) x divide y 22. pi: means “π” 23. in_rel: means “the set that include to other thing” ex) x in_rel y 24. natural: means “ℕ, the set of natural numner” 25. integer: means “ℤ, the set of integer” 26. rational: means “ℚ, the set of rational number” 27. real: means “ℝ, the set of real number”

This is the final transmitted message, written with 9 characters.

          (abcd)(x)(y)((0,)(1,-)(10,--)(11,---)(100,----)(101,-----)(110,------)(111,-------)(1000,--------)(1001,--------)aaaa)(aaab,1,10,11,100,101,110,111,1000,1001,aaaa)(xaaacy,0aaac0,1aaac1,101aaac101,110aaac110,aaaa)(xaaady,0aaad1aaac1,1aaad10aaac11,1011aaad110aaac10001,aaaa)(xaabay,1aaba0aaac1,10aaba1aaac1,1011aaba101aaac110,10,aaaa)(xaaadyaaacxy,xyaabayaaacx)(aabax,aaba0aaac0,aaba1aaac0aaba1,aaba1011aaac0aaba1011,aaba10011aaac0aaba10011,aaaa)(aabaxaaadxaaac0)(xaabby,1aabb10aaac1aaad1aaac10,10110aabb11aaac10110aaad10110aadd10110aaac100010,aaaa)(xaabcy,1aabc10,101aabc111,101011aabc101110,aaaa)(aabd,1aaac1,101aaac101,1011aaba1010aaac1,11aaba0aaac11,101aabc111,1011aabc1111,aabaxaaadxaaac0,aaaa)(aaca,1aaac0,101aaac111,1010aaba1111aaac0,1011aabc1111,aaaa)(aacbx,aabdaaacaabd,aacaaaacaaca)(aaccx,aabdaaacaaca,aacaaaacaabd)(xaacdy,(y,x,aaaa)=aabd,aacc(y,x,aaaa)=aacb)(xaaday,aabdaadaaabdaaacaabd,aabdaadaaacaaaacaabd,aacaaadaaabdaaacaabd,aacaaaadaacaaaacaaca)(xaadby,aabdaadbaabdaaacaabd,aabdaadbaacaaaacaaca,aacaaadbaabdaaacaaca,aacaaadbaacaaaacaaca)(aadcxaacdy,aadcxaacd(y,0,1,10)aaac(xaaac0)aada(xaaac1)aada(xaaac10)aada(xaaac10)aaacaabd,aadcx(y,101,1)aaac(xaaac101)aada(xaaac1)aaacaabd,aaaa)(aaddxaacdy,aaddxaacd(y,0,1,10)aaac(xaaac0)aadb(xaaac1)aadb(xaaac10)aaacaaca,aaddxaacd(y,101,1)aaac(xaaac101)aadb(xaaac1)aaacaabd,aaaa)(abaax,abaa(x,1,0,10)aaac11,abaa(x,101),aaac1,abaa(x,1011101,101011101001)aaac10,aaaa)(abab,abaaababaaac0)(xabacy,aadcxyaacd(xyaacdxaadaxyaacdy))((x,1,10)abac(y,101,1001)aaac(xy,1,10,101,1001))((x,101)abac(y,1,10,0)aaac(xy,0,1,10,101))(xabady,aadcxyaacd(xyaacdxaadbxyaacdy))((x,1,10)abad(y,101,1001)aaacabab)((x,1)abad(y,1,10)aaac(xy,1))(xabbay,1abba1aaac1,100abba10aaac10,10abba100aaac0(1),1abba11aaac0(01010101aaaa),aaaa)(xaabbyaaacxy,xyadbayaaacx)(xaabbyaaac1,xaaac1adbay)(abbc,100aabb(1aaba(1abba11)aaad(1abba101)aaba(1abba111)aaad(1abba1001)aabaaaaa))(xabbdy,(y,aaddxyaacdx,aaaa)aaacaabd))(xaaacy,(xabbdyaaacaabd)aadb(yabbdxaacaaabd))(abbb,aaba1,1,0,10,aaba1001,1010110,abba100111101,aaaa)(aaababbdabbb)(abca,aaba1(1001),0(101010),1,10,aaba1(10),0(0101010101aaaa),aaaa)(abbbabbdabca)(aaababbdabca)(abcb,1aaad(1abba)aaad(1abba10)aaad(1abba(10aabb11))aaad(1abba(10aabb11aabb100)aaadaaaa)(abcc,1,aaba10,10010,0(1010010),1010(101010101010aaaa),abcb,aabaabbc,aaaa)(abbbabbdabcc)(aaababbdabcc)(abcaabbdabcc)(abda(x,y,xy),aadcxaacdabcc,aadcyaacdabcc,aadcxyaacdabcc)((abda(1,0,10)aaacabda(0,1,10))aaacaaca,(abda(1,0,10)aacaabda(1,0,10))aaacaaca)(abdb,abda(1,0,10),abda(10,1(10),aaba1001),abda(0,0,0),aaaa)(abdcx,___x)(abddx,100101100x)(acaa, 1, 10, 11, 100, 101, aaaa, 01110110)(1aacdaaca, abdd1)(10aacdaaca, abdd10)(110aacdaaca, abdd110)(111aacdaaca, abdd111)(1000aacdaaca, abdd1000)(11010aacdaaca, abdd11010)(11100aacdaaca, abdd11100)(1011aacdaaca, abdd1011)(1100aacdaaca, abdd1100)(1101aacdaaca, abdd1101)(10011aacdaaca, abdd10011)(10000aacdaaca, abdd10000)(10100aacdaaca, abdd10100)(10001aacdaaca, abdd10001)(11101aacdaaca, abdd11101)(acab, 1, 10, 110, 111, 1000, aaaa)(acac, 1000, 1011, 1100, 1101, 10000, aaaa)(acad, 1, 110, 111, 1000, 1011, aaaa)(acbb(x,y,xy,aaaa),acbb(1,1,1)aaac1,acbb(1010,101,110)aaac111,acbb(111,10,1,1010)aaac101,aaaa)(acbcx,aacb(xaaac)(baac,abdd11111)(dcba,abdd11110)(cbbb,abdd10111)(baba,(aaddxaacdbaba)xaacddcba,(aaddxaacdbaba)xaaacaacc(bcbc))(baba,1,10,11,100,101,110,111,1000)(acbdx,acbd1aaac(100/1010),acbd10aaac(111/1010),acbd11aaac(1),acbd100aaac(11/10),acbd101aaac(11010/101),acbd110aaac(10011/10),acbd111aaac(1100000/101),acbd1000aaac11110)(daaa,dbac,dccc)(dbacaaacdccc)(dbacaacdx,aacc((abaax)aabc10))(dccc,abdd11010101)(dccc,abdd11010111)(dbac,abdd11010110)
        

Converting Images into Waves

In order to transmit visual data with electromagnetic waves, we have created a custom Python 3 script.


            import sys
            from PIL import Image
            import numpy as np
            import scipy.io.wavfile as wf
            
            chars=np.asarray(['0','1', '2', '3', '4'])
            f, sc, gcf, wcf, sr = 'terrastele.github.io/assets/logo.png', 0.005, 1, 2, 44100
            
            img = Image.open(f)
            size = (round(img.size[0]*sc*wcf), round(img.size[1]*sc))
            img = np.sum(np.asarray(img.resize(size)), axis=2)
            img = (1.0 - img/img.max())**gcf*(chars.size-1)
            
            flat = [x for y in chars[img.astype(int)] for x in y]
            raw = "".join(flat)
            print(flat)
            
            def gen(num, sr, d):
                t = np.linspace(0, d, int(d*sr), endpoint=False)
                hz = (num+1) * 400
                note = np.sin(2 * np.pi * hz * t)
                return note.astype(np.float32)
            
            tone = np.asarray([])
            for x in flat:
                tone = np.append(tone, gen(int(x), sr, 0.1)).astype(np.float32)
            
            wf.write("note.wav", sr, tone)            
        

For example, the Terra Stele logo

can be represented in .wav audio form as

Here, every individual note lasting 0.1s has 5 different pitches, which each signifies a level of brightness. The notes have been rounded to a product of two prime numbers in order to make decoding possible.