Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2020, 20:00   #1
supersoldier37
 
Регистрация: 10.11.2020
Сообщений: 4
Восклицание MatLab

Необходима помощь: дали задание для разложения ряда Фурье в МатЛАБ, без использования специальных программ( встроенных функций), после значения М=1000 и больше весь ряд должен уходить в видеоимпульс, но происходит то, что ряд строится заново на каждом М кратным 1000, подскажите в чем ошибка, вот код:


clear all
k=0;
b1=0;
b2=2;
b3=b1;
to=0;
t1=4;
t2=6;
tk=10;
dt=(tk-to)/1000;
t=to : dt:tk;
N=size(t,2);
n=1;
while n<=N
if t(n)<=t1
y(n)=k*t(n)+b1;
elseif t(n)>t1 && t(n)<t2
y(n)=k*t(n)+b2;
else y(n)=k*t(n)+b3;
end
n=n+1;
end
figure(1)
plot(t,y);
a0=(2/tk)*trapz(t,y);
w=(2*pi/tk);
z=0;
m=1;
M=1400;
q1=0;
qk=w*M;
dq=(qk-q1)/(M-1);
q=q1 : dq:qk;
%разложение Фурье
while m<=M
c=(cos(m*w*t));%условие для второго коэффициента
i=y.*c;% умножение на видеоимпульс
an=(2/tk)*trapz(t, i);% второй коэффициент
s=(sin(m*w*t));%условие для третьего коэффициента
o=y.*s;% умножение на видеоимпульс
bn=(2/tk)*trapz(t, o);% третий коэффициент
r=(an*c)+(bn*s);%сумма н-ых коэффициентов
z=z+r;% суммирование всех коэффициентов
phi(m)=atan(bn/an); %условие фазового спектра
A(m)=(an^2+bn^2);% подкоренное условие амплитудного спектра
An=sqrt(A);% условие амплитудного спектра
m=m+1;
end
l=((a0/2)+z);% ряд Фурье
v=l.*y;% умножение ряда Фурье на видеоимпульс
figure(2)
plot(t,v);%вывод итогового сигнала для Фурье
%амплитудный спектр
figure
stem(q,An)
%фазовый спектр
figure
plot(q,phi)
%построение анимации
figure
plot(t,v);
f=getframe
for g=0:1:M
c=(cos(g*w*t));
i=y.*c;
an=(2/tk)*trapz(t, i);
s=(sin(g*w*t));
o=y.*s;
bn=(2/tk)*trapz(t, o);
r=(an*c)+(bn*s);
z=z+r;
l=((a0/2)+z);
v=l.*y;
plot(t,v)
for i=1:10000
end
drawnow
f=getframe;
end

Премного благодарен!
supersoldier37 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Matlab Алена26 Фриланс 0 14.05.2017 11:32
Matlab orandzheviyman Помощь студентам 0 17.03.2015 22:33
MATLAB GhostOfNight Помощь студентам 0 30.05.2014 15:18
Matlab linass Фриланс 1 16.11.2012 06:36
Matlab SKS Свободное общение 3 15.12.2009 01:15