我用matlab生成声音,然后在电脑扬声器上播放,同时用iphone录制声音,最后我把"record.wav"文件发送到电脑进行分析。但在这里我发现低频的振幅比高频的振幅低得多。
如果我想为数字1生成拨号音,则声音生成代码看起来像A*sin(2*pi*697*(0:N-1)/44100)+A*sin(2*pi*1209*(0:N-1)/44100
,N是我要生成的长度,44100是采样频率。
然后我想使用FFT来分析声音的频率,并绘制FFT输出。虽然我得到了我想要的正确频率,但振幅看起来不同,这让我很困惑。
那么,发生了什么?为什么这两个振幅不同?
[temp,fs] = audioread('record.wav');
[P1,f] = fft_recorder(temp,fs);
function [P1,f] = fft_recorder(array,fs)
array = fft(array);
P2 = abs(array/length(array));
P1 = P2(1:length(array)/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = fs*(0:(length(array)/2))/length(array);
end
输出声音的扬声器和您所在的房间(由于多路径反射和共振(很可能在该频率范围内没有平坦的频率响应。由于与扬声器或iPhone接触而产生的任何机械共振也会在不同频率下以不同的量改变接收到的音频水平。(iPhone的麦克风可能更接近于具有平坦的频率响应,但并不完美。(因此,即使变量a设置为常数,某些频率也会被记录为比其他频率更强。
试着在你想要的频率范围内一次测试一个频率,并测量你的频道的响应。当改变扬声器、麦克风或房间中其他大型物体的位置时,频率响应曲线甚至可能发生很大变化。