音频测试中常用音源包括:白噪、粉噪(粉噪由于模拟人耳,常用来测量扬声器响度)
生成音源文件的方式:CoolEdit、Matlab
function WhiteNoise = generateWhiteNoise(Fs,t,Amp)
%% 通过randn函数生成高斯白噪声
N = t*Fs; %采样点数
WhiteNoise = randn(1,N)';
WhiteNoise = WhiteNoise * 10^(Amp/20); %产生白噪
%% 计算功率谱和功率密度谱
% X = fft(WhiteNoise(1:N));
% noise_pw = (abs(fft((WhiteNoise(1:N))'))).^2/N; %功率谱
% noise_psd = (abs(fft((WhiteNoise(1:N))'))).^2/N/Fs; %功率谱密度
% f = (Fs/length(X))*[0:(length(X)-1)];
% ind = find(f<Fs/2);
% f = f(ind);
% X = X(ind);
% noise_pw = noise_pw(ind);
% noise_psd = noise_psd(ind);
% f = f';
% subplot(131);
% plot(t/N:t/N:t,WhiteNoise,'r');
% xlabel('Time [s]');
% subplot(132);
% plot(f,noise_pw,'r');
% grid on;
% xlabel('Frequency [Hz]');
% ylabel('功率谱');
% subplot(133);
% plot(f,noise_psd,'r');
% grid on;
% xlabel('Frequency [Hz]');
% ylabel('功率谱密度 [W/Hz]');
% sound(WhiteNoise);
end
function pinknoise = generatePinkNoise(Fs,t,Amp)
%% 生成白噪
WhiteNoise = randn(Fs*t+1,1);
%% 通过滤波实现粉噪每倍频能量一致
b=zeros(7,1);
PinkNoise = zeros(((Fs*t)+1),1);
for i=1:((Fs*t)+1)
b(1) = 0.99886 * b(1) + WhiteNoise(i) * 0.0555179;
b(2) = 0.99332 * b(2) + WhiteNoise(i) * 0.0750759;
b(3) = 0.96900 * b(3) + WhiteNoise(i) * 0.1538520;
b(4) = 0.86650 * b(4) + WhiteNoise(i) * 0.3104856;
b(5) = 0.55000 * b(5) + WhiteNoise(i) * 0.5329522;
b(6) = -0.7616 * b(6) - WhiteNoise(i) * 0.0168980;
PinkNoise(i) = b(1) + b(2) + b(3) + b(4) + b(5) + b(6) + b(7) + WhiteNoise(i) * 0.5362;
b(7) = WhiteNoise(i) * 0.115926;
end
%% 归一化
if(abs(min(PinkNoise)) > max(PinkNoise))
PinkNoise = PinkNoise / abs(min(PinkNoise));
else
PinkNoise = PinkNoise / max(PinkNoise);
end
PinkNoise = PinkNoise /abs(((2^31)-1)/(2^31)); %避免出现饱和
PinkNoise = PinkNoise * 10^(Amp/20); %恢复到需要的幅度
pinknoise = PinkNoise(1:end-1);
plot(1/Fs:1/Fs:t,pinknoise);
xlabel('Time [s]');
sound(pinknoise);
end