这是我第一次将Octave / MATLAB用于此类项目。我对信号处理也很陌生,所以请原谅我缺乏知识。这个项目的最终目标是创建一个mfile,它将能够获取一个将从麦克风录制的wav文件,为其添加一定程度的噪声失真,这将由用户以增量指定,并且还要添加对于将要生成的新wav文件,音频的右声道或左声道的可变起始延迟。
编辑12/29 AM 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录音上,我将非常感激。
答案 0 :(得分:2)
这是一个如何运作的例子。我通过将延迟限制为采样周期的倍数来简化问题。对于48kHz采样率,延迟分辨率约为20us。此方法首先将延迟转换为多个样本,然后将其添加到波形文件中的样本中。其次,产生相同长度的噪声信号,然后将其元素地添加到第一信号。
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;
答案 1 :(得分:1)
几点:
除非我的数学错误(完全可能),否则典型的44 kHz音频采样率无法检测到10到300 ns的延迟。您需要处于MHz采样率范围内。
此解决方案假设您的信号是一个通道(单声道)。使用这种格式实现更多频道不应该太难。
为了增加噪音,您可以使用randn并根据您的失真程度进行缩放。我建议修补你乘以它的价值。或者,您可以使用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');