Matlab:实现混合信噪比
function [noisySignal,requestedNoise] = mixSNR(signal, noise, ratio, varargin)
numSamples = size(signal,1);
% Convert noise to mono
noise = mean(noise,2);
% Trim or expand noise to match signal size
if size(noise,1)>=numSamples
% Choose a random starting index such that you still have numSamples
% after indexing the noise.
start = randi(size(noise,1) - numSamples + 1);
noise = noise(start:start+numSamples-1);
else
numReps = ceil(numSamples/size(noise,1));
temp = repmat(noise,numReps,1);
start = randi(size(temp,1) - numSamples - 1);
noise = temp(start:start+numSamples-1);
end
if nargin == 3
signalNorm = norm(signal);
else
signalNorm = norm(signal(varargin{1}));
end
noiseNorm = norm(noise);
goalNoiseNorm = signalNorm/(10^(ratio/20));
factor = goalNoiseNorm/noiseNorm;
requestedNoise = noise.*factor;
noisySignal = signal + requestedNoise;
end
该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/129368458