Спектрален анализ на дискретизиран сигнал I. Цел на упражнението



Дата13.09.2016
Размер58.77 Kb.
#9129
СПЕКТРАЛЕН АНАЛИЗ

НА ДИСКРЕТИЗИРАН СИГНАЛ
I. Цел на упражнението

За­по­з­на­ва­не с пра­к­ти­че­с­ко­то при­ло­же­ние на Фуриеровия анализ за об­ра­бо­т­ка на ди­с­к­ре­ти­зи­ран ана­ло­гов си­г­нал. Усвояване и прилагане на специализираните функции в MATLAB: fft, ifft, abs, angle, прозоречните функции HAMMING, HANN, BARTLETT, HANNING. Конфигуриране на звуковата карта на персонален компютър чрез MATLAB за снемане на сигнал.



II. Опитна постановка

Персонален компютър (със звукова карта),микрофон, MATLAB.


III. Задачи за изпълнение

1. Вклю­че­те ­ком­пю­тъ­ра, стартирайте MATLAB.

2. Създайте програма, която да генерира синусоидален сигнал с параметри:

f = 500 Hz, A = 1V, Fs = 5000 Hz, N = 128.

f – честота на сигнала, А – амплитуда на сигнала, Fs – честота на дискретизация, N – брой точки на сигнала.

3. По­лу­че­те АЧХ и ФЧХ на създадения сигнал. Анализирайте ги.

%======================= примерна програма към т.2 =====================

clear; % нулиране на Workspase

f=500; %честота на генерирания сигнал в Hz

N=128; %брой на точките от сигнала

Fs=5000; %честота на дискретизация в Hz

Ts=1./Fs; %период на честотата на дискретизация

t=(0:Ts:(N-1)*Ts); %моментите на дискретизация

x=sin(2*pi*f*t+pi/6); %стойностите на функцията

subplot(311), stem(x,'.'), grid on, axis([0 N-1 -2 2])

xlabel('n'), ylabel('x(n)'), title('time discrete signal');

X=fft(x,N);

Xf=abs(X)./N;

fi=angle(X);

fa=(0:Fs/N:(N-1)*Fs/N);

subplot(312), stem(fa,Xf,'.'), grid on, axis([0 Fs 0 N+2])

xlabel('f,Hz'), ylabel('X(f)'), title('DTF spectrum');

subplot(313), stem(fa,fi,'.'), grid on, axis([0 Fs -5 5])

xlabel('f,Hz'), ylabel('fi(f)'), title('angle');

Функцията за бързо преобразувание на Фурие има вида:

fft(x,N) ,

където x – векторът със стойностите на функцията;

N – броя на точките.


3. Създайте сигнал от вида: x= А1*sin(2*pi*f1*t+ψ1)+ А2*sin(2*pi*f2*t+ψ1);

където: f1, f2 – честоти на синусоидалните сигнали, А1, А2 – максимални амплитуди,

ψ1, ψ2 – начални фази. N и Fs са като в т.2

4. Използвайте теглови прозорци преди преобразуването на Фурие -

HAMMING, HANN, BARTLETT, HANNING и др. Форматът на функциите има вида:

W=HAMMING(N) – където N е броя на точките.

%======================== примерна програма към т.3 и т.4 ====================

clear;


f=500;

N=128;


Fs=5000;

Ts=1./Fs;

t=(0:Ts:(N-1)*Ts);

x=sin(2*pi*f*t+pi/6)+ 0.5*sin(2*pi*(f+100)*t+pi/4);

subplot(311), stem(x,'.'), grid on, axis([0 N-1 -2 2])

xlabel('n'), ylabel('x(n)'), title('time discrete signal');

W=HAMMING(N);

x=x.*W';


subplot(312), stem(x,'.'), grid on, axis([0 N-1 -2 2])

xlabel('n'), ylabel('x(n)*Window'), title('time discrete signal * Window');

pause;

X=fft(x,N);



Xf=abs(X)./N;

fi=angle(X);

fa=(0:Fs/N:(N-1)*Fs/N);

subplot(313), stem(fa,Xf,'.'), grid on, axis([0 Fs 0 N+2])

xlabel('f,Hz'), ylabel('X(f)'), title('DTF spectrum');

5. Конфигурирайте звуковата карта на компютъра за възприемане и подаване на сигнал към MATLAB. Използвайте следните опции: продължителност на възприемане = 1s, честота на дискретизация = 44100 Hz, Тип на тригериращото въздействие – мигновенно ('Immediate').

6. Запишете гласа си чрез микрофон.

%===================примерна програма към т.5 и т.6 ====================

d = 1;

OB = analoginput('winsound',0);

addchannel(OB, 1);

set(OB, 'SampleRate', 44100);

rate = get(OB, 'SampleRate')

set(OB, 'SampleRate', rate);

set(OB, 'SamplesPerTrigger', rate*d);

set(OB, 'TriggerType', 'Immediate');

start(OB);

wait(OB,1+d);

A = getdata(OB);

delete(OB);

clear OB;

plot(A);
6. Запишете събраната информация във файл чрез save().

7. Направете спектрален анализ на гласа си. Изведете АЧХ, ФЧХ.

8. Направете обратно Фурие преобразувание на гласа си и сравнете получената графика с оригинала.

%===================примерна програма към т.7 и т.8 ====================

Fs = 44100;

Ts = 1./Fs;

N = size(F)

t = 0:Ts:(N-1)*Ts;

N = N(1);

fa=0:Fs/N:(N-1)*(Fs/N)

DFT = fft(F,size(F));

A4X = abs(DFT);

A4X = A4X./N; %нормиране

F4X = angle(DFT);

subplot(4, 1, 1)

stem(fa, A4X, '.');

title('AЧХ');

subplot(4, 1, 2)

plot(fa, F4X);

title('ФЧХ');

subplot(4, 1, 3)

plot(t,ifft(DFT));

title('Обратно Фурие преобразувание');

subplot(4, 1, 4)

plot(t , F);

title('първообраз');


IV. Информационна част

1. Преобразуване на Фурие.

На­ми­ра­не­то на спе­к­тъ­ра на за­да­ден вхо­ден си­г­нал се да­ва от фор­му­ла­та:




ка­то фун­к­ци­я­та е ком­п­ле­к­с­на. При­е­то е обо­з­на­че­ни­е­то на то­ва дей­с­твие да ста­ва по сле­д­ния на­чин:

Модулът се нарича амплитуден спектър:



,
а аргументът - фазов спектър:

.
където:

и


са съответно реалната и имагинерната част на спектъра.

Обратното преобразуване на Фурие се дава от израза:



.

Функциите и описват в различна форма един и същ процес. Ако разглеждаме , то състоянието на системата се представя в равнината амплитуда-време. Ако разглеждаме , то състоянието на системата се разглежда в равнината амплитуда-честота. Не е задължително дименсията на аргумента да е обезателно за измерване на време. Ако едната функция, например, има за аргумент величина с дименсия метър, то нейният Фурие образ ще има за аргумент величина с дименсия метър-1.

Избрано е преобразуването на Фурие да е разложение като сума от синусоидални и косинусоидални функции, защото тези функции са собствени функции на линейния филтър, т.е. те не изменят формата си при преминаването при него и от тази гледна точка са най-удобни за работа.

Следват Фурие образите на някои функции:

а)  ;

б)  ;

в)  ;

г)  ;

д)  ;

е)  .


2. Дискретно преобразуване на Фурие.

При реално изчисляване на спектъра на сигнал, след дискретизиране на N точки от него, обикновено се търсят N точки от неговия спектър. За дискретизираният сигнал x(kT) спектърът се изчислява по формулата:



Полученият дискретен спектър в следствие на дискретизацията е симетричен спрямо честотата , т.е. .

За дискретното обратно преобразуване на Фурие е справедлива формулата:

,
където е стъпката с която е изчисляван спектъра.

3. Бързо преобразуване на Фурие.

Горните формули са свързани с голяма количество изчисления, чийто брой нараства с квадрата на броя точки N. За ускорено получаване на преобразуването на Фурие са разработени множество бързи алгоритми. Най-популярен сред тях е Бързото Преобразуване на Фурие - алгоритъм, разработен от Кули и Тюки. При него броят на изчисленията нараства приблизително линейно с броя на точките. Известни са също така и алгоритъма на Виноградов. При преобразуването на Уолш спектърът се получава само посредством операции събиране (без умножения) и времето за изчисляване е много по-малко. По аналогичен начин на бързото преобразуване на Фурие са разработени и алгоритми за бързо преобразуване на Уолш.



V. Контролни въпроси

  1. Кои са източниците на грешка при изчисляване на спектъра на дискретизиран сигнал и как биха могли да се намалят те?






Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница