реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как создать фильтр в матлабе?
Stefan1
сообщение Nov 27 2012, 11:41
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187



Доброго времени суток!
Подскажите код в матлабе для полосового фильтра с полосой пропускания 0.99 - 1.01 ГГц. Сигнал синусоидальный амплитудно модулированный несколькими частотами (низкие частоты+высшие гармоники). Несущая частота сигнала - 1 ГГц.

Сообщение отредактировал Stefan1 - Nov 28 2012, 06:41
Go to the top of the page
 
+Quote Post
Ixt
сообщение Nov 27 2012, 15:12
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата(Stefan1 @ Nov 27 2012, 15:41) *
Доброго времени суток!
Подскажите код в матлабе для полосового фильтра с полосой пропускания 0.99 - 1.01 ГГц. Сигнал амплитудно модулированный несколькими частотами (низкие частоты+высшие гармоники). Несущая частота сигнала - 1 ГГц.

Воспользуйся инструментом fdatool. Так, имхо, проще.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 28 2012, 06:25
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187



Цитата(Ixt @ Nov 27 2012, 18:12) *
Воспользуйся инструментом fdatool. Так, имхо, проще.

А как теперь этот фильтр связать с сигналом?
Получился такой код:

function Hd = filter
Fs = 200; % Sampling Frequency
Fstop1 = 1.25; % First Stopband Frequency
Fpass1 = 1.35; % First Passband Frequency
Fpass2 = 1.39; % Second Passband Frequency
Fstop2 = 1.45; % Second Stopband Frequency
Astop1 = 60; % First Stopband Attenuation (dB)
Apass = 1; % Passband Ripple (dB)
Astop2 = 80; % Second Stopband Attenuation (dB)
match = 'both'; % Band to match exactly
h = fdesign.bandpass(Fstop1, Fpass1, Fpass2, Fstop2, Astop1, Apass, ... Astop2, Fs);
Hd = design(h, 'ellip', 'MatchExactly', match);



Сообщение отредактировал Stefan1 - Nov 28 2012, 06:34
Go to the top of the page
 
+Quote Post
Ixt
сообщение Nov 28 2012, 08:34
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата(Stefan1 @ Nov 28 2012, 10:25) *
А как теперь этот фильтр связать с сигналом?
Получился такой код:

У функции должен быть параметр. Жми на соседний пункт меню.
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 28 2012, 08:46
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187



Цитата(Ixt @ Nov 28 2012, 11:34) *
У функции должен быть параметр. Жми на соседний пункт меню.

Не понял на какой соседний пункт жать, можно чуть подробнее? У меня функция для сигнала получается в ходе решения уравнений, мне надо этот фильтр наложить на сигнал в коде матлаба.

Сообщение отредактировал Stefan1 - Nov 28 2012, 08:47
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 28 2012, 10:33
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Помещаете рассчитанные коэффициенты КИХ-фильтра в массив Num, после чего вводите:
y=filter(Num,1,x), где y - выходной сигнал, x - входной сигнал. Если фильтр - БИХ, вместо единицы пишете коэффициенты а

ЗЫ. А аппаратно-то чем 1 ГГц фильтровать собрались?
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 28 2012, 11:33
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187



Цитата(V_G @ Nov 28 2012, 13:33) *
Помещаете рассчитанные коэффициенты КИХ-фильтра в массив Num, после чего вводите:
y=filter(Num,1,x), где y - выходной сигнал, x - входной сигнал. Если фильтр - БИХ, вместо единицы пишете коэффициенты а


Что-то матлаб ругается, пишет:
"Dimension argument must be a positive integer scalar in the range 1 to 2^31" в этой записи: y=filter(Hd,1,x)

Коэффициенты Num таким образом считаются?:

[N,Wn,BETA,TYPE] = kaiserord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1 0], [Dstop1 Dpass Dstop2]);
b = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag);
Hd = dfilt.dffir( В );

y=filter(Hd,1,x)
plot(t2,yidi,'r')

Цитата(V_G @ Nov 28 2012, 13:33) *
ЗЫ. А аппаратно-то чем 1 ГГц фильтровать собрались?

Мне это вообще нужно для выделения первой гармоники из спектра сигнала, т.к. простыми методами - не получается из-за сложности сигнала. Хочу посчитать мощность усилителя по первой гармонике.

Сообщение отредактировал Stefan1 - Nov 28 2012, 11:49
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 28 2012, 11:56
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(Stefan1 @ Nov 28 2012, 21:33) *
y=filter(Hd,1,x)


y=filter(b,1,x) , если массив коэффициентов - b
Go to the top of the page
 
+Quote Post
Stefan1
сообщение Nov 28 2012, 13:07
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 414
Регистрация: 7-04-11
Из: Москва
Пользователь №: 64 187



Цитата(V_G @ Nov 28 2012, 14:56) *
y=filter(b,1,x) , если массив коэффициентов - b

Благодарю за помощь!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016