Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Трехмерная графика из матрицы в Matlab
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
Acvarif
Имеется код который формирует две двумерные матрицы работы 32_канального КИХ фильтра по 16 каналов каждая.
%% инициализация
CODE
clc;
clear all;

f = 90000; % центральная частота Гц
fs = 720000; % удвоенная частота дискретизации Гц
A = 2047; % амплитуда сигнала
ts = 1/fs; % период одного дискрета
tm = 50; % количество проходов участка моделирования
tm_test = tm*8; % общее количество проходов моделирования
td = 5; % коэффициент децимации
w=2*pi*f; % круговая частота
tmin = 0; % начальное время (начальная фаза)
tmax = tm*ts; % конечное время
tmax_test = tm_test*ts; % конечное время

% матрица коэффициентов 51 коэффициент (Equiripple 75-85-95-105 кГц)
kf = [0,-834,0,283,0,-202,0,8,0,307,0,-738,0,1260,0,-1836,0,2417, ...
0,-2947,0,3372,0,-3647,0,3742,0,-3647,0,3372,0,-2947,0, ...
2417,0,-1836,0,1260,0,-738,0,307,0,8,0,-202,0,283,0,-834,0];

% матрица времени
t=linspace(tmin, tmax_test+tmin, fs*tmax_test+1);
% нечетные индексы матрицы времени t
t_odd = 1:2:length(t);
% четные индексы матрицы времени t
t_even = 2:2:length(t);

% матрица сигнала (канал 1 фаза 0)
x1 = A*sin(w*t(t_odd));
x1(1:60) = 0;
x1(140:201) = 0;

% матрица сигнала (канал 2 фаза pi/4)
x2 = A*sin(w*t(t_even));
x2(1:60) = 0;
x2(140:201) = 0;

%% моделирование

zr1=zeros(200,16);
zr2=zeros(200,16);
for tm_all = 1:16
for tm_mod = 1:tm_test/2

% поэлементное умножение
if tm_mod < 150
z1 = x1(tm_mod:(tm_mod+50)).*kf;
z2 = x2(tm_mod:(tm_mod+50)).*kf;
end
% матрица выходных данных КИХ канал 1
zr1(tm_mod,tm_all) = round(sum(z1));
% матрица выходных данных КИХ канал 2
zr2(tm_mod,tm_all) = round(sum(z2));

end
end

% максимальное значение
fprintf('Максимальное значение канал 1 %d\n', max(zr1(:,1)));
fprintf('Максимальное значение канал 2 %d\n', max(zr2(:,1)));
fprintf('\n');

%% графика

% выборки по сигналу x1
figure(1)
plot(x1, 'r');
hold on
stem(x1);

% выборки по сигналу x2
figure(2)
plot(x2, 'r');
hold on
stem(x2);

% графика элементов массива zr1
figure(3)
plot(zr1, 'r'), grid;
hold on
stem(zr1);

% графика элементов массива zr2
figure(4)
plot(zr2, 'r');
hold on
stem(zr2);

Стоит задача нарисовать в трехмерном варианте значения двумерной матрицы zr1. При этом по оси х должны быть номера столбцов матрицы, по оси y номера строк. По оси z - значения данных в строках по каждому столбцу. Подскажите пожалуйста как это оформить в код для функции plot3?
thermit
mesh или surf
Acvarif
Цитата(thermit @ Mar 22 2016, 01:00) *
mesh или surf

Понятно. Значит Plot3 не подойдет.
Пытаюсь нарисовать значения массива zr1 (из программы), но не получается.
Массив zr1 - двумерный массив из 16 строк, каждая из которых имеет 200 элементов выходных данных цифровых фильтров.
Нужно нарисовать значения каждой из 16 строк по 200 элементов в трехмерном варианте
Делаю так:
Код
u = 1:16;
v = lenght(zr1);
[X, Y] = meshgrid(u, v);
Z = zr1;

figure
surf(X,Y,Z)

Выскакивает ошибка
Код
Error using surf...
Data dimensions must agree.
thermit
Код
[b,a]=size(zr1);
surf(1:a,1:b,zr1);
Acvarif
Цитата(thermit @ Mar 22 2016, 12:06) *
Код
[b,a]=size(zr1);
surf(1:a,1:b,zr1);

Спасибо. Работает.
Можно-ли как-то представить данные zr1 в 3D, в виде 16 плоских разноцветных графиков с пробелами между ними?
Похоже нужно использовать fill3.
В лоб не проходит
Код
figure
[b, a] = size(zr1);
fill3(1:a,1:b,zr1);

Ошибка
Код
Error using fill3
Not enough input arguments.
Swup
Такое имеете в виду? Отдельными линиями 16 графиков построятся.

Код
[xsize ysize] = size(zr1');
[X,Y] = meshgrid(1:xsize,1:ysize);
Z = zr1;
plot3(X,Y,Z)


Но это как-то не очень информативно.
Acvarif
Цитата(Swup @ Mar 24 2016, 20:47) *
Такое имеете в виду? Отдельными линиями 16 графиков построятся.

Код
[xsize ysize] = size(zr1');
[X,Y] = meshgrid(1:xsize,1:ysize);
Z = zr1;
plot3(X,Y,Z)


Но это как-то не очень информативно.

Спасибо. Попробую.
Пока остановился на этом:
CODE
%% инициализация

clc;
clear all;

f = 90000; % центральная частота Гц
fs = 720000; % удвоенная частота дискретизации Гц
A = 2047; % амплитуда сигнала
ts = 1/fs; % период одного дискрета
tm = 50; % количество проходов участка моделирования
tm_test = tm*8; % общее количество проходов моделирования
td = 5; % коэффициент децимации
w=2*pi*f; % круговая частота
tmin = 0; % начальное время (начальная фаза)
tmax = tm*ts; % конечное время
tmax_test = tm_test*ts; % конечное время

% матрица коэффициентов 51 коэффициент (Equiripple 75-85-95-105 кГц)
kf = [0,-834,0,283,0,-202,0,8,0,307,0,-738,0,1260,0,-1836,0,2417, ...
0,-2947,0,3372,0,-3647,0,3742,0,-3647,0,3372,0,-2947,0, ...
2417,0,-1836,0,1260,0,-738,0,307,0,8,0,-202,0,283,0,-834,0];

% матрица времени
t=linspace(tmin, tmax_test+tmin, fs*tmax_test+1);
% нечетные индексы матрицы времени t
t_odd = 1:2:length(t);
% четные индексы матрицы времени t
t_even = 2:2:length(t);

% матрица сигнала (канал 1 фаза 0)
x1 = A*sin(w*t(t_odd));
x1(1:60) = 0;
x1(140:201) = 0;

% матрица сигнала (канал 2 фаза pi/4)
x2 = A*sin(w*t(t_even));
x2(1:60) = 0;
x2(140:201) = 0;

%% моделирование

zr1=zeros(200,16);
zr2=zeros(200,16);
for tm_all = 1:4
for tm_mod = 1:tm_test/2

% поэлементное умножение
if tm_mod < 150
z1 = x1(tm_mod:(tm_mod+50)).*kf;
z2 = x2(tm_mod:(tm_mod+50)).*kf;
end
% матрица выходных данных КИХ канал 1
zr1(tm_mod,tm_all) = round(sum(z1));
% матрица выходных данных КИХ канал 2
zr2(tm_mod,tm_all) = round(sum(z2));

end
end

% максимальное значение
fprintf('Максимальное значение канал 1 %d\n', max(zr1(:,1)));
fprintf('Максимальное значение канал 2 %d\n', max(zr2(:,1)));
fprintf('\n');

u = 1:16;
v = 1:200;
[X, Y] = meshgrid(u, v);
Z = zr1;
figure
plot3(X,Y,Z)
axis([1 16 1 200 -1e8 1e8])
shading flat
grid
hold on

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.