2013-06-24 2 views
3

Я делаю эксперименты с различными схемами операционного усилителя, и мне нужно построить мои измеренные результаты на графике. У меня есть два набора данных:Сочетание двух наборов данных и построение графика в 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 кГц (по оси х). На строке CMRR Matlab говорит, что размеры матрицы Ad и Acm не согласуются.

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

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

+1

Если вы используете оператор /, то Matlab предполагается, что вы хотите разделить Матрицы друг от друга. Вы должны использовать ./ для деления векторов Ad и Acm на элемент. Но вы не сможете интерполировать один из векторов на частотные точки другого вектора. –

ответ

2

Я бы использовал 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

+0

Большое вам спасибо! Это намного легче, о чем я думал. – bautrey