реклама на сайте
подробности

 
 
> Как задать значения ф-ций, Начал изучать матлаб и тут понеслось...
Грендайзер
сообщение Aug 31 2016, 12:20
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 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, но что то не выходит... 05.gif
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
MiPe
сообщение Aug 31 2016, 12:27
Сообщение #2


Участник
*

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



Цитата(Грендайзер @ Aug 31 2016, 15:20) *
для этого мне надо построить его дискретное преобразование фурье

Ага, а еще вам нужна миллиметровка и карандаш sm.gif
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, но что то не выходит... 05.gif

А вы покажите, как вы пробовали, а мы поможем...
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 31 2016, 13:01
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Ничё се biggrin.gif

Цитата(MiPe @ Aug 31 2016, 15:27) *
А вы покажите, как вы пробовали, а мы поможем...


Вот так:

if n == 0
h = w/pi
else
h = sin(w*n)/n*pi
end

От так 05.gif
Go to the top of the page
 
+Quote Post
MiPe
сообщение Aug 31 2016, 13:09
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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

От так 05.gif

Такая запись должна работать для скалярных n. Если у вас n - вектор (MATLAB же), то лучше как-то так:

CODE
function h = myfun(n)
h = sin(n)./n;
h(n == 0) = 1/pi;


А потом можно делать так:
CODE
plot(myfun(-2:0.1:2))
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 31 2016, 13:19
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Ух ты, спасибо за помощь sm.gif Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать...

Сообщение отредактировал Грендайзер - Aug 31 2016, 13:20
Go to the top of the page
 
+Quote Post
MiPe
сообщение Aug 31 2016, 13:24
Сообщение #6


Участник
*

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



Цитата(Грендайзер @ Aug 31 2016, 16:19) *
Ух ты, спасибо за помощь sm.gif Правда с функцией tf не совсем ясно, но надо повнимательней описание почитать...

Конечно, читайте help, особенно по Control System Toolbox (и примеры в документации) - там все разжевано.
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Aug 31 2016, 14:27
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(Грендайзер @ Aug 31 2016, 15:20) *
Здравствуйте. Начал изучать матлаб


Почитайте книгу Matlab для студента.
http://www.booksgid.com/humanities/1720-ma...a-studenta.html
Где скачать найдете сами sm.gif
Go to the top of the page
 
+Quote Post
alex_os
сообщение Aug 31 2016, 14:53
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 12-05-06
Пользователь №: 17 030



Если передаточная ф-я фильтра то можно 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.


--------------------
ну не художники мы...
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Aug 31 2016, 15:45
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 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, но что то не выходит... 05.gif

Цитата
doc sinc
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Sep 1 2016, 08:05
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Почитайте книгу Matlab для студента.

Спасибо, обязательно посмотрю sm.gif
Цитата
Если передаточная ф-я фильтра то можно 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
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Sep 1 2016, 08:08
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Грендайзер @ Sep 1 2016, 11:05) *
doc sinc - это sin(x)/x ?

Эта команда откроет справку по функции sin(pi*x)/(pi*x). Да, это обычный синк.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Sep 1 2016, 08:21
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Да, это обычный синк.

Ясно, спасибо. Правда данную ф-цию я привёл скорей как пример, мне просто было интересно как описать ф-цию заданную таким образом...
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Sep 15 2016, 12:31
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 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))         % Строим ФЧХ

Так вот с АЧХ всё нормально, но вот ФЧХ - какая то кракозябра (см. рисунок). Из за чего это и как с этим бороться?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 15 2016, 12:39
Сообщение #14


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Грендайзер @ Sep 15 2016, 16:31) *
Снова здравствуйте. Продолжаю осваивать Matlab и тут вот столкнулся с такой проблемой. Написал кодик для того, что бы построить АЧХ и ФЧХ:
...

Посмотрите это


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Sep 15 2016, 13:35
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Я пробовал использовать эту ф-цию... но всё стало ещё непонятней...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01842 секунд с 7
ELECTRONIX ©2004-2016