这是我第一次在这种项目中使用Octave/MATLAB。我也是全新的信号处理,所以请原谅我的知识不足。该项目的最终目标是创建一个mfile,该文件将能够从麦克风中获取一个wav文件,向该文件添加一定程度的噪声失真,该失真将由用户递增地指定,并为将要生成的新wav文件的音频的左右通道添加可变的启动延迟。
编辑12:29AM 5/13/14我有一个更清楚的想法,现在需要发生什么后,与合作伙伴讨论的目标和设备,现在需要找出如何解决这些空白。延迟极有可能在10到300 ns之间最大,噪声强度应从0到5,从静音到重静。
clear;
delay=input('Delay in ns: ');
noise=input('Level of distortion: );
[y,Fs,nbits]=wavread(filename);
generate some noise same length and sampling as file
[newy,Fs]=[y+y2,Fs];
shift over wave x many nanoseconds
wavwrite(newy,Fs,'newwave');任何帮助目前的目标组合信号或如果你可以帮助产生噪音,以覆盖到任何大小的.wav录音,我将非常感激。
发布于 2014-05-13 05:56:53
下面是一个例子,说明它是如何工作的。我简化了这个问题,把延迟限制在样本周期的倍数上。对于48 the采样率,延迟分辨率约为20 is。此方法首先将延迟转换为多个样本,然后将延迟转换为波形文件中的样本。第二,产生相同长度的噪声信号,然后将其依次添加到第一信号中。
noiseLevel = input('Level of distortion: '); % between 0 and 1 - 0 means all signal
- 1 means all noise
delaySeconds = input('Delay in seconds: '); % in seconds
[y,fs,nbits] = wavread(filename);
% figure out how many samples to delay. Resolution is 1/fs.
delaySamples = round(delaySeconds * fs);
% signal length
signalLength = length(y) + delaySamples;
% generate noise samples
noiseSignal = gennoise(signalLength); % call your noise generation function.
% prepend zeros to the signal to delay.
delayedSignal = vertcat(zeros(delaySamples,1), y);
combinedSignal = noiseLevel*noiseSignal + (1-noiseLevel)*delayedSignal;发布于 2014-05-13 06:06:28
以下几点:
除非我做错了我的数学(完全可能),一个10到300 ns的延迟是无法检测到的典型的44 kHz音频采样率。你需要在MHz抽样率范围内。
此解决方案假定您的信号是一个通道(单通道)。使用这种格式实现更多的通道应该不会太困难。
为了增加噪音,你可以使用随机,并根据你的失真程度来缩放它。我建议修改一下你把它乘以的值。或者,您可以使用awgn添加高斯白噪声。我确信有其他方法可以添加其他类型的噪声,不管是在傅里叶还是时域,但是您可以查看这些。
如果您想要在延迟期间的噪音,切换两者的顺序。
提醒您可以使用声音(newy,Fs)来查看您是否喜欢您的结果。
clear;
delay=input('Delay in ns: ');
noise=input('Level of distortion: );
[y,Fs,nbits]=wavread(filename);
% Add random noise to signal
newy = y + noise*0.1*randn(length(y),1);
% shift over wave x many nanoseconds
num = round(delay*1e-9*Fs); % Convert to number of zeros to add to front of data
newy = [zeros(num,1); newy]; % Pad with zeros
wavwrite(newy,Fs,'newwave');https://stackoverflow.com/questions/23619852
复制相似问题