这看起来像一些你一个简单的问题,但我不是很熟悉信号处理,我宁愿不清楚了。
所以,我已经发现了一些简单的代码来生成在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分贝,等等。
这可能吗? 任何人都可以请帮我这个?
非常感谢。
也许所有你需要知道的是,20分贝等于10倍,即
dB = 20 * log10(V / V0)
因此,增加20振幅分贝的峰值需要通过10倍上去,反之-20分贝是10倍的幅度减少。
的声音的强度(即,如何响它是)由所述声波的幅度来确定。 要增加或减少的正弦的幅度,你有一个比例因子相乘。 一般来说:
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);
这将创建一个峰值那是打的第一个高峰值的一半声音。 这并不意味着它有一半的强度,或者,用更好的条件,电力。 正弦波的功率没有线性关系,它的幅度,但是这是一个完全不同的故事。
底线是:做你想要什么,你就必须知道所涉及再现声音的整个系统,你必须知道的一些物理计算功率,然后,就在这时,你就可以写一些代码,通过一些计算恒定的正弦曲线相乘,起着具有指定强度的声波:)