Нетрадиционные способы передачи данных. Передача...

31

Upload: it-people

Post on 16-Apr-2017

375 views

Category:

Internet


1 download

TRANSCRIPT

Передача информации через звук

Никита Илясов

Кроссплатформенность

Работает без подключения и настройки

Возможна реализация проводной передачи данных

Интересно же!

3

Преимущества

1. Упаковать информацию

2. Сгенерировать звук

3. Получить звук

4. Интерпретировать характеристики сигнала

5. Распаковать информацию

4

Шаги

Амплитудная модуляция

Частотная модуляция

Фазовая модуляция

5

Виды модуляции

Меняется только амплитуда

Проще реализуется

Менее устойчива к помехам

6

Амплитудная модуляция

Меняется только частота

Требует более широкой полосы

Устойчивее к помехам

Больше пропускная способность

7

Частотная модуляция

Меняется фаза сигнала

Более помехоустойчивая

Сложнее реализуется

8

Фазовая модуляция

Jack - Jack

Динамик - микрофон

9

Способы подключения

Цифровая модуляция (манипуляция)

Чаще всего от 2 до 64

Псевдоаналоговая модуляция

Сколько угодно

10

Размер алфавита

Очень простая

Очень отзывчивая

Нет коррекции ошибок

Ограничена пропускная способность

11

Псевдоаналоговая модуляция

Передача информации через звук

Прототип

13

Синий

14

Красный

Упрощает работу с CoreAudio

Визуализирует данные

https://github.com/syedhali/EZAudio

15

EZAudio

Прототип

Приёмник

#import <EZAudio/EZAudio.h>

private func setupAudio() { let mic = EZMicrophone(delegate: self) let description = mic.audioStreamBasicDescription() let sampleRate = Float(description.mSampleRate)

self.fft = EZAudioFFTRolling(windowSize: 4096, sampleRate: sampleRate, delegate: self) self.microphone = mic self.microphone.startFetchingAudio() }

17

Код приемника: Настройка

func microphone(…) { fft.computeFFTWithBuffer(buffer[0], withBufferSize: bufferSize) }

18

EZMicrophoneDelegate

func fft(…) { let maxFrequency = fft.maxFrequency;

dispatch_async(dispatch_get_main_queue(), { self.updateColor(maxFrequency) }); }

func updateColor(frequency: Float) { let converter = self.converter let value = converter.valueFromFrequency(frequency) let color = converter.colorFromValue(value) }

19

EZAudioFFTDelegate

Прототип

Конвертирование

let baseFreq: Float = 19000

func valueFromFrequency(frequency: Float) -> Float { let value = (frequency - baseFreq) / 220.0 return value }

func frequencyFromValue(value: Float) -> Float { return baseFreq + 220.0 * value }

21

Конвертирование

Прототип

Передатчик

Конфигурируем EZAudio

Реализуем EZOutputDataSource

Генерируем синусоиду

23

Генерация звука

Устранение лишних гармоник в генераторе

Цифровая модуляция

Фильтрация

24

О чем почитать

Заключение

До 10 метров

18-20 kHz

26

Цифры

Сканеры кредитных карт

Пейринг устройств

Стилусы

27

Примеры использования

Недовольный клиент

Иногда все стирается

29

Виновник

Спасибо за внимание!

Никита Илясов

Старший разработчик

Контакты

+7 (925) 166 50 03

[email protected]