В этом примере показано, как запретить сигнал с помощью кода C, сгенерированного из wdenoiseфункция. Демонстрируются две методики. Первый метод использует функцию-оболочку, которая вызывает wdenoise. Второй метод генерирует код C непосредственно из wdenoise. В зависимости от рабочего процесса один метод может быть предпочтительнее другого. Например, чтобы упростить генерацию кода для большого кода MATLAB ®, можно использовать функции оболочки для модуляции кода.
Создание функции MATLAB denoiseSignal который выполняется wdenoise и возвращает денонсированный сигнал. Функция принимает два входных аргумента: 1-D сигнал и деноизирующий метод. Он передает эти аргументы wdenoise. Функция включена в каталог, содержащий этот пример. Код для denoiseSignal далее.
function out = denoiseSignal(input,denMthd) %#codegen out = wdenoise(input,'DenoisingMethod',denMthd); end
%#codegen указывает, что функция предназначена для генерации кода.
Использовать codegen (Кодер MATLAB) для генерации функции MEX. Если не указан целевой объект построения, по умолчанию создается код MEX. По умолчанию codegen называет созданную функцию MEX denoiseSignal_mex. Чтобы разрешить создание файла MEX, укажите свойства (класс, размер и сложность) двух входных параметров:
coder.typeof(0,[1 Inf]) задает вектор строки произвольной длины, содержащий вещественное значение double значения.
coder.typeof('c',[1 Inf]) задает символьный массив произвольной длины.
codegen denoiseSignal -args {coder.typeof(0,[1 Inf]),coder.typeof('c',[1 Inf])}
Code generation successful.
Загрузите сигнал.
load noisdopp plot(noisdopp) title('Signal')

Дважды деноизируйте сигнал с помощью denoiseSignal_mex. Сначала используйте метод деноизирования UniversalThreshold. Затем используйте SURE способ. Постройте график обоих результатов.
dn = denoiseSignal_mex(noisdopp,'UniversalThreshold'); dn2 = denoiseSignal_mex(noisdopp,'SURE'); plot([dn' dn2']) legend('Universal','SURE')

Используйте функцию MATLAB и функцию MEX для обнуления сигнала с помощью Minimax способ. Подтвердите, что результаты равны.
dnA = denoiseSignal_mex(noisdopp,'Minimax'); dnB = denoiseSignal(noisdopp,'Minimax'); max(abs(dnA-dnB))
ans = 6.2172e-15
Также можно создать код C непосредственно из wdenoise. Создайте файл MEX, который помечает сигнал с помощью db4 вейвлет. Генерируемый файл MEX называется wdenoise_mex.
codegen wdenoise -args {coder.typeof(0,[1 Inf]),coder.Constant('Wavelet'),coder.Constant('db4')}
Code generation successful.
Отрицайте первоначальный сигнал.
dn3 = wdenoise_mex(noisdopp,'Wavelet','db4');
Для подтверждения того, что MEX-файл принимает входные сигналы переменной длины, обнулите первые 200 выборок исходного сигнала.
dn4 = wdenoise_mex(noisdopp(1:200),'Wavelet','db4'); plot([noisdopp(1:200)' dn4']) legend('Original','Denoised')
