acvarif 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Имеются две матрицы A = [1,3,5,7]; B = [2,4,6,8]; Как в Матлаб объединить эти матрицы в С так чтобы элементы А стояли на нечетных местах в строке, а B на четных - С = [1,2,3,4,5,6,7,8]? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
peselnik 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 (изменено) · Жалоба C = reshape([A;B], 1, []) Изменено 28 сентября, 2016 пользователем MiPe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
litv 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба to Mipe: постыдились бы за минуту решать сложные головоломки Acvarifa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 (изменено) · Жалоба C = reshape([A;B], 1, []) Спасибо. Это помогло объединить две матрицы не вдаваясь в циклы. По поводу головоломок... %% инициализация clc; clear all; f1 = 90000; % центральная частота Гц fs = 360000; % частота дискретизации Гц A = 2047; % амплитуда сигнала ts = 1/fs; % период одного дискрета tm = 200; % количество проходов участка моделирования td = 5; % коэффициент децимации w1=2*pi*f1; % круговая частота 1 tmin = 0; % начальное время (начальная фаза) tmax = tm*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]; %lkf =length(kf); % количество коэффициентов % матрица времени t=linspace(tmin, tmax+tmin, fs*tmax+1); % матрица выборок сигнала 90 кГц нач. сдвиг 0 x0 = A*sin(w1*t); x0(1:60) = 0; x0(140:201) = 0; % матрица выборок сигнала 90 кГц нач. сдвиг pi/4 x45 = A*sin(w1*t + pi/4); x45(1:60) = 0; x45(140:201) = 0; %% моделирование z0 = zeros(1,51); z45 = zeros(1,51); zr0 = zeros(16,200); zr45 = zeros(16,200); zr0f = zeros(16,200); for tm_mod = 1:tm % поэлементное умножение if tm_mod < 150 z0 = x0(tm_mod:(tm_mod+50)).*kf; z45 = x45(tm_mod:(tm_mod+50)).*kf; end % матрица выходных данных КИХ 90 кГц смещение 0 и 45 for tm_nb = 1:16 zr0(tm_nb, tm_mod) = round(sum(z0)); zr45(tm_nb, tm_mod) = round(sum(z45)); % фазировка if tm_mod > 1 zr0f(tm_nb, tm_mod - 1) = (zr0(tm_nb, tm_mod - 1) + zr0(tm_nb, tm_mod))*0.707; end end end zr0fn = reshape(zr0f, 200, 16); zr45n = reshape(zr45, 200, 16); % матрица выходных данных 32 канала zrf = reshape([zr0fn;zr45n], 200, 32); ... Имеется матрица zrf - выходные данные цифровых фильтров (32 канала-столбца) Всего 200 элементов-строк. Элементы-столбцы четных строк - входные данные для real входа БПФ на 32 точки. Элементы-столбцы нечетных строк - входные данные для image входа БПФ32 точки. Как в Матлаб выглядит запись функции fft если имются данные для real и image входов БПФ? Записал так tf = 2:200; zrfn(tf - 1,:) = 1i*zrf(tf - 1,:) + zrf(tf,:); Xf = fft(zrfn, 32); Правильна-ли такая запись? Изменено 28 сентября, 2016 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
peselnik 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 (изменено) · Жалоба Правильна-ли такая запись? А делает ли она то, что вы хотите? out = complex(zrf(1:2:200,:),zrf(2:2:200,:)) Но я бы лучше поискал возможность сделать так, чтобы матрица для БПФ-32 сразу формировалась в нужном виде. Эти поэлементные умножения и конкатенации матриц выглядят не по-матлабовски. Изменено 28 сентября, 2016 пользователем MiPe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба А делает ли она то, что вы хотите? out = complex(zrf(1:2:200,:),zrf(2:2:200,:)) Но я бы лучше поискал возможность сделать так, чтобы матрица для БПФ-32 сразу формировалась в нужном виде. Эти поэлементные умножения и конкатенации матриц выглядят не по-матлабовски. Да. Нужно подумать. Может в данном случае можно вообще обойтись без циклов... Чтобы узнать получилось-ли то, что ожидалось нужно прорисовать 200 точек по каждому из 32_ух выходов БПФ. Для наглядности желательно в трехмерном виде. Если не сложно, подскажите пожалуйста как это сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
peselnik 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба Давайте самостоятельно, это уже перестает быть интересным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 28 сентября, 2016 Опубликовано 28 сентября, 2016 (изменено) · Жалоба Да. Спасибо. Думаю справлюсь. Изменено 28 сентября, 2016 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 6 28 сентября, 2016 Опубликовано 28 сентября, 2016 · Жалоба А это бестолковое цитирование зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 30 сентября, 2016 Опубликовано 30 сентября, 2016 (изменено) · Жалоба Не получается. %% инициализация clc; clear all; f = 90000; % центральная частота Гц fs = 360000; % частота дискретизации Гц A = 1; % амплитуда сигнала ts = 1/fs; % период одного дискрета tm = 200; % количество проходов участка моделирования td = 5; % коэффициент децимации w=2*pi*f; % круговая частота 1 tmin = 0; % начальное время (начальная фаза) tmax = tm*ts; % конечное время offset = 2*pi/32; % один минимальный шаг смещения step = 1; % множитель миним. шага смещения % матрица коэффициентов 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]; lkf =length(kf); % количество коэффициентов % матрица времени t = linspace(tmin, tmax+tmin, fs*tmax+1); % матрица сдвигов t_offset = reshape(linspace(0, offset, 32), 32, 1); % матрица сигналов (32 сигнала) x = zeros(32,201); toff = 1:32; for toff = 1:32 x(toff,:) = A*sin(w*t + step*offset*toff-offset); x(toff,1:60) = 0; x(toff, 140:201) = 0; end %% моделирование z = zeros(32,lkf); zr = zeros(32,200); zrf = zeros(32,200); Xf = zeros(32,200); for tm_mod = 1:tm for tf = 1:32 % поэлементное умножение if tm_mod < 150 z = x(tf,tm_mod:(tm_mod+50)).*kf; end % матрица выходных данных КИХ 90 кГц 32 канала zr(tf, tm_mod) = round(sum(z)); end if tm_mod > 1 zrf(:,tm_mod-1) = 1i*zr(:,tm_mod-1) + zr(:,tm_mod-1); % fft complex 32 точки от двух соседних столбцов Xf(:,tm_mod-1) = fft(zrf(:,tm_mod-1), 32); end end % fft 32 точки от двух соседних столбцов Z = sqrt((real(Xf)).^2+(imag(Xf)).^2); %[X, Y] = meshgrid([real(Xf(:,:),real(Xf(:,:)))]); % выборки по сигналу x(1) figure(1) plot(x(1,:), 'r'); hold on stem(x(1,:)); % графика элементов массива zr figure(2) plot(zr(1,:), 'r'), grid; hold on stem(zr(1,:)); % fft figure(3) plot3(X, Y, Z); axis([1,32 1,200 1,10000]) Не врубаюсь как правильно сформировать X и Y для plot3... Изменено 30 сентября, 2016 пользователем Acvarif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
acvarif 0 4 октября, 2016 Опубликовано 4 октября, 2016 · Жалоба Получилось. Может кому пригодится... %% инициализация clc; clear all; % центральная частота Гц f = 90000; % частота дискретизации Гц fs = 360000; % коэффициент децимации td = 1; % амплитуда сигнала A = 1; % период одного дискрета ts = 1/fs; % количество проходов участка моделирования tm = 200; % круговая частота w=2*pi*f; % начальное время (начальная фаза) tmin = 0; % конечное время tmax = tm*ts; % один минимальный шаг смещения offset = 2*pi/32; % множитель миним. шага смещения step = -5; % вариант коэффициентов КИХ фильтра vf = 3; % матрица коэффициентов 51 коэффициент (окно Чебышева 85-95 кГц) kf1 = [0 116 0 -214 0 354 0 -540 0 772 0 -1042 0 1339 0 -1645 0 1939 ... 0 -2199 0 2403 0 -2533 0 2577 0 -2533 0 2403 0 -2199 0 1939 ... 0 -1645 0 1339 0 -1042 0 772 0 -540 0 354 0 -214 0 116 0]; % матрица коэффициентов 51 коэффициент (окно Хеминга 85-95 кГц) kf2 = [0,95,0,-151,0,260,0,-431,0,666,0,-958,0,1292,0,-1644,0,1988, ... 0,-2295,0,2537,0,-2692,0,2746,0,-2692,0,2537,0,-2295,0,1988, ... 0,-1644,0,1292,0,-958,0,666,0,-431,0,260,0,-151,0,95,0]; % матрица коэффициентов 51 коэффициент (Equiripple 75-85-95-105 кГц) kf3 = [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]; if vf == 1 kf = kf1; elseif vf == 2 kf = kf2; elseif vf == 3 kf = kf3; end % количество коэффициентов lkf =length(kf); % матрица времени t = linspace(tmin, tmin+tmax, fs*tmax+1); % матрица сигналов (32 сигнала со смещ. step*offset*toff-offset) xs = zeros(32,201); for toff = 1:32 xs(toff,:) = round(A*sin(w*t + step*offset*toff-offset)); xs(toff,1:80) = 0; xs(toff, 140:201) = 0; end %% моделирование zs = zeros(32,lkf); zr = zeros(32,200); zrf = zeros(32,200); Xf = zeros(32,200); for tm_mod = 1:td:tm for tf = 1:32 % поэлементное умножение if tm_mod < 150 zs = xs(tf,tm_mod/td:(tm_mod/td+50)).*kf; end % матрица выходных данных КИХ 90 кГц 32 канала zr(tf, tm_mod/td) = round(sum(zs))*0.0001; end if tm_mod > td zrf(:,tm_mod-1) = 1i*zr(:,tm_mod-1) + zr(:,tm_mod); % fft complex 32 точки от двух соседних столбцов Xf(:,tm_mod-1) = fft(zrf(:,tm_mod-1), 32); end end % fft 32 точки от двух соседних столбцов z = sqrt((real(Xf)).^2+(imag(Xf)).^2); % координаты x y x = zeros(32,200); y = zeros(32,200); for tm_mod = 1:1:32 x(tm_mod,:) = tm_mod; end for tm_mod = 1:1:tm y(:,tm_mod) = tm_mod; end %% графика % выборки по сигналу xs figure(1) plot(xs(1,:), 'r'); hold on stem(xs(1,:)); title('Дискретный сигнал'), % графика элементов массива zr figure(2) plot(zr(1,:), 'r'), grid; hold on stem(zr(1,:)); title('Дискретный сигнал после КИХ фильтра'), if step >= 0 nl = abs(step)+1; else nl = 32-abs(step)+1; end figure(3) plot(z(nl,:), 'r'), grid; hold on stem(z(nl,:)); title('Пространственный БПФ луч nl'), figure(4) plot3(x, y, z), grid; title('БПФ 32 точки'), xlabel('Номер выхода БПФ'), ylabel('Дискретное время(выборки)'), zlabel('Амплитуда') Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться