Быстрое преобразование Фурье с прореживанием по времени
Чувашский государственный университет имени И.Н. Ульянова
Факультет информатики и вычислительной техники
Курсовая работа
по дискретной математике на тему:
«Быстрое преобразование Фурье с прореживанием по времени»
Выполнила: студентка группы 42-09
Проверил преподаватель :
Чебоксары 2011
Содержание:
Содержание: 2
Введение 3
Задание 3
1. Математическое описание задачи 4
1.1 Определение и свойства
дискретного преобразования
1.2 Математическое описание
БПФ с прореживанием по
2. Разработка алгоритмов
и программы для решения
2.1 Представление данных 12
2.2 Алгоритм быстрого
преобразования Фурье с
3. Анализ результатов моделирования алгоритма БПФ с прореживанием по времени 14
3.1 Обращение к программе 14
3.2 Входные и выходные параметры 14
3.3 Примеры работы программы 14
Выводы 17
Список литературы 18
Приложение 19
Введение
Целью курсовой работы является изучение и освоение методов цифровой обработки сигналов и изображений.
В настоящее время во многих отраслях науки и техники, таких как радиолокация, сейсмография, связь, радиоастрономия, медицинская электроника, цифровая обработка сигналов (ЦОС) приобретает все более широкое применение.
Важный момент применения ЦОС - это выбор разумно построенного алгоритма среди огромного разнообразия алгоритмов дискретного преобразования: быстрых алгоритмов свертки или быстрого преобразования Фурье. Общий подход к построению быстрых преобразований основан на факторизации матриц преобразования.
В наше время существуют три основные области применения дискретных спектральных преобразований:
● использование преобразований для выделения характерных признаков сигнала при спектральном анализе;
● кодирование (сжатие изображений);
● косвенное вычисление линейной свертки, позволяющее проводить ЦОС более эффективно.
Было разработано большое
При цифровой обработке сигнал невозможно
представить непрерывной
Задание
Реализовать программу для выполнения
спектрального анализа с
1. Математическое описание задачи
1.1
Определение и свойства дискретного
преобразования Фурье
Сигнал - это физический процесс, отображающий некоторую информацию. Сигнал может быть математически описан некоторой функцией определенного типа.
Например:
- одномерные сигналы описываются вещественной или комплексной функцией xa(t), которая определена на интервале вещественной оси t'<=t<=t";
- аналоговые сигналы - непрерывной или кусочно-непрерывной функцией xa(t);
- дискретные сигналы - решетчатыми функциями, или последовательностями х(nТ),
где T=const - интервал дискретизации, n =0,1,2,3,...;
где функция может принимать в дискретные моменты времени произвольные значения на некотором интервале, которые называются выборками или отсчетами функции.
Определение 1. Прямое преобразование Фурье - это спектр Xa(jω) аналогового сигнала xa(t), т.е.
Согласно обратному
Определение 2. Дискретное преобразование Фурье - это пара взаимнооднозначных преобразований:
(1.3)
(1.4)
где Ω=2π/(NT) – основная частота преобразования.
Т.к. ej2π N =Wn - поворачивающий множитель, то отсюда ДПФ и ОДПФ:
(1.5)
(1.6)
где x(n) - периодическая последовательность с периодом N (период – N отсчетов), т.е. x(n)=x(n+mN), m - целое число.
Определение 3. Величина называется поворачивающим множителем.
Основным свойством этих преобразований является тот факт, что из последовательности {x} получается (при прямом преобразовании) последовательность {X}, а если потом к {X} применить обратное преобразование, то снова получится исходная последовательность {x}.
Пусть имеется звуковое или какое-то иное колебание, представленное функцией x=f(t) на отрезке[0,T]. Для компьютерной обработки выполняется дискретизация: отрезок разбивается на N-1 частей и сохраняются значения функции x0, x1, …, xN-1 для N точек на границах отрезков t0=0, t1=T/N, t2=2T/N, …, tn=nT/N, …, tN-1=T.
Рис.1
В результате прямого преобразования будут получены N значений Xk. Рассмотрим теперь обратное преобразование Фурье.
Xk в общем случае величина комплексная. Разложим ее на действительную и мнимую составляющую: Xk = Rek + i Imk, разложим экспоненту по формуле Эйлера на синус и косинус действительного аргумента, внесем 1/N под знак суммы и перегруппируем элемент на две суммы:
Так как все xn – действительные числа, вторая сумма равна нулю. Отсюда:
(1.7)
Поскольку при дискретизации было взято tn=nT/N, то можно выполнить замену n=tnN/T. В результате формула принимает следующий вид:
(1.8)
Рассмотрим теперь формулу колебаний:
, где — циклическая частота колебаний. После разложения по формуле косинуса суммы:
(1.9)
Если в этой формуле выделить компоненты, не зависящие от t и заменить их: и , то формула запишется следующим образом:
Причем про величинам Re и Im можно однозначно восстановить амплитуду и фазу исходной гармоники.
Сравним формулы (1.8) и (1.10). Видно, что сумма (1.8) представляет собой сумму из N гармонических колебаний разной частоты, фазы и амплитуды:
(1.11)
Функция называется k-гармоникой.
Физический смысл дискретного преобразования Фурье состоит в том, чтобы представить некоторый дискретный сигнал в виде суммы гармоник. Параметры каждой гармоники вычисляются прямым преобразованием, а сумма гармоник - обратным.
Дискретное преобразование Фурье имеет следующие основные свойства:
- Линейность
Если X(k) и Y(k) есть ДПФ последовательностей x(nT) и y(nT) соответственно, то ДПФ последовательности ax(nT)+by(nT), где a и b – произвольные константы, равно aX(k)+bY(k).
- Сдвиг
Пусть X(k) – ДПФ последовательности x(nT), а последовательность y(nT) получается из последовательности x(nT) путем сдвига (в случае конечной последовательности – кругового сдвига) на n0 отсчетов: y(nT)=x(nT+n0T). Тогда ДПФ последовательности y(nT) равно .
Аналогичный результат справедлив для сдвига коэффициентов ДПФ. Если X(k) и Y(k) есть ДПФ последовательностей x(nT) и y(nT) соответственно и Y(k)=X(k-k0), то .
При анализе последовательностей конечной длины необходимо учитывать специфический характер временного сдвига последовательности. Так, на рис.2 а изображена конечная последовательность х (n) длиной в N отсчетов. Там же крестиками изображены отсчеты эквивалентной периодической последовательности хp(n), имеющей то же ДПФ, что и х(n). Чтобы найти ДПФ сдвинутой последовательности х(n – n0), причем n0 < N, следует рассмотреть сдвинутую периодическую последовательность Хр(n — n0) и в качестве эквивалентной сдвинутой конечной последовательности (имеющей ДПФ ) принять отрезок последовательности хp(n – n0) в интервале 0 ≤ n ≤ N — 1. Таким образом, с точки зрения ДПФ последовательность х(n – n0) получается путем кругового сдвига элементов последовательности х(n) на n0 отсчетов.
3.Свойства симметрии
Если последовательность x(nT) является действительной, то ее ДПФ удовлетворяет следующим условиям симметрии:
1.2 Математическое описание БПФ с прореживанием по времени
Пусть задана последовательность x(n) , n = 0, 1, 2, … , N - 1.
Разобьем ее на две части, выделяя четные и нечетные элементы:
Выражение для дискретного преобразования Фурье:
Т.к. x(n) имела длину N, X(k) имеет период N.
При можно записать
Обозначим
,
тогда
, (1.19)
т.е. N-точечное ДПФ вычисляется через -точечное.
Пример. N=8.
Операция
“бабочки” для ДПФ с
Рис.4
A = a + W*b
B = a – W*b.
4-точечное
преобразование Фурье можно
В
результате многократного прореживания
входные отсчеты располагаются
в двоично-инверсном порядке. Поэтому
двоичное реверсирование является первым
шагом для ДПФ с прореживанием
по времени:
Исходные номера отсчётов |
Номера отсчётов после прореживания | ||
Десятичные |
Двоичные |
Двоичные |
Десятичные |
0 |
000 |
000 |
0 |
1 |
001 |
100 |
4 |
2 |
010 |
010 |
2 |
3 |
011 |
110 |
6 |
4 |
100 |
001 |
1 |
5 |
101 |
101 |
5 |
6 |
110 |
011 |
3 |
7 |
111 |
111 |
7 |
Граф алгоритма имеет следующий вид:
Рис.6
WN0 = 1
W41 = W82.
Граф
алгоритма имеет регулярную структуру
и позволяет проводить
Оценим вычислительную сложность:
комплексных сложений ;
комплексных умножений .
Краткие выводы:
Программная реализация этого примера не столь тяжела. Но при более высоких степенях могут возникнуть проблемы в быстродействии программы, так как с повышением степени количество элементов сигнала значительно возрастает. Отсюда большое количество операций, требуемых для преобразования входного сигнала.
2.
Разработка алгоритмов и программы
для решения практической задачи
2.1 Представление данных
Используемые
числа в данной программе будут
иметь вещественный тип. И будут
и комплексными, так как в процессе
выполнение вычисления используются комплексные
выражения в частности
Входной сигнал будет одномерным массивом с длиной N. Остальные числа, такие как счётчики, будут иметь целый тип.
В процессе вычисления происходит замещение вновь вычисленных данных на место старых.
2.2
Алгоритм быстрого преобразования
Фурье с прореживанием по времени
На входе дан одномерный массив чисел, т.е. вектор Х размера . На выходе необходимо получить массив чисел (спектр) размера n, т.е. преобразованный вектор Х, содержащий результат преобразования.
Эта функция БПФ реализуется на основе алгоритма, описанного ранее в п. 1.2.
Алгоритм обратного преобразования совпадает с алгоритмом прямого, за исключением вычислительной формулы для ДПФ:
и соответственно для ОДПФ.
Листинг процедуры
% перестановка элементов согласно двоичной инверсии
for i = 1:n, % n раз
j = bin_invers(i - 1,n); % номер двоично-инверсированного числа
if j > i, % если элемент не обработан,
temp = x(j + 1); % то меняем местами
x(j + 1) = x(i);
x(i) = temp;
end
end;
% главный цикл вычислениЯ БПФ
m = log2(n); % количество операций "бабочка"
for step = 1:m,
i = 1; % устанавливаем коэффициенты
j = 2^(step - 1) + 1;
down = j; % верхняя граница значений I
count = 1; % счетчик
lim = n/2;
k = 0; % степень поворачивающего множителя W
while count <= lim, % n/2 операции "бабочка"
xi = x(i); % запоминаем
xj = x(j); %
Wkoef = W(2^step,k,dirFFT); % вычисляем W
x(i) = xi + Wkoef*xj; % находим новые значениЯ
x(j) = xi - Wkoef*xj; % выполняем "бабочку"
% вычисляем следующие i,j,k,
if i + 1 >= down, % если граница превышена,
i = j + 1; % то вычисляем следующее
j = i + 2^(step - 1); % преобразование
down = j; % заново вычисляем нижнюю границу
k = 0; % степень W равна 0
else % в противном случае все значения
i = i + 1; % увеличиваем
j = j + 1; % на 1
k = k + 1;
end;
count = count + 1; % увеличиваем счетчик на 1
end;
end;
if dirFFT ~= 0,
X = x/n; % полученный результат при обратном БПФ
else
X = x; % полученный результат при прямом БПФ.
End
3.
Анализ результатов моделирования
алгоритма БПФ с прореживанием
по времени
3.1 Обращение к программе
Программа может быть запущена только из среды MatLab.
Для работы программы необходимо наличие IBM PC совместимого компьютера с графическим адаптером VGA. Необходимый объем свободной оперативной памяти − не менее 35- 40 Мб. Программа запускается и работает под управлением операционной системы Windows NT, 2000, XP.
Для запуска программы в командной строке MatLab необходимо выбрать текущий каталог программы, набрать имя программы (ptogFFT) и нажать <Enter> , либо открыть программу в отладчике и нажать клавишу <F5> (кнопку ) для начала ее выполнения.
Программа использует 5 дополнительных функций:
- MyFFT() – вычисление БПФ с прореживанием по времени
- Bin_invers – модуль для вычисления двоично-инверсного числа
- W – функция для вычисления поворачивающего множителя
4) reads_data() – считывание входных данных: N – количество отсчетов ДПФ, count – количество синусоид, входящих в сигнал, f –частоты синусоид
5) Spectral() – проводит спектральный анализ.
3.2 Входные и выходные параметры
Входными данными программы является заданная пользователем функция (сумма синусоид), для которой строится ее график на промежутке [0,N] и график полученных результатов вычисления БПФ, которые являются выходными данными.
3.3 Примеры работы программы
На
вход программы подается длина вектора
N, количество синусоид, частоты синусоид.
Выбирается способ вычисления БПФ: либо
с помощью стандартной функции, либо с
помощью написанной функции. При использовании
написанной функции можно выбрать направление
преобразования: прямое или обратное.
Вид программы после вызова
Программа после использования написанной функции БПФ в прямом исполнении
Программа после применнения написанной функции БПФ в обратном направлении
Программа при использовании стандартной функции БПФ
Выводы
Успешно был реализован программный объект, реализующий быстрый алгоритм Фурье с прореживанием по времени .Приобретены навыки по Цифровой Обработке Сигналов(ЦОС) и реализация их в программной среде MatLab.
Список литературы
- Андреева А. А. Быстрое преобразование Фурье. Конспект лекций. – Чебоксары: ЧГУ,2002. –32 с
- Цифровая обработка сигналов / А. Б. Сергиенко — СПб.: Питер, 2002. — 608 с
- Гольденберг Л. М. и др. Цифровая обработка сигналов. –М: Радио и связь, 1985. – 312 с.
Приложение
Текст программы progFFT
function varargout = progFFT(varargin)
% PROGFFT M-file for progFFT.fig
% PROGFFT, by itself, creates a new PROGFFT or raises the existing
% singleton*.
%
% H = PROGFFT returns the handle to a new PROGFFT or the handle to
% the existing singleton*.
%
% PROGFFT('CALLBACK',hObject,
% function named CALLBACK in PROGFFT.M with the given input arguments.
%
% PROGFFT('Property','Value',...
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before progFFT_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to progFFT_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help progFFT
% Last Modified by GUIDE v2.5 08-Jun-2011 21:55:20
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @progFFT_OpeningFcn, ...
'gui_OutputFcn', @progFFT_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin & isstr(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before progFFT is made visible.
function progFFT_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to progFFT (see VARARGIN)
% Choose default command line output for progFFT
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes progFFT wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = progFFT_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor',
else
set(hObject,'BackgroundColor',
end
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor',
else
set(hObject,'BackgroundColor',
end
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'
% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor',
else
set(hObject,'BackgroundColor',
end
function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit3 as text
% str2double(get(hObject,'
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global N count f % задание глобальных переменных
reads_data(handles);
Spectral(handles);
function mutual_exclude(off)
set(off,'Value',0)
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close;
% --- Executes on button press in radiobutton1.
function radiobutton1_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton1
off = [handles.radiobutton2];
mutual_exclude(off)
% --- Executes on button press in radiobutton2.
function radiobutton2_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton2
off = [handles.radiobutton1];
mutual_exclude(off)
off = [handles.radiobutton4];
mutual_exclude(off)
off = [handles.radiobutton3];
mutual_exclude(off)
% --- Executes on button press in radiobutton3.
function radiobutton3_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton3
off = [handles.radiobutton4];
mutual_exclude(off)
off = [handles.radiobutton2];
mutual_exclude(off)
% --- Executes on button press in radiobutton4.
function radiobutton4_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of radiobutton4
off = [handles.radiobutton3];
mutual_exclude(off)
off = [handles.radiobutton2];
mutual_exclude(off)
Текст функции myFFT
function X = myFFT(x,n,dirFFT);
%-----------------------------
% Функция вычисления ДПФ
(Дискретное преобразование
% (Обратного Дискретного Преодразования Фурье)на основе
% алгоритма БПФ (Быстрое
преобразование Фурье) с
% (Decimation in time)
%-----------------------------
% Параметры:
% x матрица значений входной функции
% n длина преобразования
% dirFFT направление преобразования:
%
%
% Результаты:
% а результат преобразования
%-----------------------------
% перестановка элементов согласно двоичной инверсии
for i = 1:n, % n раз
j = bin_invers(i - 1,n); % номер двоично-инверсированного числа
if j > i, % если элемент не обработан,

- Быстрозамороженные блюда и гарниры
- Быстрорастущие фирмы как фактор экономического роста национальной экономики
- Бытие в категориальных структурах диалектики
- Бытие в философских системах элеатов
- Бытие как предмет мышления в новоевропейской философии
- Быт и настроения политической каторги и ссылки Сибири в 1900 - 1917 годах в воспоминаниях бывших политкаторжан и ссыльнопоселенцев
- Быт и нравы горожан на рубеже веков
- БҰҰ қалыптасуы, алдына қойған мақсатары мен мекемелері
- БФУ амортизации и износа основных средств
- Бщая характеристика и классификация миорелаксантов по химической структуре и механизму действия
- Бщая характеристика преступления как правовой категории
- Бщее описание водоёма- охладителя Курской АЭС
- Быстрая сортировка
- Быстрое преобразование Фурье