acvarif 0 21 марта, 2016 Опубликовано 21 марта, 2016 · Жалоба Имеется код который формирует две двумерные матрицы работы 32_канального КИХ фильтра по 16 каналов каждая. %% инициализация 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 1 21 марта, 2016 Опубликовано 21 марта, 2016 · Жалоба mesh или surf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 22 марта, 2016 Опубликовано 22 марта, 2016 · Жалоба 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 1 22 марта, 2016 Опубликовано 22 марта, 2016 · Жалоба [b,a]=size(zr1); surf(1:a,1:b,zr1); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 22 марта, 2016 Опубликовано 22 марта, 2016 (изменено) · Жалоба [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. Изменено 22 марта, 2016 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 24 марта, 2016 Опубликовано 24 марта, 2016 · Жалоба Такое имеете в виду? Отдельными линиями 16 графиков построятся. [xsize ysize] = size(zr1'); [X,Y] = meshgrid(1:xsize,1:ysize); Z = zr1; plot3(X,Y,Z) Но это как-то не очень информативно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 24 марта, 2016 Опубликовано 24 марта, 2016 · Жалоба Такое имеете в виду? Отдельными линиями 16 графиков построятся. [xsize ysize] = size(zr1'); [X,Y] = meshgrid(1:xsize,1:ysize); Z = zr1; plot3(X,Y,Z) Но это как-то не очень информативно. Спасибо. Попробую. Пока остановился на этом: %% инициализация 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться