пятница, 29 января 2016 г.

Генератор шума с регулируемой спектральной полосой (GenNoiseAdjustableBand.DLL)

Данная библиотека (далее DLL) предназначена для генерации белого шума с регулируемой полосой и уровнем в пределах частот дискретизации аудиокарты, и может использоваться для настройки и контроля аппаратуры и программного обеспечения, взаимодействующего со звуковой картой, а также в других областях ЦОС. Частотное ограничение диапазона генерации осуществлено цифровым полосо-пропускающим фильтром на основе прямого и обратного БПФ (FFT) с задаваемыми коэффициентами.

Cистемные требования и зависимости:
  1. Win ALL.
  2. Наличие аудиокарты.
DLL предоставляет универсальный доступ для других приложений вне зависимости от языка в среде Win32/64. Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

 Таблица расшифровок параметров экспортируемой процедуры startstop() библиотеки 'GenNoiseAdjustableBand.DLL':
 Параметр Функционал Тип переменной
 ===============================================================
 level уровень шума, % Integer
 freq_min минимальная частота, Гц Integer
 freq_max максимальная частота, Гц Integer
 samplerate частота дискретизации, Гц Integer
 runstop старт-стоп генерации Boolean
 level_db возвращаемый параметр уровня, дБ PAnsiChar
Таблица расшифровок параметров экспортируемой процедуры set_level_freqminmax() библиотеки 'GenNoiseAdjustableBand.DLL':
 Параметр Функционал Тип переменной
 =========================================================
 level уровень шума, % Integer
 freq_min минимальная частота, Гц Integer
 freq_max максимальная частота, Гц Integer
 level_db возвращаемый параметр уровня, дБ PAnsiChar
Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5-7):
var

    set_level_freqminmax:procedure(level,     // уровень шума, %
                                   freq_min,  // минимальная частота, Гц
                                   freq_max:  // максимальная частота, Гц
                                   integer;
                                   var level_db: pansichar
                                   ); stdcall;
    startstop:procedure(level,      // уровень шума, %
                        freq_min,   // минимальная частота, Гц
                        freq_max,   // максимальная частота, Гц
                        samplerate: // частота дискретизации, Гц
                        integer;
                        runstop:    // старт-стоп генерации
                        boolean;
                        var level_db: pansichar
                        ); stdcall;
    LibHandle2: THandle;



function LinkProc(h: thandle; ProcName: string):Pointer;
begin
 result:= GetProcAddress(h, PChar(ProcName))
end;

{ инициализация }
begin
 // подключаем DLL
 LibHandle2:= LoadLibrary('GenNoiseAdjustableBand.dll');
 if LibHandle2<>0 then begin
  startstop:= LinkProc(LibHandle2, 'startstop');
  set_level_freqminmax:= LinkProc(LibHandle2, 'set_level_freqminmax');
 end;
...

{ активация }
var level_db: pansichar;
begin
 if LibHandle2<>0 then begin
  startstop(50,    // уровень шума, %
            100,   // минимальная частота, Гц
            7000,  // максимальная частота, Гц
            24000, // частота дискретизации, Гц
            true,  // старт-стоп генерации
            level_db)
 end;
...

{ деактивация }
var level_db: pansichar;
begin
 if LibHandle2<>0 then begin
  startstop(0,     // уровень шума, %
            0,     // минимальная частота, Гц
            0,     // максимальная частота, Гц
            0,     // частота дискретизации, Гц
            false, // старт-стоп генерации
            level_db)
 end;
...

{ регулировка полосы и уровня REALTIME }
var level_db: pansichar;
begin
 if LibHandle2<>0 then begin
  set_level_freqminmax(100,     // уровень шума, %
                       2000,    // минимальная частота, Гц
                       24000,   // максимальная частота, Гц
                       level_db)
 end;
...


ПОРЯДОК ИСПОЛЬЗОВАНИЯ
  1. В демо-примере осуществлен захват аудиоданных и визуализация с использованием библиотеки 'FFTR.dll' разработки автора (см. 'Описание API вызова библиотеки FFTR.DLL.txt'): R - отрисовка спектра (FFT) с пересчетом в реальные частоты и амплитуды в дБ,  G - отрисовка сырых отсчетов (осциллограмма),  B - отрисовка восстановленных данных после FFT и IFFT (осциллограмма)
  2. Параметр частоты 'freq_max' должен быть всегда более параметра 'freq_min', причем оба параметра не могут превышать задаваемую частоту дискретизации.
  3. Параметр уровня шума 'level' не может превышать величины 100%.
  4. Изменение полосы и уровня генерации шума, вследствие буферизации данных, происходит с некоторой задержкой. 
Ссылки по тематике
  1. Цифровая фильтрация на ПЛИС. Сглаживание и борьба с импульсными помехами
  2. Контроль плеера AIMP в условиях шумовых воздействий
  3. 4-х канальный генератор шума на стабилитронах в режиме лавинного пробоя

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

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.