Объединение двух наборов данных и построение графика в Matlab

Я провожу эксперименты с различными схемами операционных усилителей, и мне нужно нанести результаты измерений на график. У меня есть два набора данных:

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 против частоты:

CMRR = 20*log10(abs(Ad/Acm)); 

Размер Ad и Acm различен, и точки частот не совпадают, но границы обоих одинаковы, от 100 Гц до 100 кГц (ось X). В строке CMRR Matlab говорит, что размеры матрицы Ad и Acm не совпадают.

Как я думаю, я бы решил эту проблему, используя freq1 в качестве оси x для CMRR, а затем беря аппроксимированные точки из Ad в соответствии со значением на freq1. Или я мог бы аппроксимировать функции Ad и Acm, а затем применить к ним оператор деления.

Я не знаю, как бы я закодировал эти две идеи. Любые другие идеи будут полезны, особенно простые.


person bautrey    schedule 24.06.2013    source источник
comment
Если вы используете оператор /, тогда Matlab предполагает, что вы хотите разделить матрицы друг на друга. Вы должны использовать ./ для разделения векторов Ad и Acm поэлементно. Но вы не сможете интерполировать один из векторов в частотные точки другого вектора.   -  person Martin J.H.    schedule 24.06.2013


Ответы (1)


Я бы использовал union, чтобы получить единую ось частот, а затем использовал бы interp1 для интерполяции точек данных. Нам нужно прислушаться к совету Мартина и использовать оператор ./ для поэлементных операций. Вот пример:

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)')

Вот мой последний сюжет:

CMMR

person macduff    schedule 24.06.2013
comment
Большое спасибо! Это намного проще того, о чем я думал. - person bautrey; 24.06.2013