如何在matlab中的音频文件上产生噪音

问题描述

我想在音频文件上创建噪音,并且能够在我想做的音频文件的任何部分执行此操作..谢谢您的帮助....

我写了这个,但它不能解决我的问题

load handel.mat;
hfile= 'handel.wav';
wavwrite(y,Fs,hfile);
nsamples=Fs;

[y,nbits,readinfo]= wavread(hfile,nsamples);

sound(y(round(2.85/4*end):end),Fs);

解决方法

向信号的特定部分添加噪声

在此示例中,两个名为 Start_TimeEnd_Time 的变量用于指示噪声以秒为单位的开始和结束位置。为了转换这些时间以找到相应的样本索引,我们可以将 Start_TimeEnd_Time 除以 Sampling_Period,即 1/Sampling/Frequency。找到这些索引 Start_SampleEnd_Sample 后,我们可以使用矩阵索引来提取范围之间的信号的特定部分并添加我们的噪声模型。在这种情况下,我只是通过实现 rand() 函数来使用范围从 -1 到 1 的随机向量。下面的代码还概述了注释掉的替代选项,该选项使用 awgn() 函数应用加性高斯白噪声 (AWGN)。根据您的噪声模型,这可能会有所不同。希望概述如何提取/定位一部分音频的代码有所帮助。

Audio Plot Comparison

添加随机白噪声:

load handel.mat
File_Name = 'handel.wav';

audiowrite(File_Name,y,Fs);
[Original_Signal,Sampling_Frequency] = audioread('handel.wav');
Sampling_Period = 1/Sampling_Frequency;

%Selecting region to apply noise (1s to 3s)%
Start_Time = 1; %1 second%
End_Time = 3; %3 seconds%

Start_Sample = Start_Time/Sampling_Period;
End_Sample = End_Time/Sampling_Period;

%Random noise vector%
Noise_Strength = 0.1;
Noise_Vector = Noise_Strength.*(2*rand(1,End_Sample-Start_Sample+1)-1).';
Noisy_Signal = Original_Signal;

%Random Noise%
Noisy_Signal(Start_Sample:End_Sample) = Noisy_Signal(Start_Sample:End_Sample) + Noise_Vector;

%Additive White Gaussian Noise (AWGN)%
% Signal_To_Noise_Ratio = 20;
% Noisy_Signal(Start_Sample:End_Sample) = awgn(Noisy_Signal(Start_Sample:End_Sample),Signal_To_Noise_Ratio);

sound(Noisy_Signal,Sampling_Frequency);

扩展:通过绘图直观

Audio_Properties = audioinfo('handel.wav');
Total_Samples = Audio_Properties.TotalSamples;
t = (0: Sampling_Period: Sampling_Period*(Total_Samples-1));

clf;
subplot(2,1,1); plot(t,Original_Signal);
title("Original Audio Signal");
xlabel("Time (s)"); ylabel("Amplitude");
ylim([1.2*min(Original_Signal) 1.2*max(Original_Signal)]);

subplot(2,2); plot(t,Noisy_Signal);
line([Start_Time Start_Time],[1.2*min(Noisy_Signal) 1.2*max(Noisy_Signal)],'color','r');
line([End_Time End_Time],'r');
text((End_Time + Start_Time)/2,(max(Noisy_Signal)-min(Noisy_Signal))/2,"Noisy Region",'r','HorizontalAlignment','center');
title("Noise Added to Portion of Audio Signal");
xlabel("Time (s)"); ylabel("Amplitude");
ylim([1.2*min(Noisy_Signal) 1.2*max(Noisy_Signal)]);

使用 MATLAB R2019b 运行