2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Разложение функции в ряд Котельникова
Сообщение05.11.2023, 19:46 


11/05/23
18
Согласно теореме Котельникова функцию с ограниченным спектром можно разложить в ряд следующего вида:
$$f(x) = \sum_{k=-\infty}^{\infty} f(k \Delta) \frac{\sin \biggr(\frac{\pi}{\Delta} (x - k \Delta)\biggr)}{\frac{\pi}{\Delta} (x - k \Delta)},$$
где $\Delta \leq \frac{1}{2 F}, $ $F - $ интервал частот, на котором спектр функции отличен от нуля.

Задание: разложить в такой ряд функцию $sinc(\pi x)$. Для начала нужно выполнить преобразование Фурье, чтобы найти интервал $F.$ Я выполнил fft. На графике оставил только часть с положительными значениями частоты. По графику определил, что спектр становится нулевым после $f = \frac{\pi}{2.}$ Значит, $F = \pi, \quad \Delta = \frac{1}{2 \pi}.$
Но когда я выполнил расчеты и построил график для получившегося ряда, никакого точного восстановления функции не получилось. Прилагаю текст программы в Matlab и сами графики (для fft и разложения в ряд Котельникова соответственно).

Может быть, я не правильно понимаю теорему или как-то не так написал программу? Буду рад, если кто-нибудь сможет помочь.

clear

x = -5:0.01:5;
delta = 1/2/pi;

x_k = -100:delta:100;
f_k = sinc(pi*x_k);
n = length(x_k) - 1;
f = zeros(1, length(x));

for i = 1:length(x)
c = 1;
for j = -n/2:n/2
f(i) = f(i) + f_k(c) * sinc(pi/delta * (x(i) - x_k(c)));
c = c + 1;
end
end

syms t
fplot(sinc(pi*t));
grid on
hold on
plot(x, f);
legend('sinc', 'series');

Изображение

Изображение

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение05.11.2023, 20:07 


10/03/16
4444
Aeroport
ivantozavrus в сообщении #1616305 писал(а):
Задание: разложить в такой ряд функцию $sinc(\pi x)$


Извиняюсь, а это случайно не нулевой ($k=0$) член Вашей верхней формулы при $\Delta = 1$?
$$f(0) = \frac{\sin0}{0} = 1$$

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение05.11.2023, 22:47 


11/05/23
18
ozheredov в сообщении #1616309 писал(а):
Извиняюсь, а это случайно не нулевой ($k=0$) член Вашей верхней формулы при $\Delta = 1$?
$$f(0) = \frac{\sin0}{0} = 1$$


Получается, что так. Но разве к функции $sinc(\pi x)$ теорема не применима? Вроде бы, кроме ограниченного спектра, никаких других требований особо и нет. То есть она так же должна раскладываться по формуле для ряда Котельникова.

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение05.11.2023, 22:53 


18/05/15
733
Ряд, который у вас выписан, попробуйте правильно промасштабировать

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение05.11.2023, 22:58 


11/05/23
18
ihq.pl в сообщении #1616375 писал(а):
Ряд, который у вас выписан, попробуйте правильно промасштабировать


Что в данном случае значит промасштабировать?

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение05.11.2023, 23:10 


18/05/15
733
Изменить масштаб переменной.

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 10:33 


11/05/23
18
ihq.pl в сообщении #1616380 писал(а):
Изменить масштаб переменной.


Извините, но я пока совсем не понимаю по какому принципу это нужно сделать и зачем

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 12:32 


18/05/15
733
ivantozavrus
Это просто звучит страшно. Можно преобразовать ваше выражение так, чтобы справа оказались обычные синки (не масштабированные), про сдвиги которых известно, что они ортонормальные. Нужно ли - другой вопрос, но этим можно воспользоваться для того, чтобы увидеть/проверить одну очевидную вещь, а заодно потренироваться)...

У вас выписана формула разложения по базису масштабированных синков. В этом базисе можно разложить любую функцию, частотный спектр которой лежит в $\Omega = [-\pi/\Delta, \pi/\Delta]$. Частотный спектр функции $sinc(x) = \sin\pi x/\pi x$ есть полоса $[-\pi, \pi]$, то есть лежит в $\Omega$, если $\Delta\leqslant 1$...

ПС: лично я интерпретировал бы это задания, как выбор хорошего $\Delta$. Ну, в смысле такого, при котором ряд получился бы простым. Например, при $\Delta = 1$ имеем $sinc(x) = sinc(x)$, неинтересно. Интересным может оказаться $\Delta= 1/2$... в таком духе, в общем;)

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 14:43 


11/05/23
18
ihq.pl в сообщении #1616434 писал(а):
ivantozavrus

У вас выписана формула разложения по базису масштабированных синков. В этом базисе можно разложить любую функцию, частотный спектр которой лежит в $\Omega = [-\pi/\Delta, \pi/\Delta]$. Частотный спектр функции $sinc(x) = \sin\pi x/\pi x$ есть полоса $[-\pi, \pi]$, то есть лежит в $\Omega$, если $\Delta\leqslant 1$...

ПС: лично я интерпретировал бы это задания, как выбор хорошего $\Delta$. Ну, в смысле такого, при котором ряд получился бы простым. Например, при $\Delta = 1$ имеем $sinc(x) = sinc(x)$, неинтересно. Интересным может оказаться $\Delta= 1/2$... в таком духе, в общем;)


Только вот у меня получилось, что частотная полоса $sinc(\pi x) -$ это $[-\pi/2, \pi/2].$
И все же, получается что $\Delta = \frac{1}{2 \pi}$ так же под условие принадлежности спектра $\Omega = [-\pi/\Delta, \pi/\Delta]$ попадает. А разложения хорошего не получается. Где здесь подводный камень?

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 14:54 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Вероятно, ihq.pl намекает, что здесь у Вас ошибка:
ivantozavrus в сообщении #1616305 писал(а):
f(i) = f(i) + f_k(c) * sinc(pi/delta * (x(i) - x_k(c)));
Исправьте, и всё будет хорошо.

Comment. Существует два стандарта в определении функции $\operatorname{sinc}$. В MATLAB используется первый. Вы записали Ваш ряд через $\operatorname{sinc}$ по второму (или просто ошиблись).

Какой стандарт имел в виду автор задания в выражении $\operatorname{sinc}(\pi x)$ — загадка. С одной стороны, если подразумевалось использование MATLAB, то, наверное, первый. Да и, как сказано по ссылке, в ЦОС обычно используется первый. С другой — вид выражения как бы намекает, что $\pi$ не входит в определение $\operatorname{sinc}$ (=второй стандарт), поэтому его приходится вводить дополнительным множителем в аргументе функции. Хотя, может быть, подразумевалась именно функция $\frac{\sin\pi^2 x}{\pi^2 x}$, так что это гадание.

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 16:08 


11/05/23
18
svv в сообщении #1616452 писал(а):
Вероятно, ihq.pl намекает, что здесь у Вас ошибка:
ivantozavrus в сообщении #1616305 писал(а):
f(i) = f(i) + f_k(c) * sinc(pi/delta * (x(i) - x_k(c)));
Исправьте, и всё будет хорошо.

Comment. Существует два стандарта в определении функции $\operatorname{sinc}$. В MATLAB используется первый. Вы записали Ваш ряд через $\operatorname{sinc}$ по второму (или просто ошиблись).

Какой стандарт имел в виду автор задания в выражении $\operatorname{sinc}(\pi x)$ — загадка. С одной стороны, если подразумевалось использование MATLAB, то, наверное, первый. Да и, как сказано по ссылке, в ЦОС обычно используется первый. С другой — вид выражения как бы намекает, что $\pi$ не входит в определение $\operatorname{sinc}$ (=второй стандарт), поэтому его приходится вводить дополнительным множителем в аргументе функции. Хотя, может быть, подразумевалась именно функция $\frac{\sin\pi^2 x}{\pi^2 x}$, так что это гадание.


Спасибо огромное! Теперь все получилось. Подразумевался все-таки $sinc(x)$ в первом смысле.
Получается, что я ошибся в опредлении $\Delta = \frac{1}{2 F},$ и под $F$ нужно понимать полуширину частотной полосы $f?$

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 16:21 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Ошибка в этом преобразовании (правая часть была закодирована в MATLAB):$$\sum_{k=-\infty}^{\infty} f(k \Delta) \frac{\sin \biggr(\frac{\pi}{\Delta} (x - k \Delta)\biggr)}{\frac{\pi}{\Delta} (x - k \Delta)}=\sum_{k=-\infty}^{\infty} f(k \Delta) \operatorname{sinc}\left({\frac{\color{magenta}\pi}{\Delta} (x - k \Delta)}\right)$$А именно, вместо ${\color{magenta}\pi}$ надо поставить единичку, так как по первому стандарту $\pi$ уже входит в определение $ \operatorname{sinc}$.

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 17:21 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Преобразование Фурье от $\operatorname{sinc}(ax)$ можно найти в справочнике, например, здесь (таблица, строка 202). При $a>0$ оно равно $\frac 1{a}\operatorname{rect}\frac {\xi}{a}$, где $\xi$ — обычная (не циклическая) частота, а $\operatorname{rect}$прямоугольная функция:$$\operatorname{rect}\frac{\xi}{a} =
\begin{cases}
 0, & \text{if } |\xi| > \frac{a}{2} \\
 \frac{1}{2}, & \text{if } |\xi| = \frac{a}{2} \\
 1, & \text{if } |\xi| < \frac{a}{2}.
\end{cases}\right$$Поскольку у нас $a=\pi$, верхняя граничная частота спектра $f_c=\frac a 2=\frac{\pi}2$. Тогда интервал дискретизации $\Delta\leqslant \frac{1}{2f_c}=\frac{1}{\pi}$.

Преподаватель хотел, чтобы Вы взяли различные значения delta и убедились, что
delta = 1/pi*0.5; % работает
delta = 1/pi*0.8; % работает
delta = 1/pi*1.0; % работает
delta = 1/pi*1.2; % не работает

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 17:30 


11/05/23
18
svv в сообщении #1616468 писал(а):
Ошибка в этом преобразовании (правая часть была закодирована в MATLAB):$$\sum_{k=-\infty}^{\infty} f(k \Delta) \frac{\sin \biggr(\frac{\pi}{\Delta} (x - k \Delta)\biggr)}{\frac{\pi}{\Delta} (x - k \Delta)}=\sum_{k=-\infty}^{\infty} f(k \Delta) \operatorname{sinc}\left({\frac{\color{magenta}\pi}{\Delta} (x - k \Delta)}\right)$$А именно, вместо ${\color{magenta}\pi}$ надо поставить единичку, так как по первому стандарту $\pi$ уже входит в определение $ \operatorname{sinc}$.


Я имею ввиду, что полоса частот $f \in [-0.5, 0.5].$ Тогда $F = 1,$ а $\Delta \leq \frac{1}{2},$ если брать за $F$ всю полосу. Но точно восстановить функцию получается уже при $\Delta = 1.$ Значит, надо за $F$ принимать полуполосу.

 Профиль  
                  
 
 Re: Разложение функции в ряд Котельникова
Сообщение06.11.2023, 17:42 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
ivantozavrus в сообщении #1616479 писал(а):
Я имею ввиду, что полоса частот $f \in [-0.5, 0.5].$ Тогда $F = 1,$ а $\Delta \leq \frac{1}{2},$ если брать за $F$ всю полосу. Но точно восстановить функцию получается уже при $\Delta = 1.$ Значит, надо за $F$ принимать полуполосу.
Куда у Вас делись все $\pi$? Правильное максимальное значение интервала дискретизации $\Delta=\frac 1{\pi}$. Мне не хотелось бы использовать величину $F$, потому что она уже "скомпрометирована" (мы подбираем для неё определение, исходя из согласия с численным экспериментом, и уже есть два разных варианта). Пожалуйста, попробуйте разобраться в моих обозначениях (они такие же, как в Википедии, статья Теорема Котельникова):
ivantozavrus в сообщении #1616305 писал(а):
По графику определил, что спектр становится нулевым после $f = \frac{\pi}{2}$
Это правильно. Итак, спектр сигнала ненулевой только в полосе частот $f\in[-f_c;f_c]$, где в нашем случае $f_c= \frac{\pi}{2}$.
Тогда, по т. Котельникова, сигнал восстанавливается при
$0<\Delta \leqslant \frac {1}{2f_c}$
Подставляя сюда $f_c$, находим
$0<\Delta \leqslant \frac {1}{\pi}$
И это подтверждается численными экспериментами. При $\Delta \leqslant \frac {1}{\pi}$ сигнал восстанавливается, при $\Delta > \frac {1}{\pi}$ нет.

Кстати, посмотрите мой вариант скрипта, может, какие-то приёмчики понравятся.
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
x = -5:0.01:5;
deltamax = 1/pi; % максимальный интервал дискретизации по т.Котельникова
delta = deltamax*0.8; % попробуйте другие значения коэффициента
kmax = 100; % берем отсчёты с номерами -kmax:kmax
signal = @(x) sinc(pi*x); % anonymous function

y = zeros(size(x)); % аппроксимация
for k = -kmax:kmax
    x_k = delta*k;
    f_k = signal(x_k);
    y = y + f_k * sinc((x-x_k)/delta);
end

hold on
plot(x, signal(x));
plot(x, y);
hold off

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: tolstopuz


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group