• Регистрация
Grisha2018
Grisha2018 0.00
н/д

Как отфильтровать сигнал?

07.10.2020

Добрый вечер!

Не знаю как правильно отфильтровать сигнал. Имеется запись спектра сигнала в полосе 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

Теги

      07.10.2020

      Лучший ответ

      • aBoomest+942.89
        7.10.2020 12:00

        1. Вы постройте ваш спектр, а сверху на нем постройте ваш фильтр и сразу станет ясно, что как и почему отфильтровало или нет.
        2. Проще спектр сигнала с АФЧХ фильтра перемножить, чем туда суда фурье гонять. В вашей задаче может и не критично, но . . .
        3. Частота среза, написано, 0,4 МГц. А ваш спектр 1,5 - 2 МГц. Т.е. вобще за пределами полосы фильтра.
        4. Как известно дискретная математика дает повторяющиеся частотные функции относительно частоты дискретизации. Т.о. ваш фильтр как раз и вырезал очередной повторяющийся кусок. Так что все закономерно.

        5. К тому же, 0,4 МГц - это 80% от частоты дискретизации. Т.е 20% полосы на  переходный участок АФЧХ и участок с подавлением. Сомнительно, что 5й порядок такое осилит. Но тут надо смотреть конкретно какие требования у вас.
        6.

        фильтр не отрезал верхную часть частот

        Что хотите отрезать? 

        например так

      Ответы

      • aBoomest
        aBoomest+942.89
        7.10.2020 15:21

        1. Вы постройте ваш спектр, а сверху на нем постройте ваш фильтр и сразу станет ясно, что как и почему отфильтровало или нет.
        2. Проще спектр сигнала с АФЧХ фильтра перемножить, чем туда суда фурье гонять. В вашей задаче может и не критично, но . . .
        3. Частота среза, написано, 0,4 МГц. А ваш спектр 1,5 - 2 МГц. Т.е. вобще за пределами полосы фильтра.
        4. Как известно дискретная математика дает повторяющиеся частотные функции относительно частоты дискретизации. Т.о. ваш фильтр как раз и вырезал очередной повторяющийся кусок. Так что все закономерно.

        5. К тому же, 0,4 МГц - это 80% от частоты дискретизации. Т.е 20% полосы на  переходный участок АФЧХ и участок с подавлением. Сомнительно, что 5й порядок такое осилит. Но тут надо смотреть конкретно какие требования у вас.
        6.

        фильтр не отрезал верхную часть частот

        Что хотите отрезать? 

        например так

        • Grisha2018
          Grisha20180.00
          8.10.2020 06:29

          Хотелось бы отрезать часть спектра после 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');

          • aBoomest
            aBoomest+942.89
            8.10.2020 06:41

            Для приведенного фильтра так и есть. См.выше. Картинку заменил.

            order = 5;
            Fs = 4e6;
            fchF1 = (0:10e3:Fs/2);
            Srez = 1.75e6/(Fs/2);
            [b1, a1] = butter(order, Srez, 'low');
            [fchH1, fchF1] = freqz(b1,a1,fchF1,Fs);

            Вам надо было использовать к примеру filter design toolbox, было бы все нагляднее.

            • Grisha2018
              Grisha20180.00
              8.10.2020 06:44

              Такая АЧХ фильтра, которая на картинке нужна как раз таки, как вы ее добились?

              Потому что если использовать мой код, как раз таки АЧХ фильтра похоже на рисунок в 4 пункте.

              • aBoomest
                aBoomest+942.89
                8.10.2020 06:55

                Не успел дописать. См.выше.

                • Grisha2018
                  Grisha20180.00
                  8.10.2020 07:18

                  К сожалению, все также получается, попробывал сконструировать через filter designer и пропустить сигнал, также в верхние частоты не обрезаются. Фильтр как то зеркально отрезает частоты.
                  Я попробывал еще ФВЧ использовать, вот такие картинки получились

                  • aBoomest
                    aBoomest+942.89
                    8.10.2020 07:40

                    Быть не может такого )

                    Сигналы выложите. Вечером гляну.

                    • Grisha2018
                      Grisha20180.00
                      8.10.2020 07:47

                      В этом файле хранятся данные спектра сигнала. Спасибо 

                      • aBoomest
                        aBoomest+942.89
                        8.10.2020 12:39

                        Вход/Выход

                        • Grisha2018
                          Grisha20180.00
                          8.10.2020 12:49

                          Спасибо Большое,как понимаю моя проблема была в том, что я не добавил нули в спектре?

                          • aBoomest
                            aBoomest+942.89
                            8.10.2020 14:32

                            Не знаю, вы не рассказывали)))
                            Если все остальное что вы делали, аналогично, то наверно да.

                            • Grisha2018
                              Grisha20180.00
                              8.10.2020 14:34

                              Остальное все аналогично. Спасибо еще раз за помощь!