Грендайзер 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Здравствуйте. Начал изучать матлаб и появилось несколько вопросов на которые никак не найду ответов. Вопросы глупые конечно, но практики маловато так что... 1) Имею значения коэффициентов передаточной ф-ции (допустим фильтра), ну и хочу посмотреть его АЧХ, для этого мне надо построить его дискретное преобразование фурье, т.е. h(n) = h(n0) + h(n1) + ... + h(N-1); H(jw) = h(0) + h(n1)*exp(-jw) + h(n2)*exp(-2jw) +...+ h(N-1)*exp(-(N-1)jw) Собственно если коэффициентов h не много всё нормално, но если их количество растёт, то прописывать умножение каждого из них на экспоненту становится нудной задачкой... Вообщем можно это дело как то оптимизировать? Никак не допру... Матлаб ругается, т.к. ему нужно совпадение размера матриц, а круговую частоту w я обычно задаю так w = [1:500]*pi/500 или что то в этом духе, количество же коэффициентов значительно меньше. 2) И ещё, как задать скажем такую ф-цию: h(n) = sin(n)/n, n /= 0; h(n) = 1/pi, n = 0; Пробовал при помощи if, но что то не выходит... :05: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
peselnik 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба для этого мне надо построить его дискретное преобразование фурье Ага, а еще вам нужна миллиметровка и карандаш :) coef = tf([1 1],[0.5 1 1]); bode(coef) 2) И ещё, как задать скажем такую ф-цию: h(n) = sin(n)/n, n /= 0; h(n) = 1/pi, n = 0; Пробовал при помощи if, но что то не выходит... :05: А вы покажите, как вы пробовали, а мы поможем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Ничё се А вы покажите, как вы пробовали, а мы поможем... Вот так: if n == 0 h = w/pi else h = sin(w*n)/n*pi end От так :05: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
peselnik 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Вот так: if n == 0 h = w/pi else h = sin(w*n)/n*pi end От так :05: Такая запись должна работать для скалярных n. Если у вас n - вектор (MATLAB же), то лучше как-то так: function h = myfun(n) h = sin(n)./n; h(n == 0) = 1/pi; А потом можно делать так: plot(myfun(-2:0.1:2)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 31 августа, 2016 Опубликовано 31 августа, 2016 (изменено) · Жалоба Ух ты, спасибо за помощь :) Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать... Изменено 31 августа, 2016 пользователем Грендайзер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
peselnik 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Ух ты, спасибо за помощь :) Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать... Конечно, читайте help, особенно по Control System Toolbox (и примеры в документации) - там все разжевано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tpeck 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Здравствуйте. Начал изучать матлаб Почитайте книгу Matlab для студента. http://www.booksgid.com/humanities/1720-ma...a-studenta.html Где скачать найдете сами :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба Если передаточная ф-я фильтра то можно freqz: freqz Frequency response of digital filter [H,W] = freqz(B,A,N) returns the N-point complex frequency response vector H and the N-point frequency vector W in radians/sample of the filter: jw -jw -jmw jw B(e) b(1) + b(2)e + .... + b(m+1)e H(e) = ---- = ------------------------------------ jw -jw -jnw A(e) a(1) + a(2)e + .... + a(n+1)e given numerator and denominator coefficients in vectors B and A. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 31 августа, 2016 Опубликовано 31 августа, 2016 · Жалоба 2) И ещё, как задать скажем такую ф-цию: h(n) = sin(n)/n, n /= 0; h(n) = 1/pi, n = 0; Пробовал при помощи if, но что то не выходит... :05: doc sinc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 1 сентября, 2016 Опубликовано 1 сентября, 2016 (изменено) · Жалоба Почитайте книгу Matlab для студента. Спасибо, обязательно посмотрю :) Если передаточная ф-я фильтра то можно freqz: Да, я видел эту функцию, спасибо. Правда меня больше интересовало преобразование Фурье и я как раз нашёл нужную функцию - fft. Если вдруг кому понадобится, вот здесь http://blogs.mathworks.com/steve/2010/06/2...-output-of-fft/ класно расписано с примерами. Правда не допёр как отобразить лишь пол периода преобразования, а не весь период... doc sinc doc sinc - это sin(x)/x ? Изменено 1 сентября, 2016 пользователем Грендайзер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 1 сентября, 2016 Опубликовано 1 сентября, 2016 · Жалоба doc sinc - это sin(x)/x ? Эта команда откроет справку по функции sin(pi*x)/(pi*x). Да, это обычный синк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 1 сентября, 2016 Опубликовано 1 сентября, 2016 · Жалоба Да, это обычный синк. Ясно, спасибо. Правда данную ф-цию я привёл скорей как пример, мне просто было интересно как описать ф-цию заданную таким образом... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 15 сентября, 2016 Опубликовано 15 сентября, 2016 · Жалоба Снова здравствуйте. Продолжаю осваивать Matlab и тут вот столкнулся с такой проблемой. Написал кодик для того, что бы построить АЧХ и ФЧХ: >> F = 800; Fs = 8000; N = 100; n = 0:N-1; >> x = cos(2*pi*F*n/Fs); % формируем наш сигнал >> Ft = fft(x); % делаем преобразование фурье >> % строим графики >> subplot(2,1,1) >> stem(n, abs(Ft)) % Строим АЧХ >> subplot(2,1,2) >> plot(n, angle(Ft)) % Строим ФЧХ Так вот с АЧХ всё нормально, но вот ФЧХ - какая то кракозябра (см. рисунок). Из за чего это и как с этим бороться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 15 сентября, 2016 Опубликовано 15 сентября, 2016 · Жалоба Снова здравствуйте. Продолжаю осваивать Matlab и тут вот столкнулся с такой проблемой. Написал кодик для того, что бы построить АЧХ и ФЧХ: ... Посмотрите это Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Грендайзер 0 15 сентября, 2016 Опубликовано 15 сентября, 2016 · Жалоба Я пробовал использовать эту ф-цию... но всё стало ещё непонятней... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться