Грендайзер 0 Posted August 31, 2016 · Report post Здравствуйте. Начал изучать матлаб и появилось несколько вопросов на которые никак не найду ответов. Вопросы глупые конечно, но практики маловато так что... 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: Quote Ответить с цитированием Share this post Link to post Share on other sites
peselnik 0 Posted August 31, 2016 · Report post для этого мне надо построить его дискретное преобразование фурье Ага, а еще вам нужна миллиметровка и карандаш :) 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: А вы покажите, как вы пробовали, а мы поможем... Quote Ответить с цитированием Share this post Link to post Share on other sites
Грендайзер 0 Posted August 31, 2016 · Report post Ничё се А вы покажите, как вы пробовали, а мы поможем... Вот так: if n == 0 h = w/pi else h = sin(w*n)/n*pi end От так :05: Quote Ответить с цитированием Share this post Link to post Share on other sites
peselnik 0 Posted August 31, 2016 · Report post Вот так: 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)) Quote Ответить с цитированием Share this post Link to post Share on other sites
Грендайзер 0 Posted August 31, 2016 (edited) · Report post Ух ты, спасибо за помощь :) Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать... Edited August 31, 2016 by Грендайзер Quote Ответить с цитированием Share this post Link to post Share on other sites
peselnik 0 Posted August 31, 2016 · Report post Ух ты, спасибо за помощь :) Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать... Конечно, читайте help, особенно по Control System Toolbox (и примеры в документации) - там все разжевано. Quote Ответить с цитированием Share this post Link to post Share on other sites
Tpeck 0 Posted August 31, 2016 · Report post Здравствуйте. Начал изучать матлаб Почитайте книгу Matlab для студента. http://www.booksgid.com/humanities/1720-ma...a-studenta.html Где скачать найдете сами :) Quote Ответить с цитированием Share this post Link to post Share on other sites
alex_os 0 Posted August 31, 2016 · Report post Если передаточная ф-я фильтра то можно 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. Quote Ответить с цитированием Share this post Link to post Share on other sites
Grizzly 0 Posted August 31, 2016 · Report post 2) И ещё, как задать скажем такую ф-цию: h(n) = sin(n)/n, n /= 0; h(n) = 1/pi, n = 0; Пробовал при помощи if, но что то не выходит... :05: doc sinc Quote Ответить с цитированием Share this post Link to post Share on other sites
Грендайзер 0 Posted September 1, 2016 (edited) · Report post Почитайте книгу Matlab для студента. Спасибо, обязательно посмотрю :) Если передаточная ф-я фильтра то можно freqz: Да, я видел эту функцию, спасибо. Правда меня больше интересовало преобразование Фурье и я как раз нашёл нужную функцию - fft. Если вдруг кому понадобится, вот здесь http://blogs.mathworks.com/steve/2010/06/2...-output-of-fft/ класно расписано с примерами. Правда не допёр как отобразить лишь пол периода преобразования, а не весь период... doc sinc doc sinc - это sin(x)/x ? Edited September 1, 2016 by Грендайзер Quote Ответить с цитированием Share this post Link to post Share on other sites
Grizzly 0 Posted September 1, 2016 · Report post doc sinc - это sin(x)/x ? Эта команда откроет справку по функции sin(pi*x)/(pi*x). Да, это обычный синк. Quote Ответить с цитированием Share this post Link to post Share on other sites
Грендайзер 0 Posted September 1, 2016 · Report post Да, это обычный синк. Ясно, спасибо. Правда данную ф-цию я привёл скорей как пример, мне просто было интересно как описать ф-цию заданную таким образом... Quote Ответить с цитированием Share this post Link to post Share on other sites
Грендайзер 0 Posted September 15, 2016 · Report post Снова здравствуйте. Продолжаю осваивать 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)) % Строим ФЧХ Так вот с АЧХ всё нормально, но вот ФЧХ - какая то кракозябра (см. рисунок). Из за чего это и как с этим бороться? Quote Ответить с цитированием Share this post Link to post Share on other sites
mdmitry 0 Posted September 15, 2016 · Report post Снова здравствуйте. Продолжаю осваивать Matlab и тут вот столкнулся с такой проблемой. Написал кодик для того, что бы построить АЧХ и ФЧХ: ... Посмотрите это Quote Ответить с цитированием Share this post Link to post Share on other sites
Грендайзер 0 Posted September 15, 2016 · Report post Я пробовал использовать эту ф-цию... но всё стало ещё непонятней... Quote Ответить с цитированием Share this post Link to post Share on other sites