Алгоритм дискретной фильтрации на основе «быстрой свертки»



Санкт-Петербургский государственный политехнический университет

Институт физики, нанотехнологий и телекоммуникаций

Высшая школа прикладной физики

И космических технологий

Лабораторная работа

по дисциплине

«Цифровая обработка сигналов»

 

 

Выполнили

студенты гр.43420/4                           ______________     А. Романюк

 

 

                                                                  ______________ М. Жигулина

 

Проверил                                             ______________    В.А. Варгаузин

 

«___» апреля 2018 г.

 

Санкт-Петербург

2018

 

Часть1:

>>F0=10000

>>dF=480

>>Fp1=F0+(dF/2)

Fp1 =10240

>> Fp2=F0-(dF/2)

Fp2 =9760

>>Rp=1

>>Rs=60

>> q=Fp1/dF

q =21.3333

>> q=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]

>> Fs=(4*F0)./(2*q-1)

Fs = 1.0e+04 *

4.0000 1.3333 0.8000 0.5714 0.4444 0.3636 0.3077 0.2667

0.2353 0.2105 0.1905 0.1739 0.1600 0.1481 0.1379 0.1290 

0.1212 0.1143 0.1081 0.1026 0.0976 0.0930

>> Fs2=F0+(Fs(21)/4)

Fs2 = 1.0244e+04

>>Wp=2*pi*[Fp2 Fp1]

Wp = 1.0e+04 *(6.1324 , 6.4340)

>>Ws=2*pi*[Fs1 Fs2]

Ws = 1.0e+04 *( 6.1299, 6.4364)

>> [n Wn]=ellipord(Wp,Ws,Rp,Rs,'s')

n = 12

Wn = 1.0e+04 *(6.1324 , 6.4340)

>> [b a]=ellip(n,Rp,Rs,Wn,'s')

b = 1.0e+112 *

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 

0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000

1.4234

a =1.0e+115 *

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000

1.4234

Рисунок 1. Результат моделирования для F0 = 10000, Fs = 976Гц, q=21

 

 

 Рисунок 2. Модель дискретной обработки полосового сигнала

ЧАСТЬ 2:

Рисунок 3. Модель спектрального анализа на основе БПФ

Амплитудный спектр кадра сигнала (F1=Fs/4)

F1=20000; Fs=80000; dt=1/Fs; L=4096; n=[0:1:L-1]; y=sin(2*pi*F1*dt*n);

Рисунок 4. Амплитудный спектр

 

Амплитудный спектр кадра сигнала (F2=F1+Fs/2*L)

Рисунок 5. Амплитудный спектр

Часть 3:

I. Алгоритмы вычисления свертки

Свертка финитных дискретных сигналов

Сигнал S1 = 1:20:80;

Сигнал S2 = 1:10:40;

Используем функцию conv.

Результат свертки: y = [ 1 32 293 984 2183 2552 1891]

Входные сигналы и их свертка представлены на рис.6.

Рис.6. Входные сигналы и их свертка 

Модель simulink для вычисления свертки представлена на рис.7.

Рис.7. Модель simulink для вычисления свертки

Результаты, полученные в matlab и simulink совпадают.

Алгоритм вычисления дискретной свертки с использованием ДПФ

Используем те же сигналы, что в п. I.I.

y1=fft(s1);

y2=fft(s2);

f=y1.*y2;

y=ifft(f);

В результате выполнения программы имеем:

y = [2184 2584 2184 984]

Модель simulink для вычисления циклической свертки с использованием ДПФ представлена на рис.8.

 

Рис.8. Модель simulink для вычисления циклической свертки с использованием ДПФ

Результаты, полученные в matlab и simulink, совпадают, но отличаются от результатов, полученных в п. 1.1. Это связано с тем, что не выполняется условие N ≥ Lh+Ls-1, где Lh и Ls– длины сигналов S1 и S2, соответственно.

Для того чтобы циклическая свёртка была идентична линейной свёртке финитных сигналов, должно выполняться условие N ≥ Lh+Ls-1.

Пусть N = 7. Дополним сигналы нулями. В результате имеем:

y = [ 1 32 293 984 2183 2552 1891].

Этот результат совпадает с результатом, который был получен в п.I.I.

Модель simulink для вычисления линейной свертки с использованием ДПФ представлена на рис.9.

 

Рис.9. Модель simulink для вычисления линейной свертки с использованием ДПФ

Алгоритм «быстрой свертки»

Оценим время вычисления линейной свёртки двух финитных сигналов прямым методом функцией conv и методом на основе ДПФ при использовании алгоритма БПФ.

p=rand(1,1000);

s=rand(1,1000);

tic;

conv(p,s);

toc;

>>Elapsed time is 0.000703 seconds.

p=rand(1,1000);

s=rand(1,1000);

tic;

ifft((fft(p,1024).*fft(s,1024)));

toc;

>>Elapsedtimeis 0.000073 seconds.

Т.к. 1024 является степенью двойки, то функция fft использует алгоритм БПФ при вычислении ДПФ.Можно видеть, что свёртка вычисляется быстрее методом на основе ДПФ при использовании алгоритма БПФ, чем прямым методом функцией conv.

 

 

Дискретная фильтрация

Сигнал: s = [1 21 41 61 0 0 0 0];

Импульсная характеристика(коэф. числителя): h = [1 2 3 4 0 0 0 0];

Коэф. знаменателя: a = [1 0 0 0 0 0 0 0];

 

В результате вычисления дискретной свертки финитного сигнала s с импульсной характеристикой h функцией filter имеем:

y = [1 23 86 210 329 347 244 0]

 

Модель дискретной фильтрации приведена на рис.10

Рис.10. Модель дискретной фильтрации 

Результаты, полученные в matlab, совпадают с результатами работы модели simulink.

 

Алгоритм дискретной фильтрации на основе «быстрой свертки»

Сигнал: s = [1 21 41 61 0 0 0 0];

Импульсная характеристика: h = [1 2 3 4 0 0 0 0 ];

y = fftfilt(h,s);

В результате вычисления свертки финитного сигнала s с импульсной характеристикой h функцией fftfilt имеем:

 

y = [1.0000 23.0000 86.0000 210.0000 329.0000 347.0000 244.0000 -0.0000]

Полученный результат совпадает с результатом, полученным в предыдущем пункте.

 

Модель дискретной фильтрации на основе алгоритма сложения с перекрытием приведена на рис.11.

Рис.11. Модель дискретной фильтрации на основе алгоритма сложения с перекрытием

В данной модели размер БПФ равен 8.

При использовании алгоритма перекрытия входной сигнал разбивается на блоки длиной  отсчетов. Каждый блок фильтруется независимо. Длина выходного сигнала равна:  где  — длина импульсной характеристики фильтра. Блоки выходного сигнала объединяются, при этом крайние  отсчетов перекрываются и суммируются.

 

Автокорреляционная функция

Код программы:

s = rand(1,1000);

acf = conv(s,fliplr(s));

figure;

stem(acf);

grid on;

 

АКФ дискретного сигнала представлена на рис. 12. Из графика видно, что АКФ дискретного сигнала симметрична и может быть вычислена как свёртка этого сигнала с сигналом, представляющим собой зеркальное отображение этого же сигнала.

Рис.12. АКФ сигнала

Первые 10 значений АКФ:

 

0.2460 0.5490 0.9103 1.3395 1.3834 1.9604 2.1693 1.9858 2.2905 2.2303   

 

Модель simulink для вычисления АКФ представлена на рис.13.

Рис.13. Модель для вычисления АКФ

Результаты вычислений в matlab и simulink совпадают.


Дата добавления: 2018-08-06; просмотров: 1051; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!