|
График в MATLAB, как нарисовать? |
|
|
|
Nov 20 2012, 13:33
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 3-04-12
Пользователь №: 71 154

|
Цитата(Stefan1 @ Nov 20 2012, 12:50)  Доброго времени суток. У меня есть зависимость x от у, которая изменяется с течением времени. Как мне построить график зависимости х от у в последний момент времени. не очень понятно что имееться ввиду t=1:0.1:4*pi; y=sin(t); plot(t(100:116),y(100:116)) если я правильно понял вопрос то так
|
|
|
|
|
Nov 21 2012, 09:45
|
Местный
  
Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187

|
Цитата(deeper_79 @ Nov 20 2012, 16:33)  t=1:0.1:4*pi; y=sin(t); plot(t(100:116),y(100:116))
если я правильно понял вопрос то так Имею ввиду вот что: у меня есть некая двухмерная фигура, описываемая функцией f=(x,y), которая зависит еще и от времени по обоим координатам (x и у). Если я пишу: plot(x, y) - то матлаб строит мне эту фигуру во всем заданном интервале времени. А мне нужно только в конечный момент времени.
Сообщение отредактировал Stefan1 - Nov 21 2012, 11:52
|
|
|
|
|
Nov 21 2012, 13:20
|
Местный
  
Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187

|
Цитата(V_G @ Nov 21 2012, 15:43)  Не понял, вам 3-мерный график нужен? Есть функции surf, mesh. Нет, не 3-х мерный. У меня есть две разные синусоиды (синусоида тока и синусоида напряжения), которые изменяются со временем. Но мне надо вывести на графике ток относительно напряжения в конечный момент времени, а не за все периоды.
Сообщение отредактировал Stefan1 - Nov 21 2012, 13:22
|
|
|
|
|
Nov 21 2012, 17:04
|
Местный
  
Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187

|
Цитата(V_G @ Nov 21 2012, 17:43)  Ну, так пишите plot(x[последние моменты],y[последние моменты]), где последние моменты - диапазон индексов массивов x,y, соответствующих по-вашему последним моментам времени. Спасибо, заработало!
Сообщение отредактировал Stefan1 - Nov 21 2012, 17:04
|
|
|
|
|
Nov 22 2012, 08:29
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Stefan1 @ Nov 22 2012, 12:06)  По ходу решения задачи опять возник вопрос: а можно ли из синусоидальной функции с наличием высших гармоник u в зависимости от времени выделить первую гармонику и построить ее на графике также в зависимости от времени? Я раскладываю в ряд Фурье функцию и затем выделяю из нее первую гармонику: uf=fft(u); u1=uf(2)/256*2; uf=[]; Просто uf(2) - не строится. Как мне построить первую гармонику напряжения u в зависимости от времени (отбросив высшие гармоники)? Наверное, вычислить обратное преобразование Фурье - ifft. Например, так: Стираем (зануляем) в массиве uf все частоты, кроме нужной вам u1(1)=0 u1(3:length(u))=0 или в одну строку, если она вас не устрашит  u1([1 3:length(u)])=0 написала length(u1), т.к. не знаю точно, сколько у вас частот, вы же можете подставить конкретную константу, потом y=ifft(u1); а дальше строим график обычным образом.
|
|
|
|
|
Nov 22 2012, 09:32
|
Местный
  
Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187

|
Цитата(Xenia @ Nov 22 2012, 11:29)  Наверное, вычислить обратное преобразование Фурье - ifft. Например, так: Стираем (зануляем) в массиве uf все частоты, кроме нужной вам u1(1)=0 u1(3:length(u))=0 или в одну строку, если она вас не устрашит  u1([1 3:length(u)])=0 написала length(u1), т.к. не знаю точно, сколько у вас частот, вы же можете подставить конкретную константу, потом y=ifft(u1); а дальше строим график обычным образом. Все работает, только вот что-то не похоже на 1-ю гармонику (т.е. синусоиду). Может быть из-за того что я не то число ставлю вместо length(u1), т.к. у меня сигнал модулирован низкой частотой и первая гармоника здесь соответствует модулирующиму сигналу, а не несущей. Как бы теперь выделить первую гармонику несущей - наверно в ручную подбирать? т.к. частот модулирующего сигнала я не знаю.
Сообщение отредактировал Stefan1 - Nov 22 2012, 10:42
|
|
|
|
|
Nov 22 2012, 12:50
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Stefan1 @ Nov 22 2012, 13:32)  Все работает, только вот что-то не похоже на 1-ю гармонику (т.е. синусоиду). Может быть из-за того что я не то число ставлю вместо length(u1), т.к. у меня сигнал модулирован низкой частотой и первая гармоника здесь соответствует модулирующиму сигналу, а не несущей. Как бы теперь выделить первую гармонику несущей - наверно в ручную подбирать? т.к. частот модулирующего сигнала я не знаю. Возьмем 8-точеный пример: 1) Загоним туда косинусоиду (удобна тем, что ее спектр действителен): Код x = [0:7] // команда x = 0 1 2 3 4 5 6 7 // отклик МатЛаба
y = cos(2*pi/8*x) // команда y = 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 // отклик МатЛаба 2) Делаем fft Код u=fft(y) // команда u = -0.0000 4.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 4.0000 // отклик МатЛаба u' // команда напечатать в столбик -0.0000 // u(1) постоянная составляющая 4.0000 // u(2) амплитуда первой гармоники (самой медленной) 0.0000 // u(3) амплитуда второй гармоники -0.0000 // u(4) амплитуда третей гармоники 0.0000 // u(5) амплитуда четвертой гармоники, частота Найквиста (самая быстрая) -0.0000 // u(6) зеркальное комплексносопряженное от u(4) 0.0000 // u(7) зеркальное комплексносопряженное от u(3) 4.0000 // u(8) зеркальное комплексносопряженное от u(2) Ось симметрии проходит через частоту Найквиста. Постоянная составляющая своего отражения не имеет. "Комплексносопряженное" означает, что действительная часть числа сохраняется, а мнимое изменяет свой знак. 3) Обнуляем ненужные гармоники Кроме u(2) надо оставить незануленной еще и ее отражение u(8). Когда в массиве не 8 элементов, а больше, то надо рассчитать номер зеркального отражения. Для первой гармоники он самый последний в ряду: Код u([1 3:length(u)-1])=0 u = 0 4.0000 0 0 0 0 0 4.0000 4) Делаем обратное преобразование Фурье Код y2=ifft(u) y2 = 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 Готово! Поскольку у нас изначально была только 1-ая гармоника, то она и осталась.
|
|
|
|
|
Nov 22 2012, 17:47
|
Местный
  
Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187

|
Цитата(Xenia @ Nov 22 2012, 16:50)  Когда в массиве не 8 элементов, а больше, то надо рассчитать номер зеркального отражения. Спасибо за пояснения! Только вот у меня этих элементов - несколько тысяч, как это зеркальное отражение рассчитать то? И еще один вопрос: если мой сигнал модулирован низкой частотой, то 1-я гармоника будет именно этого модулирующего сигнала, может есть способы его убрать?
Сообщение отредактировал Stefan1 - Nov 22 2012, 18:07
|
|
|
|
|
Nov 22 2012, 18:23
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Stefan1 @ Nov 22 2012, 21:47)  У меня этих элементов - несколько тысяч, как его рассчитать то? Я же сказала - отражение 1-ой гармоники будет в самом конце массива, отражение 2-ой гармоники - 2-ая сзади. В чем проблема? Или вы только с одного бока считать умеете? А может быть за вас программу такую написать, чтобы элементы с заднего конца считала? Тем более что для 1-ой гармоники я ее уже приводила: u([1 3:length(u)-1])=0 Не заметили, как я единичку вычла? Это чтобы последний элемент не стирать! И эта формула работает при любой длине массива. Цитата(Stefan1 @ Nov 22 2012, 21:47)  И еще один вопрос: если мой сигнал модулирован низкой частотой, то 1-я гармоника будет именно этого модулирующего сигнала, может есть способы его убрать? Про "модулирован" не знаю. Но думаю, что, как всегда, эту проблему можно решить на модельном примере. Возьмите массив, длиной в целую степень двойки (8, 16, 32, выше будет трудно разбираться), поскольку я не понимаю, как организовано отражение при fft на массивах иной длины. А потом промодулируйте одну частоту (достаточно высокую) другой (более низкой). Только обе частоты выберите с периодом, точно укладывающимся в отрезок. И посмотрите, что будет после fft. Можно для пущей ясности задать им разные амплитуды, чтобы в спектре это выглядело нагляднее. Ну и желательно косинусоиды, чтобы не возиться с мнимой частью. Гугла, наконец, спросите - http://www.support17.com/component/content....html?task=view - пишет, что при амплитудной модуляции (какая у вас ЧМ или АМ вы так и не сказали) надо искать в спектре не частоту модуляции, а разностные частоты F+f и F-f по обе стороны от несущей F.
|
|
|
|
|
Nov 22 2012, 18:43
|
Местный
  
Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187

|
Цитата(Xenia @ Nov 22 2012, 22:23)  Про модулирован не знаю. Но думаю, что и как всегда эту проблему можно решить на модельном примере. Возьмите массив, длиной в целую степень двойки (8, 16, 32, выше будет трудно разбираться), поскольку я не понимаю, как организовано отражение при fft на массивах иной длины. А потом промодулируйте одну частоту (достаточно высокую) другой (более низкой). Только обе частоты выберите с периодом, точно укладывающимся в отрезок. И посторите что будет после fft. Можно для пущей ясности задать им разные аплитуды, чтобы а спектре это вглядело нагляднее. Ну и желательно косинусоиды, чтобы не возиться с мнимой частью. Да, так и сделаю. Спасибо за совет.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|