MATLAB声音产生与增加的分贝值(MATLAB sound generation with inc

2019-06-23 09:03发布

这看起来像一些你一个简单的问题,但我不是很熟悉信号处理,我宁愿不清楚了。

所以,我已经发现了一些简单的代码来生成在MATLAB纯音:

Fs = 44100;
duration = 5.0;

numberOfSamples = Fs * duration;
samples = (1:numberOfSamples) / Fs;
s = sin(2 * pi * freq * samples);

sound(s, Fs);

我希望能够调节音量以dB为单位的条款在此。 更确切地说,我想介绍某个参数,说dbOffset ,其中,校准后,确定了基调是多么响亮。

例如:如果我校准使得dbOffset = 0的结果为50 dB的音调,我想dbOffset = 10以导致60分贝,等等。

这可能吗? 任何人都可以请帮我这个?

非常感谢。

Answer 1:

也许所有你需要知道的是,20分贝等于10倍,即

dB = 20 * log10(V / V0)

因此,增加20振幅分贝的峰值需要通过10倍上去,反之-20分贝是10倍的幅度减少。



Answer 2:

的声音的强度(即,如何响它是)由所述声波的幅度来确定。 要增加或减少的正弦的幅度,你有一个比例因子相乘。 一般来说:

 A*sin(2*pi*f)

产生具有A的峰值(并且因此振幅),和频率f Hz的正弦波。 那当然,在连续的世界。

这就是说,要控制你有一些常量乘以它的声音强度。

然后,你要看看该怎么sound功能工作。 从官方文档:

声音函数假定y保存-1和1,以及在该范围以外的剪辑值之间的浮点数。

松散地转化为:如果幅度y等于一体,声卡会发出最响亮的声音就可以了。 糟糕,你面临一个问题:实际的声音强度主要取决于声卡,并连接到PC扬声器上...所以它不是那么容易做出吐出分贝一些声音泛型函数...

如果你只想与概念玩了,也就习惯了,试试:

Fs = 44100;
duration = 2.0;

numberOfSamples = Fs * duration;
samples = (1:numberOfSamples) / Fs;
s = sin(2 * pi * freq * samples);
s2 = 0.5*sin(2*pi*freq*samples);

sound(s, Fs);
sound(s2,Fs);

这将创建一个峰值那是打的第一个高峰值的一半声音。 这并不意味着它有一半的强度,或者,用更好的条件,电力。 正弦波的功率没有线性关系,它的幅度,但是这是一个完全不同的故事。

底线是:做你想要什么,你就必须知道所涉及再现声音的整个系统,你必须知道的一些物理计算功率,然后,就在这时,你就可以写一些代码,通过一些计算恒定的正弦曲线相乘,起着具有指定强度的声波:)



文章来源: MATLAB sound generation with increased dB-value