MATLAB вычисляет дельту между нанесенными линиями

Я создаю этот график (сокращенная версия кода):

k = 1000
r = [100 220 470 1*k 2200 4700 10*k 22*k 47*k 100*k 220*k 470*k 1000*k ]

unModNB = [0.72 0.746 0.801 0.92 1.16 1.69 2.78 4.6 6.45 9.1 11.2 12.4 13.2]
unModWB = [1.124 1.17 1.23 1.48 1.84 2.65 4.2 7.6 11.8 15.4 18.6 20.01 21.7]

ModNBdB = 20*log10( ModNB)
ModWBdB = 20*log10( ModWB)

semilogx( r,  ModNBdB, r, ModWBdB )
grid
legend(Line 1 ', 'Line 2')

Как я могу построить другой график дельты между линией 1 и линией 2 по интервалам дельты по всей шкале?

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

Большое спасибо за любую помощь,

Ed.


person Edward Prentice    schedule 10.05.2014    source источник


Ответы (1)


Я считаю, что вы хотите интерполировать между точками unModNB и unModWB и вычислить различия (дельты, как вы говорите) между ними. Для этого вы можете использовать interp1(). Попробуй это:

k = 1000;
r = [100 220 470 1*k 2200 4700 10*k 22*k 47*k 100*k 220*k 470*k 1000*k ];

unModNB = [0.72 0.746 0.801 0.92 1.16 1.69 2.78 4.6 6.45 9.1 11.2 12.4 13.2];
unModWB = [1.124 1.17 1.23 1.48 1.84 2.65 4.2 7.6 11.8 15.4 18.6 20.01 21.7];

ModNBdB = 20*log10( unModNB );
ModWBdB = 20*log10( unModWB );

semilogx( r, ModNBdB, r, ModWBdB )
grid
legend('Line 1', 'Line 2')

sampled_x_vals = linspace(r(1),r(end),1000);

unModNB_sampled = interp1(r, unModNB, sampled_x_vals, 'pchip');
unModWB_sampled = interp1(r, unModWB, sampled_x_vals, 'pchip');

deltas = unModWB_sampled-unModNB_sampled;
figure, semilogx(sampled_x_vals,deltas), grid;

Если под «дельтами» вы имеете в виду нечто иное, чем разницу, пожалуйста, поясните.

person Chuck    schedule 10.05.2014
comment
Замечательно, я попробую, когда вернусь к этому. Под дельтой я действительно имел в виду разницу между двумя строками, я имел в виду формулировку, чтобы прояснить, что я хочу сделать, в то время как, как вы меня научили, интерполирую. Большое спасибо, я постараюсь понять, что вы сделали, и реализовать это через несколько часов, вернусь к репутации! - person Edward Prentice; 11.05.2014
comment
Я изучил ваш код и понял его, я думаю, но не ожидал, что он произведет то, что он сделал. График, созданный моим кодом, имеет разницу примерно в 4 между нанесенными линиями при r = 10 ^ 2. Сюжет, создаваемый вашим кодом, начинается примерно с 0,4. В конце концов, это кажется правильным. Может ли это быть из-за неправильной формы интерполяции? - person Edward Prentice; 11.05.2014