Реализация ФНЧ Баттерворта в matlab

Все что касается фильтрации
Terrore
Сообщения: 4
Зарегистрирован: 14 сен 2015, 23:30

Реализация ФНЧ Баттерворта в matlab

Сообщение Terrore »

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

1)Исходные данные:
Сигнал - массив из 50001 значений
Частота сигнала: (2*pi*40*511000)
Интервал дискретизации: 1/511e+06

Фильтр - ППФ фильтр Баттерворта 5 порядка,
частота среза:
(2*pi*40*511000-2*pi*0.25e+06)
(2*pi*40*511000+2*pi*0.25e+06)

2) Задача:
Сконструировать фильтр и обработать им сигнал

Мой скрипт в matlab:
clear; % Очистка памяти и переменных перед началом работы
Signal = load('BPSK_50chips.txt'); % Считываем массив исходных данных из файла
format long % Задаем формат преставления чисел в полном виде (15 знаков)

order = 5; % Задаем порядок фильтра
W1 = (2 * pi * 40 * 511000 - 2 * pi * 0.25e+06) / (511e+06 / 2); % Задаем граничные частоты фильтра
W2 = (2 * pi * 40 * 511000 + 2 * pi * 0.25e+06) / (511e+06 / 2); % Задаем граничные частоты фильтра

[b,a] = butter(order, [W1 W2]); % Конструируем фильтр Баттерворта с указанными выше параметрами. По умолчанию - ППФ
MF1 = filter(b,a,Signal); % Применяем фильтр к исходному сигналу

Вопрос - верно ли я задаю параметры фильтрации, а конкретно - нормирую частоты среза относительно половины частоты дискретизации?

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Santik »

1. Я лично в Матлабе ничего не понимаю, но у меня вопрос общего характера: насколько этично фильтровать сигнал BPSK фильтром Баттерворта, имеющим нелинейную фазовую характеристику?
2. Программу оформлять лучше используя кнопку Code, вид такой будет:

Код: Выделить всё

clear; % Очистка памяти и переменных перед началом работы
Signal = load('BPSK_50chips.txt'); % Считываем массив исходных данных из файла
format long % Задаем формат преставления чисел в полном виде (15 знаков)
order = 5; % Задаем порядок фильтра
W1 = (2 * pi * 40 * 511000 - 2 * pi * 0.25e+06) / (511e+06 / 2); % Задаем граничные частоты фильтра
W2 = (2 * pi * 40 * 511000 + 2 * pi * 0.25e+06) / (511e+06 / 2); % Задаем граничные частоты фильтра
[b,a] = butter(order, [W1 W2]); % Конструируем фильтр Баттерворта с указанными выше параметрами. По умолчанию - ППФ
MF1 = filter(b,a,Signal); % Применяем фильтр к исходному сигналу

Terrore
Сообщения: 4
Зарегистрирован: 14 сен 2015, 23:30

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Terrore »

Про кнопку понял, дальнейшие посты буду оформлять так.

Вопрос этичности мной пока не рассматривается, стоит типичная задача обработки данных конкретно этим фильтром.

Не все понятно из help по функции butter - в описании http://matlab.exponenta.ru/signalproces ... butter.php
указано что при построении ППФ фильтра порядка n создается фильтр порядка 2*n - стоит ли этому доверять?

И также неясно относительно чего нормировать граничные частоты фильтра - написано что относительно частоты Найквиста - что понимается под этой частотой, в таком случае?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Бахурин Сергей »

при построении полосового фильтра количество к-тов удваивается. т.е. если задали фильтр 5 порядка то получите по факту по 11 коэффициентов b и a.

Прочитал еще раз хэлп на фунцию butter:
The cutoff frequency Wn must be 0.0 < Wn < 1.0, with 1.0 corresponding to half the sample rate.

Где вы взяли информацию про частоту Найквиста?

В вашем случае частоты необходимо нормировать к 1/(2 * 511e+06).

Terrore
Сообщения: 4
Зарегистрирован: 14 сен 2015, 23:30

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Terrore »

Насколько я понимаю, sample rate - частота дискретизации?
У меня задан интервал дискретизации 1/511e+06, соответственно частота дискретизации - обратная к этому величина - 511e+06. А ее половина - 511e+06 / 2?
Где я ошибаюсь?

Terrore
Сообщения: 4
Зарегистрирован: 14 сен 2015, 23:30

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Terrore »

Функция butter использует значение частоты среза Wn, нормированное к частоте Найквиста ( радиан на отсчет). Таким образом, нормированное значение частоты среза Wn должно лежать в пределах от 0 до 1, при этом 1 соответствует частоте Найквиста (то есть половине частоты дискретизации).

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Бахурин Сергей »

Частота Найквиста и частота дискретизация это разные вещи. Частота Найквиста есть частота при которой сигнал можно оцифровывать без искажений (с минимальными искажениями). Частота дискретизации собственно и есть частота с которой был оцифрован сигнал. Например сигнал для которого частота Найквиста равна 1 Гц может быть оцифрован с частотой дискретизации 1 Гц, а может быть оцифрован с частотой 10 Гц или 0.1 Гц. Нормировка частоты для построения фильтра ведется к частоте дискретизации а не к частоте Найквиста. Не знаю где вы это прочитали про нормировку к Найквисту. В хелпе матлаба однозначно сказано нормировка к половине частоты дискретизации ( half the sample rate)

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Santik »

Частота Найквиста есть частота при которой сигнал можно оцифровывать без искажений (с минимальными искажениями)
И частота Найквиста = частота дискретизации/2

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Бахурин Сергей »

Santik писал(а):
Частота Найквиста есть частота при которой сигнал можно оцифровывать без искажений (с минимальными искажениями)
И частота Найквиста = частота дискретизации/2
И да и нет! Сигнал у которого нет частот выше 1 гц может быть оцифрован с частотой дискретизации 10 гц. Частота найквиста в этом случае 2 гц а Fs/2=5гц. Частота найквиста определяется сигналом а не частотой ацп. Поэтому и используют 2 термина. Nyqist frequency и Nyquist rate.

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Реализация ФНЧ Баттерворта в matlab

Сообщение Santik »

Сигнал у которого нет частот выше 1 гц может быть оцифрован....
Может быть оцифрован с частотой 2 Гц - это понятно.

Ответить