【问题标题】:How to create noise on an audio file in matlab如何在matlab中的音频文件上产生噪音
【发布时间】:2021-04-25 13:43:24
【问题描述】:

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

我写了这个,但它没有解决我的问题:

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

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

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

【问题讨论】:

  • 您能否详细说明为什么这会产生噪音y(round(2.85/4*end):end)

标签: matlab audio noise


【解决方案1】:

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

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

添加随机白噪声:

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,1,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],[1.2*min(Noisy_Signal) 1.2*max(Noisy_Signal)],'color','r');
text((End_Time + Start_Time)/2,(max(Noisy_Signal)-min(Noisy_Signal))/2,"Noisy Region",'color','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 运行

【讨论】:

  • 您可能需要注意,此代码只会向音频信号添加噪声。
  • 我赞成。从问题中不清楚要求是1 / f噪声、布朗噪声还是谐波噪声。在问题中使用round 暗示了某种噪声建模。本着 SO 的精神,我认为作者最好先澄清问题
  • 作者可能非常需要白噪声,但此时最好指向现有答案stackoverflow.com/search?q=%5Bmatlab%5Dnoise 并关闭问题
  • 我忽略了非常好的观点。谢谢,我没有考虑他/她可能尝试实施的各种噪声模型。
猜你喜欢
  • 2021-05-13
  • 2020-09-02
  • 2018-10-17
  • 1970-01-01
  • 2014-10-24
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
相关资源
最近更新 更多