Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как задать значения ф-ций
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
Грендайзер
Здравствуйте. Начал изучать матлаб и появилось несколько вопросов на которые никак не найду ответов. Вопросы глупые конечно, но практики маловато так что...
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
MiPe
Цитата(Грендайзер @ 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

А вы покажите, как вы пробовали, а мы поможем...
Грендайзер
Ничё се biggrin.gif

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


Вот так:

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

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

Конечно, читайте help, особенно по Control System Toolbox (и примеры в документации) - там все разжевано.
Tpeck
Цитата(Грендайзер @ Aug 31 2016, 15:20) *
Здравствуйте. Начал изучать матлаб


Почитайте книгу Matlab для студента.
http://www.booksgid.com/humanities/1720-ma...a-studenta.html
Где скачать найдете сами sm.gif
alex_os
Если передаточная ф-я фильтра то можно 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.
Grizzzly
Цитата(Грендайзер @ Aug 31 2016, 15:20) *
2) И ещё, как задать скажем такую ф-цию:
h(n) = sin(n)/n, n /= 0;
h(n) = 1/pi, n = 0;
Пробовал при помощи if, но что то не выходит... 05.gif

Цитата
doc sinc
Грендайзер
Цитата
Почитайте книгу Matlab для студента.

Спасибо, обязательно посмотрю sm.gif
Цитата
Если передаточная ф-я фильтра то можно freqz:

Да, я видел эту функцию, спасибо. Правда меня больше интересовало преобразование Фурье и я как раз нашёл нужную функцию - fft. Если вдруг кому понадобится, вот здесь http://blogs.mathworks.com/steve/2010/06/2...-output-of-fft/ класно расписано с примерами. Правда не допёр как отобразить лишь пол периода преобразования, а не весь период...

Цитата
doc sinc


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

Эта команда откроет справку по функции sin(pi*x)/(pi*x). Да, это обычный синк.
Грендайзер
Цитата
Да, это обычный синк.

Ясно, спасибо. Правда данную ф-цию я привёл скорей как пример, мне просто было интересно как описать ф-цию заданную таким образом...
Грендайзер
Снова здравствуйте. Продолжаю осваивать 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
Цитата(Грендайзер @ Sep 15 2016, 16:31) *
Снова здравствуйте. Продолжаю осваивать Matlab и тут вот столкнулся с такой проблемой. Написал кодик для того, что бы построить АЧХ и ФЧХ:
...

Посмотрите это
Грендайзер
Я пробовал использовать эту ф-цию... но всё стало ещё непонятней...
mdmitry
Цитата(Грендайзер @ Sep 15 2016, 17:35) *
Я пробовал использовать эту ф-цию... но всё стало ещё непонятней...

Цитата
Написал кодик для того, что бы построить АЧХ и ФЧХ:

Я не обратил внимание на эти термины. НЕТ у сигнала АЧХ и ФЧХ, есть амплитудный и фазовый спектры! Курс радиотехнические цепи и сигналы в помощь, учебники есть. Заодно и книгу Сергиенко А.Б. по цифровой обработке сигналов надо почитать.
Функцию unwrap в данном случае использовать смысла нет, она как раз для построения ФЧХ и нужна.

По фазовому спектру: посмотрите данные FFT и обнаружите, что результаты представляют собой весьма малые числа, как в вещественной, так и в мнимой частях. При вычислении аргумента комплексного числа в этом случае потеря точности практически неизбежна. Откуда Ваш изрезанный график. К тому же, у Вас кратна частота сигнала частоте дискретизации. Поставьте частоту 801, 805 и графики сильно изменятся. Будут, на мой взгляд, более осмысленными для первоначального понимания. Ничего фантастического у Вас нет, все объяснимо.
Grizzzly
Цитата(Грендайзер @ Sep 15 2016, 16:35) *
Я пробовал использовать эту ф-цию... но всё стало ещё непонятней...

Она убирает скачки фазы на 2pi. Только и всего.

Цитата(mdmitry @ Sep 15 2016, 17:54) *
Функцию unwrap в данном случае использовать смысла нет, она как раз для построения ФЧХ и нужна.

Есть смысл, никуда от этих скачков не деться, что для фазового спектра, что для ФЧХ.
Грендайзер
Цитата(mdmitry @ Sep 15 2016, 17:54) *
Я не обратил внимание на эти термины. НЕТ у сигнала АЧХ и ФЧХ, есть амплитудный и фазовый спектры! Курс радиотехнические цепи и сигналы в помощь, учебники есть. Заодно и книгу Сергиенко А.Б. по цифровой обработке сигналов надо почитать.

Да, да... Конечно же Вы правы... Я имел в виду именно амплитудный и фазовый спектры... видимо мозг решил выкрутиться короткими сокращениями вместо того что бы писать длинные слова. biggrin.gif

Цитата
По фазовому спектру: посмотрите данные FFT и обнаружите, что результаты представляют собой весьма малые числа, как в вещественной, так и в мнимой частях.

Обращал. Так оно и есть. Как я понял это происходит из за неточности представления дробных чисел машиной. Но как это исправить...

Цитата
При вычислении аргумента комплексного числа в этом случае потеря точности практически неизбежна. Откуда Ваш изрезанный график. К тому же, у Вас кратна частота сигнала частоте дискретизации. Поставьте частоту 801, 805 и графики сильно изменятся. Будут, на мой взгляд, более осмысленными для первоначального понимания.

Каким образом это должно помочь? И что плохого в том, что частоты кратны?

Поставил частоту косинусоиды 801, и ситуация резко поменялась... но почему?
Grizzzly
Цитата(Грендайзер @ Sep 15 2016, 19:57) *
И что плохого в том, что частоты кратны?

Увидите эффект растекания.

P.S. К моему предыдущему сообщению. Не заметил, что фаза у вас равна нулю, поэтому о фазовом спектре говорить не приходится. То, что я писал про unwrap, - это общий случай. В вашем случае фаза должна быть равна нулю на всех частотах, а из-за погрешности вычислений, как вам сказали, она принимает именно такие значения.
Грендайзер
Сейчас ситуация поменялась. Всёравно не совсем понимаю как это дело интерпритировать... но мне кажется это уже хоть что то...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.