我有一个带浮点数的向量,例如:
Vect = [15.123, 21.345, 35.567, 45.362];
我需要的是将高斯噪声仅应用于小数点后的数字。例如,取矢量[123,345,567,362],然后在其上应用噪声。因此,请替换Vect
中的噪声向量。
我知道要添加高斯噪声,可以按如下方式执行:
noisy_vector = imnoise(Vect, 'gaussian');
但我感兴趣的是只将噪音添加到Vect中的小数点后面的数字(自动)以获得嘈杂的Vect
。
非常感谢任何帮助!
答案 0 :(得分:1)
试试这段代码:
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
。
答案 1 :(得分:1)
您可以使用randn()
函数从零均值的正态分布生成随机数,标准差为1.大多数的绝对值小于1.如果您真的担心如果不更改元素的整数部分,则可以将随机数除以10。
答案 2 :(得分:1)
你不能添加高斯噪声,并且小数点前的数字始终保持不变,因为高斯随机变量可以取-infinity和+ infinity之间的值
如果你想将小数点后面的数字随机化,只有它们,你可以这样做
Vect = [15.123, 21.345, 35.567, 45.362]
VectInt=floor(Vect)
noise=rand(size(Vect))
NoisyVect=VectInt+noise
答案 3 :(得分: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