【发布时间】:2015-05-08 00:20:06
【问题描述】:
我试图通过扬声器播放 20Hz 到 20KHz 的啁啾声并将扬声器输出声音文件与原始输入声音文件进行比较来获得扬声器的频率响应。这是我到目前为止所拥有的,但情节看起来并不像我期望的那样。 Y 轴似乎不是以 dB 为单位的。我也可能做错了,我不确定。任何帮助是极大的赞赏。谢谢!
[y,fs] = wavread('LogChirp.wav');
[x,fs] = wavread('bose sweep 2 feet.wav');
y = reshape([y;zeros(145824-144000,1)],145824,1);
ydft = fft(x)./fft(y);
% Assume y has even length
ydft = ydft(1:length(y)/2+1);
% create a frequency vector
freq = 0:fs/length(y):fs/2;
% plot magnitude
ydft1 = smooth(ydft,.1);
p = semilogx(freq,ydft1);
p = plot(freq,abs(ydft));
set(p, 'Color', 'blue', 'LineWidth', 1);
xlabel('Frequency (Hz)');
ylabel('');
title('Frequency Response');
grid on;
%axis([20,20e3,-1,1]);
【问题讨论】:
-
看看
pwelch,更好的频谱估计。除此之外,您可以通过这种方式估计的是扬声器和用于再次拾取声音的麦克风的组合频率响应。除非您现在了解麦克风的特性,否则无法将两者分开。 -
y轴可能在数量级上。如果要转换为 dB,请使用20*log10(abs(ydft))。
标签: matlab fft frequency frequency-analysis speaker