Полосовой фильтр (MatLab)
-
- Сообщения: 64
- Зарегистрирован: 11 сен 2015, 23:37
Полосовой фильтр (MatLab)
Ребят у меня такой вопрос, мне дан гармонический сигнал с частотой 63 МГц, дан полосовой фильтр вот с такими параметрами: полоса пропускания 14 МГц, центральная частота 63 МГц так вот не могу понять как это записать в MatLab. Записать какой сигнал будет на выходе. С Matlab только сейчас начал разбираться. Подскажите, как правильно записать!
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: Полосовой фильтр (MatLab)
Ну для решения такой задачи наверное надо ещё знать частоту дискретизации сигнала и уровень в дБ по которому определяется полоса фильтра.
-
- Сообщения: 64
- Зарегистрирован: 11 сен 2015, 23:37
Re: Полосовой фильтр (MatLab)
Такс, ну допустим я хочу взять полосовой фильтр Баттерворта 5 порядка, так как АЧХ будет иметь небольшую прямоугольность и крутые скаты, то что мне нужно. Но когда я записываю это в матлабе и хочу посмотреть, что будет на выходе при подаче на вход гармонического сигнала я получаю ерунду даже смущает то, что по оси у получается степень (^306). Скажите а зачем нужно знать частоту дискретизации? У меня же аналоговый фильтр? Я извиняюсь конечно, за то , что ерунду несу. Вот код в в матлабе и картинки АЧХ и отфильтрованного сигнала.
- Santik
- Сообщения: 609
- Зарегистрирован: 28 дек 2010, 08:04
- Откуда: Мирный (Якутия)
- Контактная информация:
Re: Полосовой фильтр (MatLab)
АЧХ выглядит правдоподобно.
Мешает мощный пик на второй картинке. Постройте график не Т=0, а с Т=0.03
И вообще надо подумать какой сигнал подавать. cos может быть и не подходит, т.к. считается, что до Т=0 сигнал = 0, а потом сразу 1. Т.е. производная = бесконечности. Поэтому, с учётом задержки, которую даёт фильтр и получается огромный выброс на Т=0.016
Может сигнал sin(2*Pi*63*t) больше подойдет. А вообще надо сигнал на оконную функцию умножать.
Мешает мощный пик на второй картинке. Постройте график не Т=0, а с Т=0.03
И вообще надо подумать какой сигнал подавать. cos может быть и не подходит, т.к. считается, что до Т=0 сигнал = 0, а потом сразу 1. Т.е. производная = бесконечности. Поэтому, с учётом задержки, которую даёт фильтр и получается огромный выброс на Т=0.016
Может сигнал sin(2*Pi*63*t) больше подойдет. А вообще надо сигнал на оконную функцию умножать.
-
- Сообщения: 64
- Зарегистрирован: 11 сен 2015, 23:37
Re: Полосовой фильтр (MatLab)
Все записал как надо, получил выходной сигнал который нужен, только теперь нужно этот сигнал оцифровать с частотой дискретизации 84 МГц и не пойму как правильно это сделать,записать в матлабе? У меня сигнал на выходе записался в массив в столбец это правильно? Необходимо ли перевернуть этот массив в строку?
-
- Сообщения: 64
- Зарегистрирован: 11 сен 2015, 23:37
Re: Полосовой фильтр (MatLab)
При записи аналогового фильтра я там брал частоту дискретизации 840 МГц, получается у меня так что в сигнале при двух импульсах 16801 значений, а дальше мне нужно оцифровать мой сигнал с частотой уже 84 МГц, это у меня по заданию, так вот получается мой интервал времени T=0:dt:T_пачки*10 (нужно умножить на 10), это правильно?
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Полосовой фильтр (MatLab)
Вам надо разобраться с тем какой сигнал и фильтр вы моделируете. Если вы моделируете фильтрацию цифровым фильтром то сигнал должен быть цифровой. Если аналоговым фильтром то нельзя использовать функцию filter как вы ее используете.
В матлабе все работает с оцифорванным сигналом.
PS зачем вставлять код как картинку? Вставляйте как код чтобы можно было скопировать и попробовать.
В матлабе все работает с оцифорванным сигналом.
PS зачем вставлять код как картинку? Вставляйте как код чтобы можно было скопировать и попробовать.
-
- Сообщения: 64
- Зарегистрирован: 11 сен 2015, 23:37
Re: Полосовой фильтр (MatLab)
У меня есть структурная схема, сигнал сперва идет на аналоговый полосовой фильтр с центральной частотой 63 МГц и полоса пропускания 14 МГц, а потом уже на АЦП (с частотой дискретизации 84 МГц). Я получил фильтр Баттерворта он мне подходит, но проблема в том, чтобы получить сигнал на выходе аналогового фильтра мне нужно брать частоту дискретизации 840 МГц, так как в этом случае шаг по времени будет маленький, и я смогу получить сигнал на выходе такой в принципе, что и на входе только задержкой, если я возьму 84 МГц, он мне на выходе строит сигнал с уменьшенной амплитудой и сигнал становится не похож на синусойду. Если я беру 840 МГц, строю график получаю на выходе сигнал, потом его оцифроваю с частотой дискретизации 84 МГц (и получаю так, что в одном периоде у меня уже 8400 отсчетов, а должно быть 840 по расчетам(это сказалось на спектре сигнала)) он мне должен спектр сигнала показать на частоте 21 МГц и 63 МГц, а он мне строит ерунду, и я вот в этом запутался!
Код: Выделить всё
% Исходные данные
U_m=input('Амплитуда сигнала (В): '); % Амплитуда сигнала
F_prom=63; % Промежуточная частота (МГц)
T_rep=10; % Период повторения импульсов (мкс)
F_rep=1/T_rep; % Частота повторения (МГц)
tau_imp=1; % Длительность импульса (мкс)
N_imp=input('Количество импульсов в пачке: '); % Количество импульсов в пачке
T_pack=N_imp*T_rep; % Длительность пачки радиоимпульсов (мкс)
F_Doppler=input('Доплеровский сдвиг частоты (кГц): ')*10^(-3); % Доплеровский сдвиг частоты (МГц)
fs=84; % Частота дискретизации (МГц)
dt=1/fs; % Шаг дискретизации (мкс)
tay_delay=input('Задержка отраженного сигнала (мкс): '); % Задержка отраженного сигнала (мкс)
N_sample_1=T_rep*fs; % Количество отсчетов в одном периоде
N_sample_imp=tau_imp*fs; % Количество отсчетов в импульсе
figure(1)
% Отр. от цели сигнал. Сигнал представляет собой ког. пачку импульсов.
t=0:0.001:T_pack; % Интервал времени пачки импульсов
d=[0.5:10:T_pack]; % Массив значений центров импульсов
y=U_m*pulstran(t-tay_delay,d,'rectpuls',1); % Формирование последовательности прямоугольных импульсов
b=cos(2*pi*(F_prom+F_Doppler)*t); % Формирование гармонического сигнала т.е. ВЧ заполнение в импульсе
x=y.*b; % Получение радиоимпульса путем умножения огибающей сигнала и гармонического сигнала
plot(t,x),grid % График принятого отраженного сигнала
ylim([-U_m-0.5,U_m+0.5]) % Интервал значений по оси y
figure(2)
% Аналоговый полосовой фильтр f0=63 МГц, полоса пропускания 14 МГц.
Center_frequency=63; % Центральная частота аналогового полосового фильтра
Sampling_Rate=10*84; % Частота дискретизации (МГц)
[b,a]=butter(4,[2*pi*(Center_frequency-7) 2*pi*(Center_frequency+7)],'s'); % Синтез коэффициентов фильтра
f=0:1/T_pack:Sampling_Rate-1/T_pack; % Массив значений частоты
h=freqs(b,a,2*pi*f); % Комплексный коэффициент передачи
plot(f,abs(h)) % График АЧХ полосового фильтра
xlim([30 90]) % Интервал значений по оси x
figure(3)
H=tf(b,a); % Передаточная функция соответствующая своим коэффициентам числителя и знаменателя
dt_1=1/Sampling_Rate;
t=0:1/Sampling_Rate:T_pack-dt_1; % Массив значений времени
y=U_m*pulstran(t-tay_delay,d,'rectpuls',1);
b=cos(2*pi*(F_prom+F_Doppler)*t);
x=y.*b;
Signal=lsim(H,x,t); % Отклик (выхода) фильтра на входной сигнал
plot(t,Signal,'b'),grid % График процесса на выходе фильтра %xlim([0 2]) % Интервал значений по оси x
figure(4)
% Оцифрованный (отраженный) сигнал. Сигнал на выходе АЦП
T=0:dt/10:T_pack-dt/10; % Массив дискретного времени % Массив отсчетов отраженного сигнала
stem(T,Signal,'linew',2),grid % График оцифрованного отраженного сигнала
xlim([0 10])
ylim([-U_m-0.5,U_m+0.5]) % Интервал значений по оси y
figure(5)
% Вычисление спектра от дискретного (отраженного) сигнала.
NFFT=N_sample_1*N_imp*10; % Количество дискретных отсчетов сигнала
df=fs/NFFT; % Шаг по частоте в спектре (МГц)
f=(0:NFFT-1)*df; % Диапозон частот в спектре
Spectr=abs(fft(Signal,NFFT)); % Вычисление спектра
stem(f,Spectr,'.'),grid % График дискретного спектра
xlim([0,80]) % Интервал значений по оси x
-
- Сообщения: 64
- Зарегистрирован: 11 сен 2015, 23:37
Re: Полосовой фильтр (MatLab)
Вводимые параметры можно взять такие:
Амплитуда 1 В
Количество импульсов -1
Доплеровская частота -25 кГц
задержка 1 мкс
Вот такой спектр на 3 рисунке я получаю, если в программе задаю, где аналоговый фильтр частоту дискретизации 840 МГц.
И сигнал соответственно будет выглядеть на второй картинке таким образом
Если частоту дискретизации уменьшу в 10 раз т.е. будет 84 МГц(это я все меняю в аналоговом фильтре), получаю сигнал на первой картинке, что неправильно даже сигнал не похож на синусойду и уменьшенная амплитуда.
Дело в том, что у меня на входе вместе сигналом идет шум гаус. Фильтр мне должен пропустить сигнал вместе шумом согласно моей полосе пропускания, так ведь? Так вот я хотел это сделать все пошагово, хотел свой сигнал с шумом пропустить вместе шумом через фильтр, получить на выходе сигнал, а потом его оцифровать и тут получается ерунда, как со спектром так и должно быть в сигнале оцифрованном 840 отсчетов, а не 8400.
Амплитуда 1 В
Количество импульсов -1
Доплеровская частота -25 кГц
задержка 1 мкс
Вот такой спектр на 3 рисунке я получаю, если в программе задаю, где аналоговый фильтр частоту дискретизации 840 МГц.
И сигнал соответственно будет выглядеть на второй картинке таким образом
Если частоту дискретизации уменьшу в 10 раз т.е. будет 84 МГц(это я все меняю в аналоговом фильтре), получаю сигнал на первой картинке, что неправильно даже сигнал не похож на синусойду и уменьшенная амплитуда.
Дело в том, что у меня на входе вместе сигналом идет шум гаус. Фильтр мне должен пропустить сигнал вместе шумом согласно моей полосе пропускания, так ведь? Так вот я хотел это сделать все пошагово, хотел свой сигнал с шумом пропустить вместе шумом через фильтр, получить на выходе сигнал, а потом его оцифровать и тут получается ерунда, как со спектром так и должно быть в сигнале оцифрованном 840 отсчетов, а не 8400.
- Бахурин Сергей
- Администратор
- Сообщения: 1114
- Зарегистрирован: 05 окт 2010, 19:55
- Контактная информация:
Re: Полосовой фильтр (MatLab)
У вас сигнал на частоте 63 МГц а цифруете вы его с частотой 84 Мгц что не правильно потому что вы не выдержали требование теоремы отсчетов которая говорит что оцифровку необходимо вести с частотой большей чем удвоенная верхняя частота сигнала, т.е надо цифровать как минимум с частой 2* 63 МГц.