2017-02-20 41 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

Теперь я играю розовый шум, и добавить эту небольшую часть кода, чтобы преобразовать его в дБ, так что я могу получить кривую частотную характеристику:

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

Я ожидаю (или моя цель ..) кривая частотной характеристики (как вы можете найти на Google картинки, например, у меня не хватает репутации более 2 ссылок, так жаль, что я Ждут» t используйте ссылку на картинку здесь), но я получил это вместо:

this

Очевидно, что я делаю что-то неправильно, но я не знаю, что ..

+0

Хм, я мало что знаю об этом, но почему этот розовый шум часто ошибочен? что вы ожидаете? –

+0

Моя цель - получить что-то вроде этого: http://www.acoustics.salford.ac.uk/acoustics_info/microphones/microphones_files/image013.jpg Шахта даже не около 0 дБ, или нет плоской линии или чего-то еще .. –

+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 для вычисления передаточной функции между стимулирующим сигналом (т.е. опорного аудио сигнала) и ответом (то, что вы измеряете с микрофоном).