跨音频频带的恒定幅度啁啾(Parseval 定理?)

信息处理 fft matlab 频谱 频率响应
2022-01-12 10:29:25

我想激发一个具有恒定幅度啁啾声的扬声器,该啁啾声扫过音频频带中的所有频率。我从这个Audio Check - High Definition Audio Test Files下载了一个测试文件

我使用以下代码绘制文件的对数大小,我也将其用于其他应用程序。

[X Fs nbits] = wavread('audiocheck.net_hdchirp_96k_-3dBFS_log.wav');
X = X(:,1);
fft_prep = fftshift(fft(X));
fft_mag = real(fft_prep).^2 + imag(fft_prep).^2;
pos_fft=fft_mag(ceil(length(fft_mag)/2+1:length(fft_mag)));
db_fft=20*log10(pos_fft);
figure(1);
plot(linspace(0,48000,length(db_fft)), db_fft);

我看到这张图:

扫

我希望看到一个恒定的幅度响应。我的一个朋友提到了Parseval 定理如何指出在不同频率下会有不同的能量。我找到了这个关于 Parseval 定理的链接,并且在“光谱特征和啁啾的能量”一节中也说:

为了提高宽带测量的质量,激励信号的重要和期望的频谱特性是: 具有最小波动(波纹)的平坦幅度谱以及在生成的(激励)带宽内没有过冲 Bexc =ffin - fst;带宽 Bexc 之外的幅度谱急剧下降;最大能量效率,即位于生成(激励)带宽 Bexc 内的能量与信号总能量之间的比率。

好唧唧喳喳

为了避免担心别人发出的唧唧声。我也试图在 Matlab 中生成一个啁啾声,我看到以下响应:

t = 0:0.001:10;      % 10 seconds @ 1kHz sample rate
fo = 10; f1 = 400;   % Start at 10Hz, go up to 400Hz
X = chirp(t,fo,10,f1,'logarithmic');
fft_prep = fftshift(fft(X));
fft_mag = abs(fft_prep);
pos_fft = fft_mag(ceil(length(fft_mag)/2)+1:length(fft_mag));
db_fft = 20*log10(pos_fft);
figure(1);
plot(linspace(fo,f1,length(db_fft)), db_fft);

在此处输入图像描述

如何在 Matlab 的音频范围内生成相对恒定的幅度扫描,如上图 8 所示?欢迎任何建议,我感谢您的帮助。

1个回答

如果更改“X = chirp(t,fo,10,f1,'logarithmic');” "X = chirp(t,fo,10,f1,'linear');" 你会得到你想要的回应。

为了使能量相等,它必须在每个频率上花费相等的时间。通过线性扫描,它可以做到这一点。对于对数扫描,它在较低频率上花费更多时间,而在较高频率上花费更少时间,从而导致能量不等。