2017-02-20 71 views
3

我试图从我连接到我的电脑的麦克风使用matlab获得频率响应曲线。获取我的麦克风的频率响应

我觉得我非常接近最终的代码,但我想我错过了一些东西。

这就是我现在所拥有的:

close all, clear all, clc 

x = 5;      % seconds recording 
Fs = 44100;     % Sampling frequency 
T = 1/Fs;      % Sample time      
L= x*1000;     % Length of signal 
t = (0:L-1)*T;    % Time vector 


% Record your voice for 'x' seconds. 
recObj = audiorecorder(Fs, 24, 1); 
disp('Start of Recording.'); 
recordblocking(recObj, x); 
disp('End of Recording.'); 
% Store data in double-precision array. 
myRecording = getaudiodata(recObj); 

NFFT = 2^nextpow2(L); % Next power of 2 from length of y 
fourier = fft(myRecording); 
Y = fft(myRecording,NFFT)/L; 
f = Fs/2*linspace(0,1,NFFT/2+1); 
X = 2*abs(Y(1:NFFT/2+1)); 
samples = get(recObj,'TotalSamples'); 

plot(f,X) 
title('Single-Sided Amplitude Spectrum) 
xlabel('Frequency (Hz)') 
ylabel('|Y(f)|') 

的这部分代码是正确的,我认为。 例如,当我玩的5kHz的语气我得到这个情节: this

现在我玩粉红噪声,并添加代码,将其转换为dB的这一小部分,所以我可以得到的频率响应曲线:

dbX = db(X); 
plot(f,dbX) 

我希望(或我的目标是..)的频率响应曲线(你可以找到关于谷歌的图像,例如,我没有超过2个链接足够的声誉,很抱歉我没”这里使用图片链接),但我得到了这个:

this

显然我做错了什么,但我不知道是什么..

+0

嗡嗡声,我不太了解这个,但是,为什么粉红噪声频率图错误?你在期待什么? –

+0

我的目标是得到这样的东西:http://www.acoustics.salford.ac.uk/acoustics_info/microphones/microphones_files/image013.jpg 煤矿甚至不在0dB左右,或者不是一条扁平线或某种东西.. –

+2

这只是一个缩放的问题,信号。还要注意情节说'相对响应'。 – mpaskov

回答

0

你比你想象的更近。这里有三个秘诀让你更近一点。

首先,您需要频域数据的对数图。使用semilogx()而不是情节。

其次,你需要平滑数据。 Matlab中最简单的功能是smooth(),但还有更高级的选项可以更好地满足您的需求。

最后,为了获得相对响应,从您的数据中减去平均值。 dbx_relative = dbx-mean(dbx)

全部放在一起:

dbX = db(X); 
relative_dbx = dbx-mean(dbx); 
smoothed_dbx = smooth(relative_dbx); 
semilogx(f,smoothed_dbx); 
0

使用pwelch计算激励信号(即参考音频波形)和响应(你和你的麦克风测量的)之间的传递函数。