我正在使用不同的运算放大器电路进行实验,我需要将测量结果绘制到图表上。我有两个数据集:
freq1 = [.1 .2 .5 .7 1 3 4 6 10 20 35 45 60 75 90 100]; %kHz
Vo1 = [1.2 1.6 1.2 2 2 2.4 14.8 20.4 26.4 30.4 53.6 68.8 90 114 140 152]; %mV
V1 = 19.6;
Acm = Vo1/(1000*V1);
和
freq2 = [.1 .5 1 30 60 70 85 100]; %kHz
Vo1 = [3.96 3.96 3.96 3.84 3.86 3.88 3.88 3.88]; %V
V1 = .96;
Ad = Vo1/(2*V1);
(我会展示我的情节,但显然我需要更多代表)
我需要绘制等式CMRR
vs freq:
CMRR = 20*log10(abs(Ad/Acm));
Ad
和Acm
的大小不同,频率点不匹配,但两者的边界相同,100Hz到100kHz(x轴)。在CMRR
的行上,Matlab表示Ad
和Acm
矩阵维度不一致。
我认为我会解决这个问题的方法是使用freq1作为CMRR
的x轴,然后根据Ad
上的值取freq1
的近似点。
或者我可以对Ad
和Acm
进行函数逼近,然后对它们执行除法运算符。
我不知道如何编写这两个想法。任何其他想法都会有所帮助,尤其是更简单的想法。
答案 0 :(得分:2)
我会使用union
来获得统一的频率轴,然后使用interp1
来插入数据点。我们需要注意Martin的建议并使用./
运算符进行逐元素操作。这是一个例子:
Acm = Vo1./(1000*V1);
Ad = Vo1./(2*V1);
freq = union(freq1,freq2)
Acmi = interp1(freq1,Acm,freq);
Adi = interp1(freq2,Ad,freq);
% test the goodness of the interpolation
figure; plot( freq1, Acm, freq, Acmi );
legend('origial A_{cm}', 'interolated A_{cm}','Location','NorthWest');
figure; plot( freq2, Ad, freq, Adi );
legend('origial A_{d}', 'interolated A_{d}');
然后绘制输出:
CMRR = 20*log10(abs(Adi./Acmi));
plot( freq, CMRR )
title('Common Mode Rejection Ratio')
xlabel('Frequency(Hz)')
ylabel('CMMR (dB)')
这是我的最终情节: