Как отфильтровать сигнал?
Добрый вечер!
Не знаю как правильно отфильтровать сигнал. Имеется запись спектра сигнала в полосе 500 КГц. Сам спектр состоит из 820 комплексных отсчетов (каждый отсчет соответсвует 610 Гц). Пытаюсь данную запись отфильтровать с помощью ФНЧ Баттерворта. Но возникла проблема, что фильтр не отрезал верхную часть частот.
Код программы:
ima_faila='D:\3500000\sap-data-aps-00 '
ima_faila=strcat(ima_faila,'.dat')
fileID = fopen(ima_faila,'r');
a=fread(fileID,131200,'float');
for k=1:80
%1 канал
Rekanal1=a((2*k-1):160:end);
Imkanal1=a((2*k):160:end);
z(:,k)=complex(Rekanal1,Imkanal1);
end
%спектры
f=1500000:610:2000000;
%спектр на 1 АЭ
y1=(z(:,1));%спектр
figure(1)
plot(f,abs(y1))
grid on
y1=ifft(y1);
% Фильтрация
order = 5;
fcutlow = 400000;
[b1, a1] = butter(order, fcutlow/(610*812), 'low');
yvih = filter(b1, a1, y1);
yvih=fft(yvih);
figure(7)
plot(f,abs(yvih))
grid on
Лучший ответ
1. Вы постройте ваш спектр, а сверху на нем постройте ваш фильтр и сразу станет ясно, что как и почему отфильтровало или нет.
2. Проще спектр сигнала с АФЧХ фильтра перемножить, чем туда суда фурье гонять. В вашей задаче может и не критично, но . . .
3. Частота среза, написано, 0,4 МГц. А ваш спектр 1,5 - 2 МГц. Т.е. вобще за пределами полосы фильтра.
4. Как известно дискретная математика дает повторяющиеся частотные функции относительно частоты дискретизации. Т.о. ваш фильтр как раз и вырезал очередной повторяющийся кусок. Так что все закономерно.
5. К тому же, 0,4 МГц - это 80% от частоты дискретизации. Т.е 20% полосы на переходный участок АФЧХ и участок с подавлением. Сомнительно, что 5й порядок такое осилит. Но тут надо смотреть конкретно какие требования у вас.
6.
Что хотите отрезать?
например так
Ответы
1. Вы постройте ваш спектр, а сверху на нем постройте ваш фильтр и сразу станет ясно, что как и почему отфильтровало или нет.
2. Проще спектр сигнала с АФЧХ фильтра перемножить, чем туда суда фурье гонять. В вашей задаче может и не критично, но . . .
3. Частота среза, написано, 0,4 МГц. А ваш спектр 1,5 - 2 МГц. Т.е. вобще за пределами полосы фильтра.
4. Как известно дискретная математика дает повторяющиеся частотные функции относительно частоты дискретизации. Т.о. ваш фильтр как раз и вырезал очередной повторяющийся кусок. Так что все закономерно.
5. К тому же, 0,4 МГц - это 80% от частоты дискретизации. Т.е 20% полосы на переходный участок АФЧХ и участок с подавлением. Сомнительно, что 5й порядок такое осилит. Но тут надо смотреть конкретно какие требования у вас.
6.
Что хотите отрезать?
например так
Хотелось бы отрезать часть спектра после 1,75 МГц.
Полоса спектра 500 КГц, сооветсвенно сигнал лежит в полосе от 1,5 МГц до 2 МГц. В строчке [b1, a1] = butter(order, fcutlow/(610*812), 'low'); как раз таки формируется фильтр , где частота среза 0.4 МГц, а по сути частота среза должна быть на 1,75 МГц.
Но тогда если изменить код, получается такие же картинки
order = 5;
fcutlow = 1.75e6;
[b1, a1] = butter(order, fcutlow/(2000000), 'low');
Для приведенного фильтра так и есть. См.выше. Картинку заменил.
Вам надо было использовать к примеру filter design toolbox, было бы все нагляднее.
Такая АЧХ фильтра, которая на картинке нужна как раз таки, как вы ее добились?
Потому что если использовать мой код, как раз таки АЧХ фильтра похоже на рисунок в 4 пункте.
Не успел дописать. См.выше.
К сожалению, все также получается, попробывал сконструировать через filter designer и пропустить сигнал, также в верхние частоты не обрезаются. Фильтр как то зеркально отрезает частоты.
Я попробывал еще ФВЧ использовать, вот такие картинки получились
Быть не может такого )
Сигналы выложите. Вечером гляну.
В этом файле хранятся данные спектра сигнала. Спасибо
Вход/Выход
Спасибо Большое,как понимаю моя проблема была в том, что я не добавил нули в спектре?
Не знаю, вы не рассказывали)))
Если все остальное что вы делали, аналогично, то наверно да.
Остальное все аналогично. Спасибо еще раз за помощь!