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

 
 
> Цикл for и формирование отсчетов sin
Acvarif
сообщение Mar 16 2016, 09:09
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Столкнулся с непоняткой в использовании цикла for
Имеется тестовый код
Код
% исходная частота сигнала
f = 90000;
% период частоты
T = 1/f;
% частота выборок 360 кГц
fs  = 360000;
% начало модели
tmin = 0;
% конец модели
tmax = 5*T;
% шаг моделирования
dt = T/4;
% цикл моделирования
t = tmin:dt:tmax;
xc = cos(2*pi*f*t);
pl = conv(xc, 4);
figure
plot(t,xc,'r');
hold on
stem(t,xc);
который работает верно и дает правильные отсчеты sin
Но если для формирования отсчетов использовать for
Код
for t = tmin:dt:tmax;
  xc = cos(2*pi*f*t);
end
то все отсчеты равны 1
Подскажите пожалуйста как правильно формировать отсчеты через for, поскольку есть необходимость применять for.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MiPe
сообщение Mar 16 2016, 09:18
Сообщение #2


Участник
*

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



В первом случае xc является массивом, а во втором случае - скаляром (в цикле xc постоянно перезаписывается). Соответствующие результаты на графике plot.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 16 2016, 09:22
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(MiPe @ Mar 16 2016, 12:18) *
В первом случае xc является массивом, а во втором случае - скаляром (в цикле xc постоянно перезаписывается). Соответствующие результаты на графике plot.

Спасибо. Понятно. Но если сделать так
Код
xc=zeros(1,20);
n = 0;
for t = tmin:dt:tmax;
  n = n + 1;
  xc(n) = cos(2*pi*f*t);
end
то получается все то же самое. Как правильно записать отсчеты сигнала в массив с помощью for?
Go to the top of the page
 
+Quote Post
Realking
сообщение Mar 16 2016, 09:58
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



Цитата(Acvarif @ Mar 16 2016, 12:22) *
Спасибо. Понятно. Но если сделать так
Код
xc=zeros(1,20);
n = 0;
for t = tmin:dt:tmax;
  n = n + 1;
  xc(n) = cos(2*pi*f*t);
end
то получается все то же самое. Как правильно записать отсчеты сигнала в массив с помощью for?


потому что ты после делаешь
plot(t,xc,'r');
а t после цикла - скаляр (равна tmax)

и да еще, не понятно зачем ты вообще хочешь юзать for


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 16 2016, 10:43
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(Realking @ Mar 16 2016, 12:58) *
потому что ты после делаешь
plot(t,xc,'r');
а t после цикла - скаляр (равна tmax)

и да еще, не понятно зачем ты вообще хочешь юзать for

Первое что пришло в голову для создания матрицы сигнала.
Очевидно можно и linspace..

Сообщение отредактировал Acvarif - Mar 16 2016, 10:49
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Mar 16 2016, 15:40
Сообщение #6


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

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



Цитата
Но если для формирования отсчетов использовать for

Хорошим стилем для MATLAB является использование циклов только в случае крайней необходимости. Встроенные средства языка работают существенно быстрее явно написанных циклов. На коротких массивах на современных компьютерах этого можете не почувствовать.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Mar 16 2016, 19:33
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(mdmitry @ Mar 16 2016, 18:40) *
Хорошим стилем для MATLAB является использование циклов только в случае крайней необходимости. Встроенные средства языка работают существенно быстрее явно написанных циклов. На коротких массивах на современных компьютерах этого можете не почувствовать.

Да. Понимаю. Пытаюсь приспособиться. Вот матрица сигнала на базе linspace
Код
f=90000;
fs = 4*f;
N = 20;
T = 1/f;
w=2*pi*f;
tmax = N*T;
t=linspace(0,tmax,fs*tmax + 1);
x = cos(w*t);
fprintf(' %d\n', x);
figure
plot(x,'r');
hold on
stem(x);

figure
plot(abs(fft(x)))% absolute spectrum of x

матрица коэффициентов
Код
% матрица коэффициентов 51 коэффициент
kf = [0 116 0 -214 0 354 0 -540 0 772 0 -1042 0 1339 0 -1645 0 1939 ...
      0 -2199 0 2403 0 -2533 0 2577 0 -2533 0 2403 0 -2199 0 1939 ...
      0 -1645 0 1939 0 -1042 0 772 0 -540 0 354 0 -214 0 116 0];
Вообще стоит задача получить отсчеты свертки КИХ фильтра с децимацией на 5
используя коэффициенты в десятичном исполнении для ПЛИС как-бы надвигая матрицу сигнала
на матрицу коэффициентов
Думаю без циклов тут не обойтись при всей мощи Матлаб.

Сообщение отредактировал Acvarif - Mar 16 2016, 20:17
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:31
Рейтинг@Mail.ru


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