Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 获取麦克风的频率响应_Matlab_Response_Frequency_Microphone_Frequency Analysis - Fatal编程技术网

Matlab 获取麦克风的频率响应

Matlab 获取麦克风的频率响应,matlab,response,frequency,microphone,frequency-analysis,Matlab,Response,Frequency,Microphone,Frequency Analysis,我正试图从一个麦克风上得到一个频率响应曲线,我已经连接到我的电脑,使用matlab 我想我很快就能得到最后的代码了,但我想我遗漏了一些东西 这就是我现在拥有的: close all, clear all, clc x = 5; % seconds recording Fs = 44100; % Sampling frequency T = 1/Fs; % Sample ti

我正试图从一个麦克风上得到一个频率响应曲线,我已经连接到我的电脑,使用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的音调时,我得到以下曲线图:

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

dbX = db(X);
plot(f,dbX)
我期望(或我的目标是…)一个频率响应曲线(例如,你可以在谷歌图片上找到,我没有足够的声誉来建立超过2个链接,所以很抱歉我没有在这里使用图片链接),但我得到了这个:


很明显我做错了什么,但我不知道是什么

你比你想象的要近。这里有三个小贴士可以让你更靠近一点

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

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

最后,为了得到相对响应,从数据中减去平均值<代码>dbx_相对=dbx平均值(dbx)

总而言之:

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

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

哼,我对此不太了解,但是,为什么粉色噪声频率图错了?你在期待什么?我的目标是得到这样的东西:我的甚至不在0dB左右,或者不是一条平线什么的..那只是缩放的问题,信号。还请注意,图中显示的是“相对响应”。