Я пытаюсь квантовать набор образцов двойного типа с равномерным квантованием на 128 уровней, и я хочу, чтобы мой вывод также был двойным. Когда я пытаюсь использовать «квантование», matlab дает ошибку: Входы класса «double» не поддерживаются. Я попробовал «uencode», но его ответ был вздор. Я совершенно новичок в Matlab, и я работал над этим часами. Любая помощь appriciated. СпасибоКвантование ввода двойного типа для вывода двойного типа в MATLAB
ответ
uencode должен дать целочисленные результаты. Вот и все. но ключевым моментом является то, что он принимает симметричный диапазон. переход от -x к + x, где x - наибольшее или наименьшее значение в вашем наборе данных. Поэтому, если ваши данные от 0 до 10, ваш результат выглядит как бессмыслица, потому что он квантует значения в диапазоне от -10 до 10.
В любом случае вы действительно хотите получить закодированное значение и квантованное значение. Я написал простую функцию для этого. Он даже имеет небольшие инструкции (действительно просто введите «help ValueQuantizer»). Я также сделал его очень гибким, чтобы он работал с любым размером данных (при условии, что у вас достаточно памяти) это может быть вектор, 2d-массив, 3d, 4d .... и т. Д.
вот пример того, как это сделать работает. Наш номер является равномерным распределением от -0.5 до 3.5 это показывает, что в отличие от uencode, моя функция работает с несимметричными данными, и что он работает с отрицательными значениями
a = 4*rand(2,4,2) - .5
[encoded_vals, quant_values] = ValueQuantizer(a, 3)
производит
a(:,:,1) =
0.6041 2.1204 -0.0240 3.3390
2.2188 0.1504 1.4935 0.8615
a(:,:,2) =
1.8411 2.5051 1.5238 3.0636
0.3952 0.5204 2.2963 3.3372
encoded_vals(:,:,1) =
1 4 0 7
5 0 3 2
encoded_vals(:,:,2) =
4 5 3 6
1 1 5 7
quant_values(:,:,1) =
0.4564 1.8977 -0.0240 3.3390
2.3781 -0.0240 1.4173 0.9368
quant_values(:,:,2) =
1.8977 2.3781 1.4173 2.8585
0.4564 0.4564 2.3781 3.3390
так что вы можете увидеть он возвращает закодированные значения в виде целых чисел (как и uencode, но без странного симметричного предположения). В отличие от uencode, это просто возвращает все как удвоение, а не конвертирует в uint8/16/32. Важной частью является также возвращает квантованных значений, что является то, что вы хотели
здесь функция
function [encoded_vals, quant_values] = ValueQuantizer(U, N)
% ValueQuantizer uniformly quantizes and encodes the input into N-bits
% it then returns the unsigned integer encoded values and the actual
% quantized values
%
% encoded_vals = ValueQuantizer(U,N) uniformly quantizes and encodes data
% in U. The output range is integer values in the range [0 2^N-1]
%
% [encoded_vals, quant_values] = ValueQuantizer(U, N) uniformly quantizes
% and encodes data in U. encoded_vals range is integer values [0 2^N-1]
% quant_values shows the original data U converted to the quantized level
% representing the number
if (N<2)
disp('N is out of range. N must be > 2')
return;
end
quant_values = double(U(:));
max_val = max(quant_values);
min_val = min(quant_values);
%quantizes the data
quanta_size = (max_val-min_val)/(2^N -1);
quant_values = (quant_values-min_val) ./ quanta_size;
%reshapes the data
quant_values = reshape(quant_values, size(U));
encoded_vals = round(quant_values);
%returns the original numbers in their new quantized form
quant_values = (encoded_vals .* quanta_size) + min_val;
end
Насколько я могу сказать, что это всегда должно работать, но я не сделал обширное тестирование , удачи
- 1. Преобразование сложного двойного двойного типа в Matlab
- 2. Сравнение значений двойного типа
- 3. цифры двойного типа в C++
- 4. Ошибка преобразования типа двойного байта
- 5. Округление двойного типа с RapidJSON
- 6. Ошибка сравнения двойного типа MySQL
- 7. Назначение двойного от несовместимого типа?
- 8. Отображение фиксированной точки двойного типа
- 9. Ошибка присваивания двойного типа, C++
- 10. Как форматировать переменную двойного типа
- 11. Калькулятор данных двойного типа C#
- 12. Как реализовать метод двойного типа
- 13. Ошибка синтаксического анализа двойного типа в C#
- 14. пользовательский тип даты для преобразования двойного типа
- 15. Число бит, назначенных для двойного типа данных
- 16. Регулярное выражение для любого типа двойного числа
- 17. Получение NaN для двойного типа данных
- 18. аргумента типа двойного несовместим с типом параметра двойного указателем
- 19. дротик двойного типа не позволяет фиксированного формата
- 20. декларация двойного типа поля в качестве нулевого
- 21. Конвертировать тип MATLAB: от сложного двойного до двойного
- 22. Слияние массива двойного типа в Java
- 23. Печать Двойного типа данных в C
- 24. FMINSEARCH принимает только входы типа данных двойного (Matlab)
- 25. Определение длины переменной двойного типа в C
- 26. Преобразование двойного значения в массив типа uint_8
- 27. Длинная проблема двойного типа данных в C
- 28. Атомный приращение двойного типа данных в cassandra
- 29. Sum proble двойного типа в Java
- 30. Поплавок против двойного типа данных в улье
Из документации MATLAB для квантования: «Вход X должен быть ... встроенным целым типом». Таким образом, вы не можете передавать двойной вход. Сначала вы должны перенести на целое число. x = uint32 (y); – siliconwafer
Я не могу отличить свои данные до целого числа, так как я потеряю ценную часть. Мой оригинальный вопрос звучал так, как будто моя проблема заключается в «квантовании», чего нет. Проблема в том, что я не могу получить надежный результат от «uencode». Гистограмма результата имеет множество шипов, где предполагается, что они будут гладкими. Я ищу другой метод для квантования, если он есть. Спасибо за ответ. – csg