【问题标题】:Adding noise to a vector向矢量添加噪声
【发布时间】:2014-07-26 04:19:27
【问题描述】:

我有一个带有浮点数的向量,例如:

Vect = [15.123, 21.345, 35.567, 45.362];

我需要的是仅对小数点后的数字应用高斯噪声。例如,取向量 [123, 345, 567, 362],然后在其上应用噪声。因此,替换Vect中的噪声向量。

我知道要添加高斯噪声,可以如下进行:

noisy_vector = imnoise(Vect, 'gaussian');

但我有兴趣仅将噪声添加到 Vect 中小数点后的数字(自动),以获得嘈杂的 Vect

任何帮助将不胜感激!

【问题讨论】:

  • 我认为“逗号”是指“小数点”。
  • 完全正确 :) 抱歉,我编辑了我的问题
  • 只需添加幅度为1.1 的高斯噪声...或者您可以提取像mod(Vect,1) 这样的数字,或者您可能更喜欢mod(Vect,1)*100。但基本上,你的问题并没有任何意义,因为你没有指定你想要的噪声参数(即平均值和标准差)
  • 当我没有添加均值和方差时,所以在这种情况下,默认情况下均值等于 0,方差等于 0.01 :) ,但是你能写一个包含如何添加的答案吗? Vect 上的噪音,但仅在小数点后的数字上?非常感谢您的帮助
  • 类似这样,使用 Dan 的评论 - noisy_vector = imnoise(mod(Vect,1), 'gaussian',0,0.01) + floor(Vect)?

标签: image-processing vector matlab


【解决方案1】:

代码

%// Input
Vect = [15.123, 21.345, 35.567, 45.362]

%// Extract the decimal parts from the vector elements
decimal_part = Vect - floor(Vect)

%// Add gaussian noise to it with zero mean and 0.01 variance using imnoise
noisy_decimal_part = imnoise(decimal_part, 'gaussian',0,0.01)

%// Put the noisy part back to Vect to get the desired output
noisy_Vect =  noisy_decimal_part + floor(Vect)

代码运行输出

Vect =
   15.1230   21.3450   35.5670   45.3620
decimal_part =
    0.1230    0.3450    0.5670    0.3620
noisy_decimal_part =
    0.2254    0.3554    0.4914    0.2918
noisy_Vect =
   15.2254   21.3554   35.4914   45.2918

【讨论】:

  • 感谢您的代码。你知道高斯噪声方差的最大值是多少吗?默认为 0.01,但最大值是多少?盐和胡椒的最大值是多少?
  • @Christina 好吧,我对一个非常大的 rand Vect 进行了快速测试,并将输入方差从 0.1 逐渐增加到 1E10,并测量了输出的方差。输出方差为 0.25 时达到收敛。所以这可能是高斯的。
  • 那么盐和胡椒呢? 0.35是最大值吗?
  • @Christina 好吧,我可以将输入从0 增加到1,只是因为它抛出的错误超出了1,并且输出方差也恰好达到了0.25。所以我猜标准普尔也一样。您可能希望通过这些可靠的来源进行检查! :)
  • 非常感谢您的帮助:)
【解决方案2】:

试试这个代码:

Vect = [15.123, 21.345, 35.567, 45.362];
dec=cellfun(@num2str,num2cell(Vect),'UniformOutput',false);
Vect_dec=regexp(dec,'\.','split');
mat=vertcat(Vect_dec{:});
dec_col=str2num(str2mat(mat(:,2)));
noisy_vector = imnoise(dec_col, 'gaussian');

此代码将分隔向量中每个条目的小数点后的数字,然后对其应用高斯噪声。 请注意,这只适用于包含所有浮点数的vector

【讨论】:

    【解决方案3】:

    您可以使用randn() 函数从均值为零的正态分布生成随机数,标准差为 1。其中大多数的绝对值小于 1。如果您真的担心不改变元素的整数部分,然后您可以将随机数除以 10。

    【讨论】:

      【解决方案4】:

      您不能添加高斯噪声并让小数点前的数字始终保持不变,因为高斯随机变量可以取 -infinity 和 +infinity 之间的值

      如果你想随机化小数点后的数字并且只随机化它们,你可以这样做

      Vect = [15.123, 21.345, 35.567, 45.362]
      VectInt=floor(Vect)
      noise=rand(size(Vect))
      NoisyVect=VectInt+noise
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 2018-03-05
        • 2016-06-29
        • 2020-11-01
        • 2018-01-24
        • 2013-10-17
        相关资源
        最近更新 更多