Реализация ФНЧ Баттерворта в matlab
Реализация ФНЧ Баттерворта в matlab
Добрый вечер!
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); % Применяем фильтр к исходному сигналу
Вопрос - верно ли я задаю параметры фильтрации, а конкретно - нормирую частоты среза относительно половины частоты дискретизации?
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
1. Я лично в Матлабе ничего не понимаю, но у меня вопрос общего характера: насколько этично фильтровать сигнал BPSK фильтром Баттерворта, имеющим нелинейную фазовую характеристику?
2. Программу оформлять лучше используя кнопку Code, вид такой будет:
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); % Применяем фильтр к исходному сигналу
Re: Реализация ФНЧ Баттерворта в matlab
Про кнопку понял, дальнейшие посты буду оформлять так.
Вопрос этичности мной пока не рассматривается, стоит типичная задача обработки данных конкретно этим фильтром.
Не все понятно из help по функции butter - в описании http://matlab.exponenta.ru/signalproces ... butter.php
указано что при построении ППФ фильтра порядка n создается фильтр порядка 2*n - стоит ли этому доверять?
И также неясно относительно чего нормировать граничные частоты фильтра - написано что относительно частоты Найквиста - что понимается под этой частотой, в таком случае?
Вопрос этичности мной пока не рассматривается, стоит типичная задача обработки данных конкретно этим фильтром.
Не все понятно из 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).
Прочитал еще раз хэлп на фунцию 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).
Re: Реализация ФНЧ Баттерворта в matlab
Насколько я понимаю, sample rate - частота дискретизации?
У меня задан интервал дискретизации 1/511e+06, соответственно частота дискретизации - обратная к этому величина - 511e+06. А ее половина - 511e+06 / 2?
Где я ошибаюсь?
У меня задан интервал дискретизации 1/511e+06, соответственно частота дискретизации - обратная к этому величина - 511e+06. А ее половина - 511e+06 / 2?
Где я ошибаюсь?
Re: Реализация ФНЧ Баттерворта в matlab
Функция 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
И частота Найквиста = частота дискретизации/2Частота Найквиста есть частота при которой сигнал можно оцифровывать без искажений (с минимальными искажениями)
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Реализация ФНЧ Баттерворта в matlab
И да и нет! Сигнал у которого нет частот выше 1 гц может быть оцифрован с частотой дискретизации 10 гц. Частота найквиста в этом случае 2 гц а Fs/2=5гц. Частота найквиста определяется сигналом а не частотой ацп. Поэтому и используют 2 термина. Nyqist frequency и Nyquist rate.Santik писал(а):И частота Найквиста = частота дискретизации/2Частота Найквиста есть частота при которой сигнал можно оцифровывать без искажений (с минимальными искажениями)
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: Реализация ФНЧ Баттерворта в matlab
Может быть оцифрован с частотой 2 Гц - это понятно.Сигнал у которого нет частот выше 1 гц может быть оцифрован....