Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
апывпыпыап
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 69
1

Расчет параметров окна Кайзера для проектирования КИХ-фильтра

07.01.2014, 00:26. Просмотров 2361. Ответов 6
Метки нет (Все метки)

у меня 2 вопроса по фильтрам в matlab
1)как в программе запустит выделенную часть программы
2)должны ли совпадать характеристики (АЧХ и т.д.) c fdatool или нет,или есть некоторая допусимая погрешность.
Желательно поскорей ответить
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
function qqq
tic
close all, clear,clc
Rp=0.039;%начальные параметры
Rs=42;
Ws=7080;
Wp=8670;
 
Fs=44000;%начальные параметры
[n,Wn]=cheb2ord(2*pi*Wp, 2*pi*Ws, Rp, Rs,  's')%расчет прототипа 
w0= Wn;
[b1,a1]=cheby2(n, Rs, w0,'high',  's')
figure
 
freqs(b1,a1)
title('Amplitude-frequency and phase-frequency Response');
figure
kzv1 = tf([b1], [a1]) %
bode(kzv1)
grid on
figure
subplot(2,3,1);
zplane(b1,a1)
grid on
subplot(2,3,2);
impulse(b1,a1)
grid on
subplot(2,3,3);
nyquist(b1,a1)
grid on
subplot(2,3,4);
step(b1,a1)
grid on
subplot(2,3,5);
grpdelay(b1,a1)
grid on
t1=0:0.01:40;
u=sin(t1);
ssys=tf(b1,a1);
subplot(2,3,6);
lsim(ssys,u,t1)
grid on
 
[n,Wn]=cheb2ord(Wp, Ws, Rp, Rs,  's')%бих
ftype='high';
[b2,a2]=cheby2(n,Rs,Wn/(Fs*2),ftype)
figure
freqz(b2,a2,[],Fs)
title('Amplitude-frequency and phase-frequency Response');
grid on
figure
subplot(2,3,1);
zplane(b2,a2)
title('Zero-Pole Map');
grid on
f=0:0.01:2;
f1=0:0.01:5;
subplot(2,3,2);
grpdelay(b2,a2,f)
title('Group Delay');
grid on
subplot(2,3,3);
phasedelay(b2,a2,f1)
title('Phase Delay');
grid on
[h,nT]=impz(b2,a2,200);
subplot(2,3,4);
stem(nT,h)
title('Impulse Response');
xlabel('Time(s)');
ylabel('Amplitude');
grid on
[g,nT]=stepz(b2,a2,200);
subplot(2,3,5);
stem(nT,g);
title('Step Response');
xlabel('Time(s)');
ylabel('Amplitude');
grid on
[u,t] = gensig('sin',0.3,2,0.0001);
ssysd=tf(b2,a2);
subplot(2,3,6);
lsim(ssysd,u,t)
grid on
 
[u,t] = gensig('sin',0.3,2,0.0001);
ssysd=tf(b2,a2);
subplot(2,3,6);
lsim(ssysd,u,t)
grid on
 
[B][I]fcc=[7080 8670];
ftype='high';
[n,Wn,beta,ftype] = kaiserord (fcc,[1 1 1],[0.00056 0.001 0.00056],Fs)%меняем
b3= fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
[h,f] = freqz(b3,1,4096,Fs);
figure
subplot(2,3,1);
plot(f,20*log10(abs(h)))
grid on
subplot(2,3,2);
zplane(b3,1)
grid on
subplot(2,3,3);
impz(b3)
grid on
[g,nT]=stepz(b3,1,150);
subplot(2,3,4);
stem(nT,g)
grid on
subplot(2,3,5);
grpdelay(b3)
grid on
subplot(2,3,6);
phasedelay(b3,1,1024,'whole',Fs)
grid on
 
[n,fo,mo,w] = firpmord( fcc, [0 1 0], [0.01 0.01 0.01], Fs );%меняем
br = firpm(n,fo,mo,w);
[h1,f1] = freqz(br,1,7000,Fs);  
figure
plot(f1,20*log10(abs(h1)))[/I][/B]
 
f1=50;
f2=9000;
f3=12000;
f4=6000;
t=0:0.0001:0.1;
A1=0.2;
A2=1;
A3=0.5;
A4=0.4;
%x1=A1*(sin(2*pi*50*t).*sin(2*pi*f1*t));
x2=A3*(sin(2*pi*1000*t)+sin(2*pi*f2*t));
%x3=A3*(sin(2*pi*50*t).*sin(2*pi*f3*t));
%x4=A4*(sin(2*pi*50*t).*sin(2*pi*f4*t));
x=x2;%+x3+x4;
figure
plot(t,x);
xlim([0 0.002])
 
figure
y=filter(b2,a2,x);
plot(t,y)
xlim([0.025 0.026])
ylim([-1 1])
 
f1_2=100;
f2_2=10000;
f3_2=15000;
f4_2=4000;
t2=0:10/Fs:0.1;
A1_2=0.2;
A2_2=1;
A3_2=0.4;
A4_2=0.6;
x1_2=A1_2*(sin(2*pi*50*t2).*sin(2*pi*f1_2*t2));
x2_2=A2_2*(sin(2*pi*50*t2).*sin(2*pi*f2_2*t2));
x3_2=A3_2*(sin(2*pi*50*t2).*sin(2*pi*f3_2*t2));
x4_2=A4_2*(sin(2*pi*50*t2).*sin(2*pi*f4_2*t2));
xn=x1_2+x2_2+x3_2+x4_2;
figure
plot(t,xn);
figure
yn=filter(b3,1,xn);
plot(t,yn)
xlim([0.025 0.026])
ylim([-1 1])
 
S=fft(x,1024);
SF=fft(y,1024);
w=(0:511)/512*(Fs/2);
figure
plot(w,abs(S(1:512)'));
 
S1=fft(xn,1024);
SF1=fft(yn,1024);
w1=(0:511)/512*(Fs/2);
figure
plot(w1,abs(S1(1:512)'));
toc
end


Добавлено через 3 минуты
Вот эту часть подправить (выше не выделился нужный кусок программы )(для ФВЧ)
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
fcc=[7080 8670];
ftype='high';
[n,Wn,beta,ftype] = kaiserord (fcc,[1 1 1],[0.00056 0.001 0.00056],Fs)%меняем
b3= fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
[h,f] = freqz(b3,1,4096,Fs);
figure
subplot(2,3,1);
plot(f,20*log10(abs(h)))
grid on
subplot(2,3,2);
zplane(b3,1)
grid on
subplot(2,3,3);
impz(b3)
grid on
[g,nT]=stepz(b3,1,150);
subplot(2,3,4);
stem(nT,g)
grid on
subplot(2,3,5);
grpdelay(b3)
grid on
subplot(2,3,6);
phasedelay(b3,1,1024,'whole',Fs)
grid on
 
[n,fo,mo,w] = firpmord( fcc, [0 1 0], [0.01 0.01 0.01], Fs );%меняем
br = firpm(n,fo,mo,w);
[h1,f1] = freqz(br,1,7000,Fs);  
figure
plot(f1,20*log10(abs(h1)))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2014, 00:26
Ответы с готовыми решениями:

Использование КИХ-фильтра
Здравствуйте. В матлабе создал сигнал, частота дискретизации 192 кГц, частоты...

Синтез КИХ фильтра
Проектирую управляемый фильтр, на 1 из этапов встретился с применением метода...

Определить порядок и коэффициенты КИХ-фильтра
Здравствуйте, я только осваиваю matlab, нужно рассчитать КИХ фильтр. Через...

Описать 4 Ких фильтра и записать их коэффициенты в двочный файл
Добрый день. Мне нужно Описать 4 Ких фильтра и записать их коэффициенты в...

Синтез КИХ фильтра в Матлабе - переход к арифметике с фиксированной точкой
Вот я сгенерировал корректирующий КИХ в Матлабе, и моделирую прохождение синуса...

6
R2D2
898 / 807 / 112
Регистрация: 23.11.2012
Сообщений: 2,387
07.01.2014, 02:05 2
Запустить выделенную часть программы - F9.
Графики должны совпадать с fdatool (естественно, при одинаковой нормировке осей).
0
апывпыпыап
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 69
08.01.2014, 10:02  [ТС] 3
я про то какие коэффициенты должны быть для ФВЧ в этой строке,что бы программа заработала
Matlab M
1
[n,Wn,beta,ftype] = kaiserord (fcc,[1 1 1],[0.00056 0.001 0.00056],Fs)
Добавлено через 7 часов 9 минут
так кто то может объяснить мне про эти коэффициенты ?

Добавлено через 16 часов 28 минут
меня игнорят ?
0
R2D2
08.01.2014, 10:43
  #4

Не по теме:

Вы бы хоть, для начала, прочитали какие требования к входным параметрам этой функции. Привели текст ошибки. Тогда бы Вам можно было помочь.
А вообще: хорошая привычка - комментировать то, что пишешь. А то, я думаю, не всем понятен смысл того, что у Вас в коде творится.

0
апывпыпыап
0 / 0 / 0
Регистрация: 10.05.2012
Сообщений: 69
08.01.2014, 11:10  [ТС] 5
не понятно как работает данная функция для ФВЧ,ибо при изменении коэффициентов выдает разные ошибки
0
R2D2
898 / 807 / 112
Регистрация: 23.11.2012
Сообщений: 2,387
08.01.2014, 11:24 6
Цитата Сообщение от апывпыпыап Посмотреть сообщение
выдает разные ошибки
Например?
Вот код для ФВЧ.
Matlab M
1
2
3
4
5
6
7
8
clc; close all; clear;
fsamp = 8000;
fcuts = [1000 1500];
mags = [0 1];
devs = [0.05 0.01];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
freqz(hh)

Не по теме:

Ненавязчиво замечу, что тупо скопипастил хелп с заменой одной переменной.

1
Миниатюры
Расчет параметров окна Кайзера для проектирования КИХ-фильтра  
vital792
2002 / 1274 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
08.01.2014, 15:02 7
Цитата Сообщение от апывпыпыап Посмотреть сообщение
так кто то может объяснить мне про эти коэффициенты ?
чтобы понять смысл этих коэффициентов, сначала нужно понять принцип работы самого фильтра. Вы используете оконный метод(функция fir1) с окном кайзера. У окна кайзера есть настраиваемый параметр - beta. От него зависят характеристики окна, если его увеличивать, уменьшается уровень пульсаций боковиков, но при этом расширяется и основной лепесток. Чтобы его сузить, приходится увеличивать длину окна. Таким образом, нужно получить минимальную длину окна(и соответственно порядок фильтра) чтобы при этом уровень боковиков был не выше заданного(от этого уровня зависят пульсации в полосе непропускания). Это и делает функция kaiserord. Первым параметром вы задаете полосы(их границы). В вашем случае это граница полосы пропускания и полосы заграждения(между ними переходной процесс). Второй параметр - коэффициенты передачи этих полос. В случае вч фильтра это будет [0 1] - пропускать вч, задержить нч. В принципе, это влияет только на выходной параметр ftype. Если вы поставите [1 0], то есть нч фильтр, а ftype зададите руками, результат будет тот же. Вам же главное что нужно получить от этой функции - порядок фильтра и beta для окна кайзера. Только в этом случае еще возможно придется увеличить на 1 порядок, если он окажется нечетным. И третим параметром вы задаете уровень пульсаций, но не в децибелах, как это обычно делается, а в прямо задаете уровень отклонения от коэффициента передачи по абсолютной величине.
1
08.01.2014, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2014, 15:02

Какой метод синтеза фильтра обеспечивает наименьшее число параметров фильтра при заданных ограничениях АЧХ?
Доброго времени суток! Подскажите пожалуйста,какой метод синтеза фильтра...

Разработать КИХ фильтр и реализовать это все дело в matlab-е с использованием окна Хэмминга
Уважаемые форумчане помогите пожалуйста разобраться вот с этой лабораторной...

Расчет фильтра (fdatool)
Доброго времени суток! Пожалуйста, дайте совет новичку. Получила задание на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru