增加dB值的MATLAB声音生成



这对你们中的一些人来说可能是一个简单的问题,但我对信号处理不是很熟悉,我宁愿对此有把握。

因此,我找到了一些在MATLAB中生成纯音的简单代码:

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

我希望能在这里用分贝来调整音量。更准确地说,我想引入一个特定的参数,比如dbOffset,它在校准后决定了音调的音量

例如:如果我校准使dbOffset = 0产生50 dB的音调,我希望dbOffset = 10产生60 dB,依此类推

这可能吗?有人能帮我吗?

非常感谢。

声音的强度(即声音的大小)由声波的振幅决定。要增大或减小正弦的振幅,必须将其乘以比例因子。一般来说:

 A*sin(2*pi*f)

产生峰值(因此振幅)为a且频率为fHz的正弦波。当然,在连续的世界里。

也就是说,要控制声音强度,你必须将其乘以某个常数。

然后,您必须了解sound函数是如何工作的。来自官方文件:

sound函数假定y包含介于-1和1之间的浮点数,并剪裁该范围之外的值。

粗略地翻译为:如果振幅y等于1,声卡将发出最大的声音。哦,你面临一个问题:实际的声音强度主要取决于声卡和连接到电脑的扬声器……所以要制作一个以分贝为单位发出声音的通用功能并不容易。。。

如果你只想玩这个概念,并习惯它,试试:

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);

这将创建一个峰值为第一个播放的声音峰值的一半的声音。并不意味着它有一半的强度,或者用更好的术语来说,是功率。正弦曲线的功率与其振幅不是线性相关的,但这是一个完全不同的故事。

底线是:要想做你想做的事,你必须知道复制声音所涉及的整个系统,你必须了解一些物理知识来计算功率,然后,就在那时,你将能够编写一些代码,将正弦曲线乘以一些计算出的常数,播放具有指定强度的声波:)

您可能只需要知道20 dB等于10的因子,即

dB = 20 * log10(V / V0)

因此,要将振幅增加20 dB,峰值需要增加10倍,反之,-20 dB是振幅减少10倍。

最新更新