2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Матлаб. сдвиг функции
Сообщение17.10.2012, 18:01 
Изображение

Картинка корявая,но нужен совет)
Собственно есть функция, есть ее значения в отсчетах в точках 1-N через равные промежутки T. Мы берем каждое второе значение т.е. 1,3,5...N и восстанавливаем четные значения по Котельникову. Т.е. чтобы найти значение в точке 2 нам нужно сложить все значения функций sinc, умноженные на значения самой функции в точках 1,3,5...
Суть такая-берем первый синк, умножаем его на значение х в точке 1, получаем функцию например синк1
потом третий синк-умножаем на значение в х 3 и получаем синк3 и тд до N.
Значение в точке 2=синк1 в точке 2+синк3 в точке 2+синк 5 в точке2 и так до N

по такому циклу не работает никак(
Код:
for k=1:2:N
    xx(k)=sum(H(1:2:N).*x(1:2:N));
    xx(k+1)=sum(H(2:2:N-1));
end;



вот весь текст:
Код:
clear all

F=1;
dt=0.5;
N=200;
H=sinc((-N/2+dt:N/2-1+dt));
w=chebwin(N,100);
H=H.*w';
H(N+1:10*N)=0;
x=sin(2*pi*F*(-N/2:2:N/2-1)/N+pi/17);
for k=1:2:N
    xx(k)=sum(H(1:2:N).*x(1:2:N));
    xx(k+1)=sum(H(2:2:N-1));
end;
plot(xx);


Не могу понять вот что: изначально задаю синк, как потом его сдвинуть например в цикле, но так чтобы были значения в промежуточных точках известны...?

 
 
 
 Re: Матлаб. сдвиг функции
Сообщение17.10.2012, 20:20 
~SIERRA~ в сообщении #632096 писал(а):
по такому циклу не работает никак(
А как оно будет работать, когда у вас в цикле по нечетным k соседним значениям массива присваиваются некие выражения, которые от этого k никак не зависят?

 
 
 
 Re: Матлаб. сдвиг функции
Сообщение18.10.2012, 12:46 
Аватара пользователя
Ваши "формулы" понять очень сложно - запишите формулы так, чтобы можно было их понять (используя нотацию $\TeX$), тогда станет, думаю, понятно, как это реализовать в MatLAB



 i  $\operatorname{sinc}x$
Код:
[math]$\operatorname{sinc}x$[/math]

 
 
 
 Re: Матлаб. сдвиг функции
Сообщение18.10.2012, 18:16 
немного переделала цикл,но все равно ошибку выдает в цикле самом
Код:
clear all

F=1;
dt=1;
ddt=0.5;
N=200;
H=sinc((-N/2+ddt:dt:N/2-1+ddt));
w=chebwin(N,100);
H=H.*w';
H(N+1:dt:10*N)=0;
H(N/2)=1;
M=200;
x=sin(2*pi*F*(-M/2:2:M/2-1)/M+pi/17);
xx(1:M)=0;
for k=1:2:M
    I(k)=H(N/2-k:N).*x(k);
    xx(k)=xx(k)+I(k);
    xx(k+1)=xx(k+1)+I(k+1);
end;
plot(xx);

 
 
 
 Re: Матлаб. сдвиг функции
Сообщение18.10.2012, 18:34 
Аватара пользователя
Цитата:
Код:
for k=1:2:M
    I(k)=H(N/2-k:N).*x(k);


таким образом вы определяете $I$ только для нечетных $k$. Заполняете Вы $I$ в цикле, наращивая его размер, - это плохо, предварительно лучше задать его пустым, скажем, при помощи функции zeros(). Кстати у Вас $I$ - матрица, так как $H(N/2-k:N)$ - массив, так что лучше и обращаться к ней, как к матрице $I(:,k)$ или $I(k,:)$ - как Вам больше нравится, иначе можете получить что-то непредсказуемое.

Цитата:
Код:
   I(k)=H(N/2-k:N).*x(k);
    xx(k)=xx(k)+I(k);
    xx(k+1)=xx(k+1)+I(k+1);


в последней из этих строчек у Вас обращение к $k+1$-ому $I$, которое не существует (а если Вы создадите $I$ до цикла, то будет существовать, но заполенено будет не тем, чем Вам надо), что также не может быть правильно.

 
 
 
 Re: Матлаб. сдвиг функции
Сообщение18.10.2012, 19:02 
Код:
for k=1:M
    I(1:M)=0;
    I(1:M)=H(N/2-k:N)*x(k);
    for l=1:2:M
    xx(l)=xx(l)+I(l);
    xx(l+1)=I(l+1);
    end;
end;


переделала так,но на 3 строке опять ошибка, что несоответствие размеров матриц...не понимаю почему..

 
 
 
 Re: Матлаб. сдвиг функции
Сообщение18.10.2012, 19:53 
Аватара пользователя
потому что слева у Вас вектор из $M$ элементов, а справа - из $N/2-k:N$.

У Вас какой-то хаос там в кодах. Вы можете привести не матлабовский код, а просто формулы, по которым Вы собираетесь проводить вычисления?

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group