Радио-86РК/Радио 12-87/Программный синтезатор речи

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: А. АНДРЕЕВ

Источник: http://retro.h1.ru/RK86/Sound/Sintez.html

Наши постоянные читатели, видимо, помнят цикл статей «Музыка нулей и единиц», в которых рассказывалось о цифровой звукозаписи. В этом номере мы предлагаем владельцам «Радио-86РК» на практике убедиться в способностях компьютеров к обработке звуковых сигналов. А о том, как "тому «научить» компьютер, будет рассказано в другой раз.

Вопрос расширения возможностей радиолюбительских микро-ЭВМ, наверное, никогда не перестанет интересовать их создателей. Проведение расчетов, помощь в обучении детей основам математики, игры с домашним компьютером — все это стало уже обычным. А что еще могут микро-ЭВМ?

3000 F5 16 09 3А 02 8В 0F 0F 0F 0F E6 01 0F 5F CD 45
3010 30 3А 02 80 0F 0F 0F 0F E6 01 C2 25 30 7В 17 15 
3020 C2 0D 30 F1 C9 57 C3 1D 30 16 08 7B 17 CD 45 30
3030 DA 3F 30 F5 3E 00 32 02 80 F1 15 C2 2C 30 C9 F5
3040 3E FF C3 36 30 C5 F5 E5 2A 91 30 01 04 00 7E 23
3050 7E 23 0В 79 B0 C2 4E 30 22 91 30 E1 F1 С1 C9 21 
3060 00 10 01 00 10 3E 80 32 08 E0 CD 00 30 73 23 0В
3070 79 B0 C2 6A 30 C3 00 F8 21 00 10 01 00 10 3E 80
3080 32 08 E0 5E CD 29 30 23 0В 79 B0 C2 83 30 C3 00 
3090 F8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

Вниманию читателей предлагается один из способов «научить» машину запоминать, а потом воспроизводить фрагменты человеческой речи с помощью чисто программных средств. Речевые сигналы обрабатываются в «синтезаторе» программой, размещаемой в ОЗУ компьютера. Их ввод и вывод осуществляются через интерфейс связи с магнитофоном, усилитель записи которого используется для усиления, а встроенный громкоговоритель — для воспроизведения синтезируемых сигналов.

Для работы с программным «синтезатором» речи коды программы обслуживания, приведенные в таблице, необходимо занести в ОЗУ микро-ЭВМ.

Программа позволяет запомнить, а потом воспроизвести произвольное число раз речевое сообщение длительностью около 4 с. Для размещения массива закодированной речи в ОЗУ компьютера отведена область объемом 4 Кбайт, расположенная по адресам 1000—1FFF. Массив речи заносят в ОЗУ с noмощью микрофона, подключенного к работающему в режиме записи магнитофону, линейный выход которого соединен с входом чтения интерфейса микро-ЭВМ. Для этого, запустив программу ввода речи директивой МОНИТОРА G305F, произносят перед микрофоном любую фразу длительностью около 4 с (время вполне достаточное, чтобы поздравить компьютер с Новым годом).

Воспроизводят записанную речь, запустив программу вывода директивой МОНИТОРА G3078. Для усиления речевых сигналов, поступающих с выхода интерфейса микро-ЭВМ, также используется усилитель записи магнитофона, а для их воспроизведения — его встроенный громкоговоритель (оказывается, компьютеру не чужда «этика» — на поздравление он отвечает поздравлением).

«Синтезированная» программой речь, конечно, сильно искажена, однако подбором уровня усиления сигнала с микрофона при записи и «завала» высших частот регулятором тембра магнитофона при воспроизведении можно добиться вполне приемлемых результатов.

Что компьютеры способны синтезировать речь — известно, вероятно, многим читателям журнала, но далеко не все из них могут похвастаться тем, что слышали эту речь собственными ушами. В канун Нового года число таких «счастливчиков» существенно увеличилось — к ним присоединились владельцы компьютера «Радио-86РК», думаем, что эксперимент по синтезу речи, предложенный в последнем номере прошлого года, вызвал у наших читателей желание его продолжить. Поэтому, как и было обещано, в этом номере будет рассказано, как «РК» приобрел дар речи. Тем же, кто решит более глубоко изучить этот вопрос, рекомендуем прочесть книгу Джона Кейтера «Компьютеры — синтезаторы речи», выпущенную издательством «Мир» в 1985 году.

Рассмотрим несколько подробнее использованный в программном «синтезаторе» метод кодирования речи с использованием частотно-импульсной модуляции (ЧИМ). Он сходен с кодированием по методу дельта модуляции и заключается в запоминании одного бита данных при каждой выборке сигнала.

Для этого речевой сигнал дискретизируется по уровню с частотой около 8000 выборок в секунду. Каждая выборка является бинарной величиной: если входной сигнал больше порога срабатывания компаратора D21, то ей присваивается единичное значение, если меньше — нулевое. Получающийся при этом поток прямоугольных импульсов компонуется в байты и заносится в ОЗУ компьютера.

При воспроизведении прямоугольный сигнал усиливается и одновременно интегрируется элементами усилителя воспроизведения, после чего воспроизводится громкоговорителем магнитофона.

Основное достоинство такого способа «синтеза» речи — минимальный объем необходимых для его реализации аппаратных средств, однако за это достоинство приходится расплачиваться невысоким качеством «синтезируемой» речи.

Рассмотрим модули, из которых состоит программа «синтезатора» (см. таблицу).

; подпрограмма INBYT возвращает в  регистре Е микропроцессора
; восемь последовательных выборок речевого сигнала. Младший
; бит соответствует более ранней по вpемeни выборке.
PORT$C 	SET 	8002Н 	; Адрес парта ввода сигнала в РК
INBYT: 	PUSH 	PSW 	; Сохранение содержимого (А) в стеке
	MVI 	D,9 	; Число бит в байте +1 в счетчик бит
	LDA 	PORT$C 	; Ввод из порта чтения (компаратор
	RRC 		; в компьмтере подключен к разряду D4
	RRC 		; порта ввода).
	RRC
	RRC 		; Теперь бит отсчета - в разряде D0
	ANI 	1 	; Выделить только информационный бит.
	RRC 		; Подготовка следующего бита
IM1: 	MOV 	Е,А
	CALL 	TIME 	; Задержка между выборками сигнала
	LDA 	PORT$C 	; ввод из порта очередной выборки
	RRC
	RRC
	RRC
	RRC 		; Информационный бит
	ANI 	1 	; Выделить только информационный бит,СУ=0
	JNZ 	IМЗ 	; Установить CY, если он не равен нулю.
IM2: 	MOV 	А,Е 	; Информационный бит - в аккумулятор
	RAL 		; Сдвинуть CY (информ. бит!) в аккумулятор
	DCR 	D 	; Скорректировать счетчик бит
	JNZ 	IМ1 	; Если не все 8 бит считаны, продолжить
	POP 	PSW
	RET
IM3: 	STC
	JMP 	IM2 	; Переход на сдвиг бита =1.
; Подпрограмма 	OUTBYTE выводит из микроЭВМ восемь выборок
; речевого сигнала, записанных в регистре Е микропроцессора.
; Более ранней 	по времени выборке соответствует младший бит
; информации.
OUTBYT: PUSH 	PSM
	MVI 	D,8 	; регистр D используете я как счётчик бит
	MOV 	А,Е
OM2: 	RAL 		; Сдвинуть текущий бит в CY
	CALL 	TIME
	ДС 	ОМ1
	PUSH 	PSU 	; Сохранить текущий информационный бит
	XRA 	А 	; Обнулить аккумулятор, в частности, D0
ОМ4: 	БТА 	РОРТ$С 	; Выдать данный бит в выходной порт
OM3: 	POP 	PSM 	; Восстановить текущий информациооный байт
	DCR 	D 	; Все в бит выданы?
	JNZ 	ОМ2 	; Нет, продолжить выдачу бит.
	POP 	PSW 	;
	RET 		; Конец вывода байта
OM1: 	PUSH 	PSH
	MVI 	А,0FFН 	; Установить все выдаваемые биты в "1"
	JMP 	ОМ4
; Подпрограмма 	TIME обеспечивает задержку между отдельными выборками
; сигнала при вводе и выводе. Одновременно служит для регенерации
; ОЗУ компьмтера, так как при работе INBYT и OUTBYT видеоконтроллер
; остановлен! 	В скобках указано число машинных тактов,
; необходимых для выполнения каждой команды.
TIME: 	PUSH 	PSM 	; (11 T) Сохранить регистры проиесора
	PUSH 	I 	; (11 T)
	PUSH 	H 	; (11 T)
	LHLD 	REF 	; (16 T) Загруаить указатель адреса регенерации
	LXl 	B,CONST ; (10 T) регистр В - счетчик задержки
MT1: 	MOV 	A,M 	; (7 T) Произвести одно обращение по адресу
	INX 	H 	; (5 T) регенерации
	MOV 	A,M 	; (7 Т) и по следующему адресу
	INX 	Н 	; (5 T)
	DCR 	В 	; (5 T) Декрементировать счетчик задержки
	MOV 	А,В 	; (5 T)
	ORA 	С 	; (4 T) Содержимое счетчика равно нулю ?
	JNZ 	MT1 	; (17 T/11 T) Hет, продолжить цикл
	SHLD 	REF 	; (16 T) Запомнить указатель адреса регенерации
	POP 	Н 	; (11 Т) Восстановить содержимое регистров
	POP 	В 	; (11 Т) процессора
	POP 	PSW	; (11 Т)
	RET 		; (10 Т) Выход из подпрограммы задержки
; Праграмма INRAM ввoдит в указанную область  ОЗУ
; компьютера массива отсчетов сигнала заданной длины (запись речи)
DМА 	SET 	0F808Н 	; Адрес контроллера ПДП
INRAM: 	LXI 	H,NATCH ; НАЧАЛЬНЫЙ адрес записываемого МАССИВА
	LXI 	D,DEL 	; ДЛИНА записываемого МАССИВА в байтах.
	MVI 	А,80Н 	; Выключение контроллера дисплея
	8ТА 	DMA 	; НА время ЗАПИСИ звука
INM1: 	CALL 	INBYT 	; Прием восьми выборок СИГНАЛА
	MOV 	М,Е 	; ЗАПИСЬ подготовленного БАЙТА в ОЗУ и
	INX 	Н 	; указателя на элемент МАССИВА
	DCX 	В 	; коррекция СЧЁТЧИКА байт
	MOV 	А,B 	; МАССИВ ЗАПОЛНЕН ?
	ORA 	С
	JNZ 	INM1 	; Нет, продолжим запись
	JMP 	MONITOR ; Выход в монитор с ЗАПУСКОМ видеоконтроллера
; ПРОГРАММА OUTRAM выводит массив, записанный программой INRAM
; в виде последовательности отсчётов речевого СИГНАЛА
; ("воспроизведение речи")
OUTRAM: LXI 	Н, MATCH ;НАЧАЛЬНЫЙ адрес МАССИВА отсчетов
	LXI 	В, DEL 	; ДЛИНА выводимого массива в байтах
	MVI 	А,80Н
	STA 	DMA
OUTM1: 	MOV 	Е,М 	; Текущий байт выборок в аккумулятор
	CALL 	OUTBYT 	; ВЫДАЧА 8 выборок СИГНАЛА НА выход
	INX 	Н
	DCX 	B 	; уменьшить счетчик байт
	MOV 	A,B
	ORA 	С 	; МАССИВ выдан полностью?
	JNZ 	OUTM1	; Нет, продолжить выдачу
	JMP 	MONITOR
	END

Требующийся для синтеза речевого сообщения объем ОЗУ (при темпе 8000 выб./с) равен 1 Кбайт на секунду звучания.

В заключение хотелось бы остановиться на возможностях повышения качества «синтезируемой» речи.

Компаратор D21 компьютера «Радио-86РК» не имеет гистерезиса и настроен достаточно близко к нулевому уровню — отсюда дополнительные призвуки в «синтезированной» речи, появляющиеся, а результате переключения компаратора шумовыми и фоновыми сигналами при вводе. Повышение порога срабатывания компаратора и введение положительной обратной связи для создания гистерезиса улучшают условия процесса квантования и очищают речевой сигнал от значительной доли шумов.

Дополнительного улучшения качества «синтезируемой» речи можно добиться включением ФНЧ с частотой среза около 4кГц в тракт усиления сигнала, как при вводе, так и при выводе. Возможна также и чисто программная обработка «массива речи», однако этот метод требует развитых программных средств обработки такой информации и в настоящее время еще проработан не полностью.

А. АНДРЕЕВ, г. Москва