2014 dxdy logo

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

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


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


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



Начать новую тему Ответить на тему
 
 Дискретное преобразование Фурье на MATLAB
Сообщение16.04.2022, 23:45 


19/11/20
307
Москва
Здравствуйте, для начала хотелось бы спросить кое-что по данному выводу:
Изображение
Вывод о том, что частота дискретизации должна превышать 2 частоты входного сигнала мне совершенно непонятен. Я понимаю, что нужно сделать так, чтобы функцию можно было бы восстановить только одним образом, то есть не должно существовать $m$, но причём тут частота никак не пойму. Вот откуда берётся это "0.5"?
После этого доказательства вводится дискретное преобразование Фурье: $\dot X(n)=\frac1 N \sum\limits_{k=0}^{N-1}x(k)e^{-j\frac{2\pi n}{N}k}$, вот его работу я хотел проверить с помощью MatLab. Я написал следующий код:
Код:
clear;
N=16;
f0=50;
fs=400;
x=(0:N-1);
y=2*sin(2*pi*f0*x/fs)+sin(6*pi*f0*x/fs+pi/4);
y_fft=fft(y, N);
y_myft=zeros(16);
for n=0:N-1
    for k=0:N-1
        y_myft(n+1)=y_myft(n+1)+y(n+1)*exp(-1j*2*pi*n*k/N);
    end
end
y_myft=y_myft/N;
figure;
grid on;
hold on;
plot(x, abs(y_myft), 'bo');
title('my FT')

Что-то вообще ничего не выходит, а ошибки я не вижу. При этом преобразование с помощью встроенной функции fft отлично работает. Получается, что я не до конца понимаю работу этого преобразования, в чём может быть ошибка? Моя идея была в том, чтобы в ячейке с номером $N$ лежала сумма с участием $n=N-1$.

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение17.04.2022, 00:22 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Пусть $f_0 \in (0,\frac {f_s}2), \;f=f_s-f_0$, тогда $f\in (\frac {f_s}2, f_s)$.
Покажите, что гармонический сигнал с частотой $f$ неотличим от некоторого гармонического сигнала с частотой $f_0$ по значениям в моменты времени $t=kt_s$.
Это — ещё одна причина неоднозначности, о которой авторы не написали. Она и накладывает ещё вдвое более жёсткие ограничения на спектр сигнала, если мы всё же хотим однозначности.

-- Сб апр 16, 2022 23:51:03 --

Kevsh в сообщении #1552752 писал(а):
Я понимаю, что нужно сделать так, чтобы функцию можно было бы восстановить только одним образом, то есть не должно существовать $m$, но причём тут частота никак не пойму.
Как Вы неудачно выразились. Можно подумать, что наличие или отсутствие $m$ — это свойство гармонического сигнала, и хорош тот сигнал, у которого $m$ нет. (А как это определить?)
На самом деле берутся два сигнала вида $\sin 2\pi f t$ с частотами, отличающимися на $mf_s$, где $m$ целое. Например, при $m=1$ их частоты отличаются на $f_s$. И у таких сигналов значения в моменты времени $kt_s$ совпадают.

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение17.04.2022, 15:43 
Заслуженный участник
Аватара пользователя


11/03/08
9906
Москва
Никогда не замечали, как в кино вдруг начинают вертеться в обратную сторону колёса автомобилей и карет? Вот как раз частота вращения колеса превысила половину частоты кадров. Какая-нибудь отметина на колесе от одного кадра к следующему успевает пройти больше пол-оборота, что воспринимается, как поворот менее чем на пол-оборота, но в обратную сторону. А если колесо успеет сделать 2, 3 и более, любое целое число оборотов, оно будет казаться неподвижным.
Кстати, в приведенном Вами тексте некоторое упрощение. Хотя чаще всего действительно интересуются частотами от нуля до половины частоты квантования (частоты Найквиста-Котельникова-Шеннона, встречаются все мыслимые комбинации имён), принципиальное ограничение - ширина полосы не более половины частоты квантования. Однажды возникла задача на основе данных радиотермометрии оценить пульсовые колебания кровотока в мозге. Только прибор выдавал данные раз в полторы секунды (0.7 Гц), а частота пульса обычно лежит в пределах 60-90 в минуту (1-1.5 Гц). Получилось, но если бы были в сигнале компоненты, лежащие вне оцениваемой нами полосы, они бы наложились на сигнал и отделить бы их было бы невозможно.

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение17.04.2022, 22:14 
Заслуженный участник
Аватара пользователя


11/03/08
9906
Москва
А что не совпадает? Что ожидали, что получили?

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение18.04.2022, 00:14 


19/11/20
307
Москва
Евгений Машеров
Ошибка была в одном символе в 11 строке, нужно было так:
Код:
y_myft(n+1)=y_myft(n+1)+y(k+1)*exp(-1j*2*pi*n*k/N);

Отловил очень просто: при $n = 0$ сумма должна равняться просто сумме значений функции во всех 16 точках, а в итоге суммировалось 1-е значение 16 раз, вот и выводился какой-то бред. Если добавить это исправление, то результат совпадает со встроенной функцией fft. Ваш пример с колесом в принципе показывает, как мне кажется, в чём вообще проблема. Однако ну никак не пойму, как это аналитически понять – ну вот есть у нас это равенство $\sin(2\pi f_0 k t_s )=\sin(2\pi (f_0 + mf_s)k t_s)$. Допустим, у нас всё плохо и $f_0=0,7f_s$, тогда получаем $\sin(2\pi f_0 k t_s )=\sin(2\pi f_s(0,7 + m)k t_s)$, ну и что :roll: ? Заменю на $f_0=0,2f_s$, тут условие выполняется, но равенство получается похожее. В общем, не вижу проблемы "аналитически".

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение18.04.2022, 06:59 
Заслуженный участник
Аватара пользователя


11/03/08
9906
Москва
Проблема "прагматическая". "Аналитически" тут всё тривиально, следствие из периодичности тригонометрических функций или, как говаривал Козьма Прутков - "желающий обедывать слишком поздно рискует обедывать завтра поутру". А практически - если у нас есть частоты вне полосы, которую мы можем оценивать при данной частоте оцифровки - у нас появляются "призраки",

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение18.04.2022, 09:31 
Заслуженный участник
Аватара пользователя


11/03/08
9906
Москва
В порядке научного анекдота. Два аспиранта, очень умные и энтузиастические (режим иронии отключён), исследовали электроэнцефалограмму (частотную полосу классически принимают 0.5Гц-35Гц, хотя в последнее время возрос интерес к более высоким частотам, до 70Гц и выше). В сигнале она выделяли кратковременные вспышки на определённых частотах. Разные у разных людей, здоровых испытуемых и больных, но вот две частоты, 22Гц и 28Гц проявлялись почти что у всех больных, при разных патологиях. Чему они пытались найти глубокое объяснение. Но увы. У них частота опроса была 128Гц, что даёт "частоту Найкиста-Котельникова-Шеннона" (никого не забыл? а, ещё Уиттекер) 64 Гц, то есть сетевую наводку (которую отсекает, и успешно, аналоговый режекторный фильтр) они бы увидели, а полоса ЭЭГ заведомо ниже. Только вот аппаратура питается через выпрямитель примерно такой схемы.
Изображение
Трансформатор имеет сердечник, который ввиду насыщения порождает кратные нечётные гармоники 150Гц и далее, а диодный мост превращает 50Гц переменного в пульсирующий 100Гц, то есть гармоники чётные, 100Гц и далее.

$150-128=22$

$128-100=28$

А отчего лишь у больных? А их, в отличие от здоровых испытуемых, писали не в экранированной камере в лаборатории, а в палате. Где электроаппаратуры не много, а очень много (особенно в реанимации).
Поэтому на входе ставят аналоговые фильтры (у которых куча недостатков, и малая крутизна среза, и разброс характеристик между каналами, и температурная и не только нестабильность; но они никак не зависят от частоты оцифровки), убирающие частоты выше НКШ с запасом (а уж "филировку" можно и цифровым фильтром сделать), и тем самым избавляющие от "призраков" в смысле алиасов.

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение18.04.2022, 09:37 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Kevsh в сообщении #1552867 писал(а):
Допустим, у нас всё плохо и $f_0=0,7f_s$, тогда получаем $\sin(2\pi f_0 k t_s )=\sin(2\pi f_s(0,7 + m)k t_s)$, ну и что :roll: ?

Kevsh
svv в сообщении #1552758 писал(а):
Пусть $f_0 \in (0,\frac {f_s}2), \;f=f_s-f_0$, тогда $f\in (\frac {f_s}2, f_s)$.
Покажите, что гармонический сигнал с частотой $f$ неотличим от некоторого гармонического сигнала с частотой $f_0$ по значениям в моменты времени $t=kt_s$.
Покажу на Вашем примере с частотой $0.7f_s$.
Берём в формуле $m=-1$ и получаем:
$\sin(2\pi\cdot 0.7f_s\cdot k t_s )=\sin(2\pi\cdot (0,7 -1)f_s\cdot k t_s)=-\sin(2\pi\cdot 0.3f_s\cdot k t_s)$
То есть гармонический сигнал вида $\sin 2\pi f t$ с частотой $0.7f_s$ неотличим от гармонического сигнала того же вида (только ещё умноженного на $-1$) с частотой $0.3f_s$ по значениям, взятым в моменты времени $kt_s$.

В общем случае гармонический сигнал с частотой $f_0$ неотличим от некоторого гармонического сигнала с частотой $f=f_s-f_0$ по дискретным отсчётам.
Ещё раз повторюсь, что эта неоднозначность несколько иного вида, чем та, о которой говорится в Вашем пособии. Например, "двойником" сигнала с частотой $0.6f_s$ оказывается сигнал с частотой $0.4f_s$.

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение18.04.2022, 09:50 
Заслуженный участник
Аватара пользователя


11/03/08
9906
Москва
Kevsh в сообщении #1552867 писал(а):
Допустим, у нас всё плохо и $f_0=0,7f_s$, тогда получаем $\sin(2\pi f_0 k t_s )=\sin(2\pi f_s(0,7 + m)k t_s)$, ну и что :roll: ? Заменю на $f_0=0,2f_s$, тут условие выполняется, но равенство получается похожее. В общем, не вижу проблемы "аналитически".


Проблема очень простая. В полученном разложении Вы имеете некоторое число, характеризующее $\Sigma_m A_m \sin(2\pi f_s(0,7 + m)k t_s)$. И узнать точное значение коэффициента можете, только если в сумме лишь одно слагаемое. В противном случае у Вас есть сумма коэффициентов, и что с ними делать далее - Вам неведомо.

 Профиль  
                  
 
 Re: Дискретное преобразование Фурье на MATLAB
Сообщение18.04.2022, 10:45 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Изображение
Тут $f_s=t_s=1$. Зелёный сигнал имеет частоту $0.7f_s$, синий $0.3f_s$ и инвертирован. Видно, что по отсчётам, взятым в моменты $kt_s$, их различить нельзя.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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



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

Сейчас этот форум просматривают: YandexBot [bot]


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

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