Автор: Пользователь скрыл имя, 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
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
Текст функции bin_invers
function b = bin_invers(a,n),
%-----------------------------
% Функция вычисления двоично-
%-----------------------------
% Параметры:
% a нормальное число
% n n-чечное преобразование
% Результаты:
% b инверсное число
%-----------------------------
b = 0; % занимаем память под результат
N = log2(n); % разрядность сетки
for i = 1:N, % по количеству разрядов
b = b*2 + a - 2*fix(a/2); % добавляем к b остаток от a и умножаем на 2
a = fix(a/2); % сдвигаем a на один разряд вправо
end;
Текст функции W
function y = W(N,k,dirFFT),
%-----------------------------
% Функция вычисления
%-----------------------------
% Параметры:
% N знаменатель в зависимости от "бабочки"
% k степень множителя
% dirFFT направление преобразования
% Результаты:
% y поворачивающий множитель при заданных условиях
%-----------------------------
if dirFFT==1
y = exp (complex(0,1)*2*pi*k/N); % обратное преобразование
else
y = exp (-complex(0,1)*2*pi*k/N); % прямое преобразование
end
Текст функции Reads_Data
function reads_data(handles)
% Функция для считывания значений строковых переменных
global N count f % задание глобальных переменных
N=str2double(get(handles.
count=str2double(get(handles.
f=zeros(1,count);
str=get(handles.edit3,'String'
j=1; k=1;
for i=1:length(str)
if str(i)~=' '
s(j)=str(i);
j=j+1;
else
f(k)=str2double(s);
k=k+1;
s='';
j=1;
end;
end;
f(k)=str2double(s);
Текст функции Spectral
function Spectral(handles)
%-----------------------------
% главный модуль программы
%-----------------------------
global N count f % задание глобальных переменных
time = 0:N - 1; % отсчеты времени
x = zeros(1,N);
for i = 1:count
x = x + sin(2*pi*f(i)*time/N); % задание функции
end;
% вывод исходной функции
axes(handles.axes1);
plot(time,x);
grid on;
% проверка переключателя способа
if (get(handles.radiobutton1,'
% проверка переключателя направления
if (get(handles.radiobutton4,'
dirFFT = 1; % обратное напрвление
axes(handles.axes1);
x = MyFFT(x,N,0);
plot(abs(x),'color', 'g');
grid on;
else
dirFFT = 0; % прямое направление
end;
axes(handles.axes2);
x = MyFFT(x,N,dirFFT); % вычисляем БПФ
if dirFFT == 1
plot(time,x,'color','b');
grid on; % сетка
else
plot(abs(x),'color', 'g');
grid on; % сетка
end;
else
axes(handles.axes2);
x = fft(x); % вычисляем БПФ по определению
plot(abs(x),'color', 'r');
grid on; % сетка
end;
Информация о работе Быстрое преобразование Фурье с прореживанием по времени