【问题标题】:How to quantize signal (to k levels) in MATLAB如何在 MATLAB 中量化信号(到 k 级)
【发布时间】:2014-10-18 21:27:43
【问题描述】:

我有一个连续信号,我想将其转换为阶梯函数(我不确定正确的术语是什么)

所以信号下部的每个样本都应该替换为1,中间的2和高的3。并且我想控制步长的大小(在这个例子中是3,但它可以改变)

我怎样才能用 MATLAB 做到这一点?提前致谢。

附言

我尝试了quantordinal,但还是不行。

【问题讨论】:

    标签: matlab signal-processing quantization


    【解决方案1】:

    你想要这样的东西吗?

    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 获取分位数来确定阈值。

    【讨论】:

    • 谢谢,看来是正确的。但是,例如,我可能需要将步长更改为 5,在这种情况下,我需要更改代码对吗?
    • @halilpazarlama 这段代码有什么你不明白的地方吗?
    • 是的。 -How- 它会用 5 个步骤而不是 3 个步骤工作吗?
    【解决方案2】:

    您可以使用 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
    

    【讨论】:

      【解决方案3】:

      我认为这不是您要问的,但它可能包含一些有用的信息。

      Matlab 定点工具箱可以处理量化(有限精度)数字和算术。键入“help fi”以查看如何声明具有特定字长、小数长度和符号的定点数。这对于二进制点缩放特别有用(二进制字中的每个位位置表示 2 的幂)。

      您可能需要此工具箱的特殊许可证。

      【讨论】:

      • 谢谢,但我正在寻找一种非工具箱方式。
      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2011-08-19
      • 2014-07-25
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多