|
|
  |
Трехмерная графика из матрицы в Matlab |
|
|
|
Mar 21 2016, 16:37
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Имеется код который формирует две двумерные матрицы работы 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?
|
|
|
|
|
Mar 22 2016, 07:03
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(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.
|
|
|
|
|
Mar 22 2016, 09:49
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(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.
Сообщение отредактировал Acvarif - Mar 22 2016, 09:49
|
|
|
|
|
Mar 24 2016, 16:47
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970

|
Такое имеете в виду? Отдельными линиями 16 графиков построятся. Код [xsize ysize] = size(zr1'); [X,Y] = meshgrid(1:xsize,1:ysize); Z = zr1; plot3(X,Y,Z) Но это как-то не очень информативно.
|
|
|
|
|
Mar 24 2016, 20:17
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|