|
Как задать значения ф-ций, Начал изучать матлаб и тут понеслось... |
|
|
|
Aug 31 2016, 12:20
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Здравствуйте. Начал изучать матлаб и появилось несколько вопросов на которые никак не найду ответов. Вопросы глупые конечно, но практики маловато так что... 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, но что то не выходит...
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Aug 31 2016, 12:27
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 17-08-11
Пользователь №: 66 760

|
Цитата(Грендайзер @ Aug 31 2016, 15:20)  для этого мне надо построить его дискретное преобразование фурье Ага, а еще вам нужна миллиметровка и карандаш  CODE coef = tf([1 1],[0.5 1 1]); bode(coef)
Цитата(Грендайзер @ Aug 31 2016, 15:20)  2) И ещё, как задать скажем такую ф-цию: h(n) = sin(n)/n, n /= 0; h(n) = 1/pi, n = 0; Пробовал при помощи if, но что то не выходит...  А вы покажите, как вы пробовали, а мы поможем...
|
|
|
|
|
Aug 31 2016, 13:01
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Ничё се Цитата(MiPe @ Aug 31 2016, 15:27)  А вы покажите, как вы пробовали, а мы поможем... Вот так: if n == 0 h = w/pi else h = sin(w*n)/n*pi end От так
|
|
|
|
|
Aug 31 2016, 13:09
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 17-08-11
Пользователь №: 66 760

|
Цитата(Грендайзер @ Aug 31 2016, 16:01)  Вот так: if n == 0 h = w/pi else h = sin(w*n)/n*pi end От так  Такая запись должна работать для скалярных n. Если у вас n - вектор (MATLAB же), то лучше как-то так: CODE function h = myfun(n) h = sin(n)./n; h(n == 0) = 1/pi; А потом можно делать так: CODE plot(myfun(-2:0.1:2))
|
|
|
|
|
Aug 31 2016, 13:24
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 17-08-11
Пользователь №: 66 760

|
Цитата(Грендайзер @ Aug 31 2016, 16:19)  Ух ты, спасибо за помощь  Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать... Конечно, читайте help, особенно по Control System Toolbox (и примеры в документации) - там все разжевано.
|
|
|
|
|
Aug 31 2016, 15:45
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Цитата(Грендайзер @ Aug 31 2016, 15:20)  2) И ещё, как задать скажем такую ф-цию: h(n) = sin(n)/n, n /= 0; h(n) = 1/pi, n = 0; Пробовал при помощи if, но что то не выходит...  Цитата doc sinc
|
|
|
|
|
Sep 1 2016, 08:05
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Цитата Почитайте книгу Matlab для студента. Спасибо, обязательно посмотрю Цитата Если передаточная ф-я фильтра то можно freqz: Да, я видел эту функцию, спасибо. Правда меня больше интересовало преобразование Фурье и я как раз нашёл нужную функцию - fft. Если вдруг кому понадобится, вот здесь http://blogs.mathworks.com/steve/2010/06/2...-output-of-fft/ класно расписано с примерами. Правда не допёр как отобразить лишь пол периода преобразования, а не весь период... Цитата doc sinc doc sinc - это sin(x)/x ?
Сообщение отредактировал Грендайзер - Sep 1 2016, 08:11
|
|
|
|
|
Sep 1 2016, 08:21
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Цитата Да, это обычный синк. Ясно, спасибо. Правда данную ф-цию я привёл скорей как пример, мне просто было интересно как описать ф-цию заданную таким образом...
|
|
|
|
|
Sep 15 2016, 12:31
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Снова здравствуйте. Продолжаю осваивать 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)) % Строим ФЧХ Так вот с АЧХ всё нормально, но вот ФЧХ - какая то кракозябра (см. рисунок). Из за чего это и как с этим бороться?
Эскизы прикрепленных изображений
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|