Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Другие / lab1.doc
Скачиваний:
40
Добавлен:
17.04.2013
Размер:
376.83 Кб
Скачать

I. Анализ спектра финитного сигнала.

Для анализа будем использовать два финитных сигнала, заданных следующими соотношениями.

Сигнал заданный четной функцией.

Сигнал заданный нечетной функцией.

1. Посмотрите свой вариант задания. В каждом варианте задана четность функции, частота f0и длительность импульсаa.

2. Возьмите свой сигнал s( t ), подставьте в прямое преобразование Фурье (1), проинтегрируйте и получите спектр Вашего сигналаS( f ) в аналитической форме.

3. Войдите в среду MATLAB, и напишите программу, которая строит графики сигнала, действительной и мнимой частей спектра Вашего варианта по заданным аналитическим формулам.

Замечание.Прежде чем писать программу, изучите предлагаемый пример для прямоугольного импульса.

Первоена что надо обратить внимание, это как задать финитный сигнал. Для получения финитного сигнала можно использовать библиотечную функциюrectpuls(). Например сигнал с четной функцией, длительностьюaнадо задать так

Второе. Найдите место в программе, где вычисляется спектр сигнала, и сделайте замену на полученную Вами аналитическую формулу спектра.

Третье. Успешная работа программы зависит от правильного выбора параметров программы. Это следующие параметры.

T- временной интервал для вывода графика

dt- шаг вывода график по оси времени

fb- частотный интервал вывода графика

df- шаг вывода графика по оси частот

В идеальном варианте студент должен сам подобрать эти параметры. Для первого приближения можно рекомендовать следующие правила выбора параметров

4. Запустите программу с параметрами данного варианта. Покажите результат преподавателю. В конспекте зарисовать графики. Объяснить характер поведения спектра. Обратите внимание на четность или нечетности сигнала.

5. Напишите программу в среде MATLAB, которая находит спектр вашего сигнала с помощью дискретного преобразования Фурье. Программа должна строить графики сигнала, действительной и мнимой частей спектра Вашего варианта, а также АЧХ сигнала.

Замечание.Прежде чем писать программу, изучите предлагаемый пример для прямоугольного импульса. Обратите внимание на выбор параметров программы. Некоторые из этих параметров принимают дополнительный физический смысл.

T- интервал интегрирования в преобразовании Фурье.

dt- шаг дискретизации.

Рекомендации по выбору значений параметров для заданного варианта указаны выше.

6. Запустите программу с параметрами данного варианта. Покажите результат преподавателю. В конспекте зарисовать графики. Найти частоту Найквиста (используйте теорию ДПФ ). Оцените точность нахождения спектра, сравнивая с результатом, полученным по аналитическим формулам. Каким способом можно увеличить точность расчетов.

Ниже приведены коды программ, данных в качестве примеров.

В качестве примераприводится код программы для прямоугольного импульса.

----------------------------------------------------------------------------------------------------

%прямоугольный импульс - аналитические формулы спектра

a = 2; %длительность импульса (с)

T = 20; %интервал временной вывода графика (c)

dt = 0.1; %шаг вывода график по оси времени (с)

t = -T/2:dt:T/2; %дискретные моменты времени (c)

s = rectpuls(t/a); %отсчеты сигнала

figure;

plot(t, s);

axis([-T/2 T/2 0 1.5]);

xlabel('t (c)');

title('Signal s(t)');

grid on;

fb = 2; %интервал частотный вывода графика (Hz)

df = 0.01; %шаг вывода графика по частоте (Hz)

f = -fb:df:fb; %дискретные значания по частоте (Hz)

S = sin(pi*a*f)./f/pi;

Ampl = abs(S); %вычисляем АЧХ

Re = real(S); %вычисляем действительную часть спектра

Im = imag(S); %вычисляем мнимую часть спектра

MaxSpectr = max(Ampl); %максимум для графика спектра

figure;

plot(f, Ampl);

axis([-fb fb -1.2*MaxSpectr 1.2*MaxSpectr]);

xlabel('f (Hz)');

title('Spectrum A(f)');

grid on;

figure;

plot(f, Re);

axis([-fb fb -1.2*MaxSpectr 1.2*MaxSpectr]);

xlabel('f (Hz)');

title('Spectrum Re(S(f))');

grid on;

figure;

plot(f, Im);

axis([-fb fb -1.2*MaxSpectr 1.2*MaxSpectr]);

xlabel('f (Hz)');

title('Spectrum Im(S(f))');

grid on;

--------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------

%прямоугольный импульс - ДПФ

a = 2; %длительность импульса (с)

fb = 4; %интервал частот (Hz) на графике

T = 20; %интервал интегрирования в Фурье преобразовании (c)

dt = 0.1; %шаг дискретизации (с)

t= -T/2+dt:dt:T/2; %дискретные моменты времени (c)

N1 =length(t); %проверка, чтобы число членов ряда было четным

if mod(N1,2) == 1

N1 = N1 + 1;

T = dt*N1;

t = -T/2+dt:dt:T/2;

end

s = rectpuls(t/a); %отсчеты сигнала

figure;

plot(t, s);

axis([-T/2 T/2 0 1.5]);

xlabel('t (c)');

title('Signal s(t)');

grid on;

x=s; %сигнал заносим в последовательность для ДПФ

N = length(x); %число членов в преобразовании Фурье

X=fft(x); %прямое дискретное преобразование Фурье

k=1:N;

ex=exp(i*2*pi*(k-1)*(N/2-1)/N); %вычисление экспоненты

Sp = dt*ex.*X; %вычисление спектра не упорядоченного

S1=Sp(N/2+2:N);

S2=Sp(1:N/2+1);

S = [S1 S2]; %спектр упорядоченный

Ampl = abs(S); %вычисляем АЧХ

Re = real(S); %вычисляем действительную часть спектра

Im = imag(S); %вычисляем мнимую часть спектра

df=1/T; %интервал дискретизации частот

f=(-N/2+1:N/2)*df; %создаем дискретные частоты (для графика)

MaxSpectr = max(Ampl); %максимум для графика спектра

figure;

plot(f, Ampl);

axis([-fb fb -1.2*MaxSpectr 1.2*MaxSpectr]);

xlabel('f (Hz)');

title('Spectrum A(f)');

grid on;

figure;

plot(f, Re);

axis([-fb fb -1.2*MaxSpectr 1.2*MaxSpectr]);

xlabel('f (Hz)');

title('Spectrum Re(S(f))');

grid on;

figure;

plot(f, Im);

axis([-fb fb -1.2*MaxSpectr 1.2*MaxSpectr]);

xlabel('f (Hz)');

title('Spectrum Im(S(f))');

grid on;

----------------------------------------------------------------------------------------------