Приветствую Вас, Гость
Главная » Статьи » Мои статьи

Scilab-генератор сигналов (часть 2)

Scilab- генератор сигналов


Как отмечалось в первой части (part1), в пакет  Scilab входит Хcos  — графический редактор для визуального моделирования гибридных динамических систем, аналогичный Simulink (Matlab). При использовании Хcos,  разработчик создает на экране дисплея модель устройства из стандартных библиотечных блоков и проводит необходимые расчеты. Преимущество такого типа моделирования заключается в том, что разработчику  достаточно начальных знаний языка программирования и численных методов, а также знаний  предметной области, в которой он работает. Важно также отметить, что при использовании Xcos, создание моделей основывается на использовании технологии Drag-and-Drop. «Кирпичиками» при построении модели служат визуальные блоки, которые хранятся в библиотеке Xcos.  
 Воспользуемся возможностями Xcos для создания источников звуковых сигналов и шума. Рассмотрим, вначале, как получить синусоидальный звуковой сигнал. Прежде всего, создадим модель нашего генератора. В инструментах, в командном окне Scilab выберем пункт: Визуальное моделирование Xcos. В результате появится 2 дополнительных окна: палитра блоков и Xcos (рис.1)

Рис.1

Используя блоки из палитры, перетащим мышью нужные блоки в окно Xcos (рис.2). 

Рис.2

Мы использовали блоки  GENSIN_f (генератор синусоиды), CLOCK_c (счётчик времени), CSCOPE (осциллограф). Если кликнуть мышью на каждый блок в нашей схеме, то можно менять параметры, например для блока  GENSIN_f  можно менять амплитуду, частоту и фазу (рис.3).

Рис.3

В пункте "Моделировать" выберем пункт "Запустить", в результате появится ещё одно окно с графиком нашего сигнала (рис.4).

Рис.4

Настроим параметры таким образом, чтобы получить нужные нам звуковые сигналы.
В пункте "Моделирование" выберем пункт "Установить контекст" и в появившемся окне введём наши данные, согласно синтаксису Scilab (рис.5,6).

Рис.5

Рис.6

В нашу модель мы добавили блок усиления с коэффициентом усиления 1. Этот коэффициент можно менять как в большую, так и в меньшую сторону. Полученные данные запишем в рабочую среду Scilab, а затем через него можно записать в файл формата .wav или воспроизвести. К сожалению, напрямую в Xcos можно записывать звуковые файлы только в формате .au (http://www.online-convert.com/ru/file-format/au).
 Изменим нашу модель следующим образом (рис.7):

Рис.7

добавив вывод данных в рабочее пространство Scilab в виде переменной А.
Стоит заметить, что тип этой переменной struct (структура) и имеет 2 поля : A  = values: [88200x1 constant], time: [88200x1 constant]. Воспроизвести нашу синусоиду можно командой sound(A.values).

Записать в файл:


f=440;bits=16;Fs=44100;
xx=pwd();//текущая директория
sinfile = xx+'\sin'+string(f)+'.wav';
wavwrite(A.values, Fs, bits, sinfile);

Аналогично, через рабочее пространство  Scilab можно передать данные из внешних файлов в Xcos.
 Для сигналов других видов уже есть стандартные блоки, которые находятся в палитре в пункте: Источники сигналов и воздействий. Это пилообразный- SAWTOOTH_f, прямоугольный-GENSQR_f, импульсный- PULSE_SC, ступенька- STEP_FUNCTION и генератор случайных сигналов-RAND_m, который может выдавать как равномерно распределённые, так и нормально распределённые сигналы. Последний генератор можно использовать для создания "белого" и "белого гауссова" шума.
 Остаётся вопрос, каким образом можно создать модель генератора "розового" шума? "Розовый" шум со спадом -10 dB/декаду и постоянной мощностью на октаву может быть получен фильтрацией "белого" шума. Фильтр с отклонением 0,3 дБ в диапазоне от 0.00045 Fs до 0.45 Fs (частота семплирования) был предложен Robert Bristow-Johnson (http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt). Этот фильтр преобразует "белый" шум, равномерно распределённый от  -1 до 1, в неоднородно распределённый "розовый" шум с RMS амплитуды 1.

Рис.8 Передаточная функция фильтра

Создадим модель (рис.9), используя блоки RAND_m (генератор случайных сигналов), GAINBLK_f (усиление), SUMMATION (суммирование), CONST_m (генератор постоянной величины),DLR (дискретная передаточная функция),CLOCK_c (блок, задающий частоту дискретизации), CMSCOPE(многооконный осциллограф). Параметры А и В для блока RAND_m зададим равными -1 и 2 соответственно, для того, чтобы амплитуда сигнала менялась в диапазоне [-1,1].

Рис.9

Вывод  данных в рабочее пространство Scilab в виде переменной осуществляется аналогично рис.7.

 

 

 

 

 

 

 

Категория: Мои статьи | Добавил: megasega_v (13.12.2016)
Просмотров: 3101 | Рейтинг: 0.0/0
Всего комментариев: 0