Как квантовать сигнал (до k уровней) в MATLAB

У меня есть непрерывный сигнал, который я хочу преобразовать в ступенчатую функцию (я не уверен, какой правильный термин)

Таким образом, каждый образец в нижней части сигнала должен быть заменен на 1, средние на 2 и высокие на 3. И я хочу контролировать размер шагов (в этом примере это 3, но он может меняться)

Как я могу сделать это с MATLAB? Заранее спасибо.

P.S.

Я пробовал quant и ordinal, но не смог.


person jeff    schedule 18.10.2014    source источник


Ответы (3)


Вы хотите что-то вроде этого?

x = randn(1000, 1); % your signal
y = zeros(size(x));
y(x < -1) = 1;
y(x >= -1 & x < 3) = 2;
y(x >= 3) = 3;

Вы можете получить квантили, используя quantile для определения порогов.

person Memming    schedule 18.10.2014
comment
Спасибо, вроде правильно. Однако мне может потребоваться изменить размер шага, например, на 5, в этом случае мне нужно изменить код, верно? - person jeff; 19.10.2014
comment
@halilpazarlama есть ли что-то, что вы не понимаете в этом коде? - person Memming; 19.10.2014
comment
Да. -Как это будет работать с 5 шагами вместо 3-х? - person jeff; 19.10.2014

Вы можете использовать комбинации функции heaviside. Следует отметить, что иногда H(x=0)=0,5.

x=linspace(-1,5);  % your signal to be quantized---- could be anything
y= a*heaviside(x-x1)  + b*heaviside(x-x2) + c;   
% a, b and c decide the heights of your quantization
%   x1 and x2 decide the levels

если вы хотите четвертый уровень, просто используйте следующее

y= a*heaviside(x-x1)  + b*heaviside(x-x2) + c*heaviside(x-x3)  +e;

Функция определена здесь: http://en.wikipedia.org/wiki/Heaviside_step_function

Квантовать до k уровней

    fun=a
    for k=1:n
       fun = fun+ h(i)*heaviside(x-xi(k))
    end
    fun=fun/normalization   % normalization is a number to decide the level of your signal
person Corrupted MyStack    schedule 18.10.2014

Я думаю, что это не совсем то, о чем вы спрашиваете, но может быть полезная информация.

Набор инструментов Matlab с фиксированной точкой может работать с квантованными (ограниченной точностью) числами и арифметикой. Введите "help fi", чтобы увидеть, как объявить число с фиксированной точкой с определенной длиной слова, дробной длиной и знаком. Это особенно полезно для масштабирования двоичной точки (каждая позиция бита в двоичном слове означает степень числа 2).

Вам может понадобиться специальная лицензия для этого набора инструментов.

person Adam W    schedule 19.10.2014
comment
Спасибо, но я ищу способ без инструментов. - person jeff; 19.10.2014