首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB -结合不同长度和采样的.wav文件

MATLAB -结合不同长度和采样的.wav文件
EN

Stack Overflow用户
提问于 2014-05-12 22:17:42
回答 2查看 3.9K关注 0票数 1

这是我第一次在这种项目中使用Octave/MATLAB。我也是全新的信号处理,所以请原谅我的知识不足。该项目的最终目标是创建一个mfile,该文件将能够从麦克风中获取一个wav文件,向该文件添加一定程度的噪声失真,该失真将由用户递增地指定,并为将要生成的新wav文件的音频的左右通道添加可变的启动延迟。

编辑12:29AM 5/13/14我有一个更清楚的想法,现在需要发生什么后,与合作伙伴讨论的目标和设备,现在需要找出如何解决这些空白。延迟极有可能在10到300 ns之间最大,噪声强度应从0到5,从静音到重静。

代码语言:javascript
复制
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录音,我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-13 05:56:53

下面是一个例子,说明它是如何工作的。我简化了这个问题,把延迟限制在样本周期的倍数上。对于48 the采样率,延迟分辨率约为20 is。此方法首先将延迟转换为多个样本,然后将延迟转换为波形文件中的样本。第二,产生相同长度的噪声信号,然后将其依次添加到第一信号中。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-05-13 06:06:28

以下几点:

除非我做错了我的数学(完全可能),一个10到300 ns的延迟是无法检测到的典型的44 kHz音频采样率。你需要在MHz抽样率范围内。

此解决方案假定您的信号是一个通道(单通道)。使用这种格式实现更多的通道应该不会太困难。

为了增加噪音,你可以使用随机,并根据你的失真程度来缩放它。我建议修改一下你把它乘以的值。或者,您可以使用awgn添加高斯白噪声。我确信有其他方法可以添加其他类型的噪声,不管是在傅里叶还是时域,但是您可以查看这些。

如果您想要在延迟期间的噪音,切换两者的顺序。

提醒您可以使用声音(newy,Fs)来查看您是否喜欢您的结果。

代码语言:javascript
复制
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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23619852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档