首页 > 解决方案 > 为什么使用fft后低频幅度远低于高频幅度?

问题描述

我使用 matlab 生成声音,然后通过计算机的扬声器播放,同时我使用 iphone 录制声音,最后我将“record.wav”文件发送到计算机进行分析。但是在这里我发现低频的幅度远低于高频的幅度。

声音生成代码看起来像A*sin(2*pi*697*(0:N-1)/44100)+A*sin(2*pi*1209*(0:N-1)/44100如果我想为数字 1 生成拨号音,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

标签: matlabsignal-processing

解决方案


输出声音的扬声器和您所在的房间(由于多路径反射和共振)很可能在该频率范围内没有平坦的频率响应。由于与扬声器或 iPhone 接触而产生的任何机械共振也会在不同频率下以不同的量改变接收到的音频电平。(iPhone 的麦克风可能更接近平坦的频率响应,但并不完美。)因此,即使将变量 A 设置为常数,某些频率也会被记录为比其他频率更强。

尝试在您想要的频率范围内一次测试一个频率,并测量您的通道的响应。当改变房间中扬声器、麦克风或其他大型物体的位置时,频率响应曲线甚至可能发生很大变化。


推荐阅读