Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 06.09.2011
Сообщений: 17
1

Фильтрация высоких частот используя свертку (конволюцию)

01.12.2012, 00:41. Показов 4774. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер! Есть сигнал, к нему добавляется шум. В спектре шумного сигнала это видно как высокий столбик по середине. И есть фильтр. Нужно сделать конволюцию сигнала и фильтра, и это должно убрать шум. Но в спектре конволюции шум не пропал (высокий столбик по середине стоит). В чем может быть проблема? Правильно ли я фильтр сделал, функция фильтра r = exp(-t^2 / m), m - любое число.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
N = 1024; %число точек
ts = 13/(N-1); %время дискретизации
t = [0:ts:13]; %массив времени
freq = [-N/2+1:N/2]/(N*ts); %массив частот
U0 = 0.5*cos(t) + 0.7*sin(1.3*t); %чистый сигнал
figure(1)
u0 = fft(U0);
u0 = fftshift(u0);
plot(freq(1,460:564),abs(u0(1,460:564))); %спектр чистого сигнала
title('Signal without noise');
U = U0 + 10*rand; %добавляем шум
figure(2)
uf = fft(U);
uf = fftshift(uf);
plot(freq(1,460:564),abs(uf(1,460:564))); %спектр шумного сигнала
title('Noisy signal');
u = -t; %субституция
m = 9; 
r = exp(u.^2 / m); %фильтр
r = r(N:-1:1); %сдвигаем фильтр 
figure(3)
plot(t,r);
title('Filter');
rf = fft(r);
convolution = uf.*rf; %свертка (конволюция)
figure(4);
plot(freq(1,460:564),abs(convolution(1,460:564)));
title('Convolution');
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2012, 00:41
Ответы с готовыми решениями:

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

Фильтры высоких и низких частот C#
Всем доброго дня! Мне нужно создать фильтры высоких и низких частот для просто сигнала и для...

Расчет элементов фильтра высоких частот
Добрые люди подскажите пожалуйста как рассчитать элементы фильтра если нам известен только...

Меняю значение высоких и низких звуковых частот
Здравствуйте! Работаю над одним генератором звуковых частот, вернее над генератором шума. Нашёл...

4
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
01.12.2012, 18:28 2
Дык, ты делаешь фильтрацию в частотной области (перемножаешь спектры), в .этом коде свертки нет! Но для такого варианта не нужно в фильтре делать замену u=-t и отображать вектор из начала в конец r = r(N:-1:1) !
Но не спеши удалять эти строки! Они понадобятся для свертки!
Для реализации свертки служит встроенная ф-ция conv, т.е. тебе нужно было написать вконце:
Matlab M
1
2
3
rf = fft(r);
sout = conv(r,U); % отфильтрованный сигнал во временной области.
Sout = fft(sout); % спектр отфильтрованного сигнала.
но учти такой момент: число m в выражении фильтра определяет частоту среза: m = 1/(2*pi*fср)^2, откуда частота среза:
fср = 1/(2*pi*sqrt(m))
Т.е. для m = 9, fср = 1/(2*pi*3) ~ 0.05,
А принимая во внимание, что частоты твоих полезных сигналов 1/(2*pi)~0.3 и 1.3/(2*pi)~0.2 (т.е. больше fср) то не струдно заметить, что они тоже находятся в диапазоне заграждения фильтра, поэтому и в результатах отношение сигнал/шум не сильно увеличится (т.к. срезается и сигнал и шум, но даление шумы чуть больше).
Как-то так
1
0 / 0 / 0
Регистрация: 06.09.2011
Сообщений: 17
01.12.2012, 22:09  [ТС] 3
Спасибо! Только я хотел уточнить одну вещь - есть же такая теорема что конволюция 2 сигналов в частотной области - это умножение этих сигналов. Тоесть, fft(сигнал1), fft(сигнал2), и оба умножаются, а потом инверсной fft можно результат конволюции вернуть во область времени. Почему тогда у меня умножение не считалось конволюцией?
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
01.12.2012, 22:29 4
Потому что ты фильтр отобразил задом наперед (в 20й строке)
Свернуться, то оно свернулось, но не то, что надо!
Смекаешь?
1
0 / 0 / 0
Регистрация: 06.09.2011
Сообщений: 17
02.12.2012, 22:48  [ТС] 5
Чуть разобрался, есть conv и ccnov - циклическая свертка, она эквивалентна ifft(fft(U).*fft(r)). Но даже встроенная abs(fft(cconv(U,r,1024))) не дает нужный результат - шум не пропадает. При маленьких m не рисуется спектр свертки. Че делать?
0
02.12.2012, 22:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2012, 22:48
Помогаю со студенческими работами здесь

Обработка изображения используя свертку и оператор Собеля
Здравствуйте, у меня есть две матрицы и есть загруженное изображение(неизвестного размера) с...

Как осуществить конволюцию (свёртку) матрицы и вектора?
Всем привет! Столкнулся с операцией конволюции (свёртки) функции двух переменных (в дискретном виде...

Построить гистограммы частот и относительных частот
Построить гистограммы частот и относительных частот распределения(в первом столбце указан частичный...

Фильтрация списка, используя отсечение.
Уважаемый Грымзик!!! Задача уже встречалась, разделить список на положительные и отрицательные....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru