2017-02-20 79 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計算激勵信號(即參考音頻波形)和響應(你和你的麥克風測量的)之間的傳遞函數。