Автор: Пользователь скрыл имя, 28 Февраля 2012 в 08:19, курсовая работа
Целью курсовой работы является изучение и освоение методов цифровой обработки сигналов и изображений.
В настоящее время во многих отраслях науки и техники, таких как радиолокация, сейсмография, связь, радиоастрономия, медицинская электроника, цифровая обработка сигналов (ЦОС) приобретает все более широкое применение.
Введение 3
Задание 3
1. Математическое описание задачи 4
1.1 Определение и свойства дискретного преобразования Фурье 4
1.2 Математическое описание БПФ с прореживанием по времени 8
2. Разработка алгоритмов и программы для решения практической задачи 12
2.1 Представление данных 12
2.2 Алгоритм быстрого преобразования Фурье с прореживанием по времени 12
3. Анализ результатов моделирования алгоритма БПФ с прореживанием по времени 14
3.1 Обращение к программе 14
3.2 Входные и выходные параметры 14
3.3 Примеры работы программы 14
Выводы 17
Список литературы 18
Граф алгоритма имеет следующий вид:
Рис.6
WN0 = 1
W41 = W82.
Граф
алгоритма имеет регулярную структуру
и позволяет проводить
Оценим вычислительную сложность:
комплексных сложений ;
комплексных умножений .
Краткие выводы:
Программная реализация этого примера не столь тяжела. Но при более высоких степенях могут возникнуть проблемы в быстродействии программы, так как с повышением степени количество элементов сигнала значительно возрастает. Отсюда большое количество операций, требуемых для преобразования входного сигнала.
Используемые
числа в данной программе будут
иметь вещественный тип. И будут
и комплексными, так как в процессе
выполнение вычисления используются комплексные
выражения в частности
Входной сигнал будет одномерным массивом с длиной N. Остальные числа, такие как счётчики, будут иметь целый тип.
В процессе вычисления происходит замещение вновь вычисленных данных на место старых.
На входе дан одномерный массив чисел, т.е. вектор Х размера . На выходе необходимо получить массив чисел (спектр) размера 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
Программа может быть запущена только из среды MatLab.
Для работы программы необходимо наличие IBM PC совместимого компьютера с графическим адаптером VGA. Необходимый объем свободной оперативной памяти − не менее 35- 40 Мб. Программа запускается и работает под управлением операционной системы Windows NT, 2000, XP.
Для запуска программы в командной строке MatLab необходимо выбрать текущий каталог программы, набрать имя программы (ptogFFT) и нажать <Enter> , либо открыть программу в отладчике и нажать клавишу <F5> (кнопку ) для начала ее выполнения.
Программа использует 5 дополнительных функций:
4) reads_data() – считывание входных данных: N – количество отсчетов ДПФ, count – количество синусоид, входящих в сигнал, f –частоты синусоид
5) Spectral() – проводит спектральный анализ.
Входными данными программы является заданная пользователем функция (сумма синусоид), для которой строится ее график на промежутке [0,N] и график полученных результатов вычисления БПФ, которые являются выходными данными.
На
вход программы подается длина вектора
N, количество синусоид, частоты синусоид.
Выбирается способ вычисления БПФ: либо
с помощью стандартной функции, либо с
помощью написанной функции. При использовании
написанной функции можно выбрать направление
преобразования: прямое или обратное.
Вид программы после вызова
Программа после использования написанной функции БПФ в прямом исполнении
Программа после применнения написанной функции БПФ в обратном направлении
Программа при использовании стандартной функции БПФ
Успешно был реализован программный объект, реализующий быстрый алгоритм Фурье с прореживанием по времени .Приобретены навыки по Цифровой Обработке Сигналов(ЦОС) и реализация их в программной среде MatLab.
Текст программы 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, % если элемент не обработан,
Информация о работе Быстрое преобразование Фурье с прореживанием по времени