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

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

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

Студворк — интернет-сервис помощи студентам
Добрый вечер! Есть сигнал, к нему добавляется шум. В спектре шумного сигнала это видно как высокий столбик по середине. И есть фильтр. Нужно сделать конволюцию сигнала и фильтра, и это должно убрать шум. Но в спектре конволюции шум не пропал (высокий столбик по середине стоит). В чем может быть проблема? Правильно ли я фильтр сделал, функция фильтра 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2012, 00:41
Ответы с готовыми решениями:

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

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

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

4
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.12.2012, 18:28
Дык, ты делаешь фильтрацию в частотной области (перемножаешь спектры), в .этом коде свертки нет! Но для такого варианта не нужно в фильтре делать замену 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  [ТС]
Спасибо! Только я хотел уточнить одну вещь - есть же такая теорема что конволюция 2 сигналов в частотной области - это умножение этих сигналов. Тоесть, fft(сигнал1), fft(сигнал2), и оба умножаются, а потом инверсной fft можно результат конволюции вернуть во область времени. Почему тогда у меня умножение не считалось конволюцией?
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
01.12.2012, 22:29
Потому что ты фильтр отобразил задом наперед (в 20й строке)
Свернуться, то оно свернулось, но не то, что надо!
Смекаешь?
1
0 / 0 / 0
Регистрация: 06.09.2011
Сообщений: 17
02.12.2012, 22:48  [ТС]
Чуть разобрался, есть conv и ccnov - циклическая свертка, она эквивалентна ifft(fft(U).*fft(r)). Но даже встроенная abs(fft(cconv(U,r,1024))) не дает нужный результат - шум не пропадает. При маленьких m не рисуется спектр свертки. Че делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2012, 22:48
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru