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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> График в MATLAB, как нарисовать?
Stefan1
сообщение Nov 20 2012, 09:50
Сообщение #1


Местный
***

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



Доброго времени суток.
У меня есть зависимость x от у, которая изменяется с течением времени. Как мне построить график зависимости х от у в последний момент времени.

Сообщение отредактировал Stefan1 - Nov 20 2012, 09:56
Go to the top of the page
 
+Quote Post
deeper_79
сообщение Nov 20 2012, 13:33
Сообщение #2


Участник
*

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

если я правильно понял вопрос то так
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 21 2012, 09:45
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 21 2012, 12:43
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Не понял, вам 3-мерный график нужен?
Есть функции surf, mesh.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 21 2012, 13:20
Сообщение #5


Местный
***

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



Цитата(V_G @ Nov 21 2012, 15:43) *
Не понял, вам 3-мерный график нужен?
Есть функции surf, mesh.

Нет, не 3-х мерный. У меня есть две разные синусоиды (синусоида тока и синусоида напряжения), которые изменяются со временем. Но мне надо вывести на графике ток относительно напряжения в конечный момент времени, а не за все периоды.

Сообщение отредактировал Stefan1 - Nov 21 2012, 13:22
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 21 2012, 13:43
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Ну, так пишите plot(x[последние моменты],y[последние моменты]),
где последние моменты - диапазон индексов массивов x,y, соответствующих по-вашему последним моментам времени.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 21 2012, 17:04
Сообщение #7


Местный
***

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



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


Спасибо, заработало!

Сообщение отредактировал Stefan1 - Nov 21 2012, 17:04
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 22 2012, 08:06
Сообщение #8


Местный
***

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



По ходу решения задачи опять возник вопрос: а можно ли из синусоидальной функции с наличием высших гармоник u в зависимости от времени выделить первую гармонику и построить ее на графике также в зависимости от времени?
Я раскладываю в ряд Фурье функцию и затем выделяю из нее первую гармонику:

uf=fft(u); u1=uf(2)/256*2; uf=[];

Просто uf(2) - не строится. Как мне построить первую гармонику напряжения u в зависимости от времени (отбросив высшие гармоники)?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 22 2012, 08:29
Сообщение #9


Гуру
******

Группа: Модератор 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
или в одну строку, если она вас не устрашит sm.gif
u1([1 3:length(u)])=0
написала length(u1), т.к. не знаю точно, сколько у вас частот, вы же можете подставить конкретную константу,
потом
y=ifft(u1);
а дальше строим график обычным образом.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 22 2012, 09:32
Сообщение #10


Местный
***

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



Цитата(Xenia @ Nov 22 2012, 11:29) *
Наверное, вычислить обратное преобразование Фурье - ifft.
Например, так:
Стираем (зануляем) в массиве uf все частоты, кроме нужной вам
u1(1)=0
u1(3:length(u))=0
или в одну строку, если она вас не устрашит sm.gif
u1([1 3:length(u)])=0
написала length(u1), т.к. не знаю точно, сколько у вас частот, вы же можете подставить конкретную константу,
потом
y=ifft(u1);
а дальше строим график обычным образом.


Все работает, только вот что-то не похоже на 1-ю гармонику (т.е. синусоиду). Может быть из-за того что я не то число ставлю вместо length(u1), т.к. у меня сигнал модулирован низкой частотой и первая гармоника здесь соответствует модулирующиму сигналу, а не несущей. Как бы теперь выделить первую гармонику несущей - наверно в ручную подбирать? т.к. частот модулирующего сигнала я не знаю.

Сообщение отредактировал Stefan1 - Nov 22 2012, 10:42
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 22 2012, 12:50
Сообщение #11


Гуру
******

Группа: Модератор 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-ая гармоника, то она и осталась.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 22 2012, 17:47
Сообщение #12


Местный
***

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



Цитата(Xenia @ Nov 22 2012, 16:50) *
Когда в массиве не 8 элементов, а больше, то надо рассчитать номер зеркального отражения.

Спасибо за пояснения! Только вот у меня этих элементов - несколько тысяч, как это зеркальное отражение рассчитать то?
И еще один вопрос: если мой сигнал модулирован низкой частотой, то 1-я гармоника будет именно этого модулирующего сигнала, может есть способы его убрать?

Сообщение отредактировал Stefan1 - Nov 22 2012, 18:07
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 22 2012, 18:23
Сообщение #13


Гуру
******

Группа: Модератор 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.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 22 2012, 18:43
Сообщение #14


Местный
***

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



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


Да, так и сделаю. Спасибо за совет.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 22 2012, 18:47
Сообщение #15


Гуру
******

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



Цитата(Stefan1 @ Nov 22 2012, 22:43) *
Да, так и сделаю. Спасибо за совет.


Есть совет еще лучше - сформулируйте точнее вашу проблему. Скажите прямым текстом, что вам нужна цифровая демодуляция, т.е. вычленение огибающей частоты на фоне несущей цифровыми методами. Тогда вам ответит вместо меня кто-то более сведущий в этом деле. А то ведь вы просите график построить...
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 - 09:11
Рейтинг@Mail.ru


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