建立一个自动均衡器

时间:2019-07-11 10:38:58

标签: matlab audio scientific-computing equalizer transfer-function

我必须做一个自动均衡器。 我测量了在MATLAB中生成的一组频率的幅度(31.5 Hz,63 Hz,125 Hz,250 Hz,500 Hz,1000 Hz,2000 Hz,4000 Hz,8000 Hz和16000 Hz)。例如,我首先使用以下命令生成了31.5 Hz的信号:

f = 31.5;
fs = 44100;  
ts = 1/44100; 
T=10; 
t=0:ts:T-ts;

y=sin(2pif*t); 
sound(y,fs); 

此信号将通过以下方式与扬声器一起发射到麦克风:

info = audiodevinfo 
support = audiodevinfo(1,1,fs,16,1) 
recObj = audiorecorder(fs, 16, 1); 
get(recObj) 

disp('start recording')

recordblocking(recObj, 10);
y = getaudiodata(recObj); 
audiowrite('signal31.wav',y,fs) 

disp('end') 

我在“隔声房间”(被子里)和房间的正常条件下(被子外面)测量每个频率。有人告诉我,应该从每个测量值中知道最大振幅以及最大振幅之间的差。在隔离房间(防音-> sp)中发射的信号的幅度和最大值。振幅或正常情况下在房间内发射的信号,并获得如下差异(xmax):

[x_room31, fs] = audioread('signal_room31.wav');
[x_sp31, fs] = audioread('signal_sp31.wav'); 
xmax_room31 = max(abs(x_room31));
x_room31 = x_room31/xmax_room31;
xmax_sp31 = max(abs(x_sp31));
x_sp31 = x_sp31/xmax_sp31;
dxmax31 = xmax_room31-xmax_sp31

我必须使用获得的delta x max(dxmax),以某种方式将其值添加到均衡器的增益向量中,例如:https://www.mathworks.com/help/audio/examples/graphic-equalization.html

例如,有一个eq.Gains = [4, 4.2, 4.6, 2.7, -3.7, -5.2, -2.5, 2.3, 5.4, 6.5, 6.5]矢量,其中的值以dB为单位。我的问题是我如何才能知道这些值是我刚刚获得并计算出的振幅差的函数?

我想制作一个均衡器,以均衡我的实验幅度值(针对每个频率)。我以为隔离的房间获得的值将是我的参考,并且在此参考的作用下,我还将获得我要进行均衡的房间的反馈。所有这些东西都是作为幅度获得的,但是在这样的均衡器中,我必须改变幅度。

如何获取作为振幅函数的增益矢量?

0 个答案:

没有答案