- refactored
This commit is contained in:
Executable
+30
@@ -0,0 +1,30 @@
|
||||
function [y, gain] = cic_filter(R, M, N, x)
|
||||
% [y, gain] = cic_filter(R, M, N, x)
|
||||
|
||||
a_i = [1 -1];
|
||||
b_i = 1;
|
||||
|
||||
a_c = 1;
|
||||
b_c = [1 zeros(1, M-1) -1];
|
||||
|
||||
gain = (M*R)^N
|
||||
k_i = 1/(M*R);
|
||||
|
||||
i_out = x;
|
||||
|
||||
% Integrator
|
||||
for i=1:N,
|
||||
i_out = k_i*filter(b_i, a_i, i_out);
|
||||
end;
|
||||
|
||||
% Decimate
|
||||
c_out = i_out(R:R:length(i_out));
|
||||
|
||||
% Comb
|
||||
for i=1:N,
|
||||
c_out = filter(b_c, a_c, c_out);
|
||||
end;
|
||||
|
||||
|
||||
y = c_out;
|
||||
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
function cic_plot(M, N, R)
|
||||
% cic_plot(M, N, R)
|
||||
|
||||
ns = 1000;
|
||||
f = 2*(1:ns)/ns;
|
||||
H = abs(sin(pi*M.*f)./sin(pi.*f/R)).^N;
|
||||
|
||||
subplot(2,1,1)
|
||||
plot(f,H);
|
||||
xlabel('f / fs');
|
||||
ylabel('G');
|
||||
grid;
|
||||
|
||||
Gain = (R*M)^N
|
||||
BitGrowth = ceil(N*log2(R*M))
|
||||
|
||||
subplot(2,1,2)
|
||||
plot(f,20*log10(H/Gain));
|
||||
xlabel('f / fs');
|
||||
ylabel('A/dB');
|
||||
grid;
|
||||
|
||||
Atten_fs2 = 20*log10(H(ns/2)/Gain)
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
% COEF generiert IIR-Tiefpass Koeffizienten für geradzahlige Ordnung
|
||||
% [b,a] = coef(fa,fg,Q,N)
|
||||
%
|
||||
% fa : Abtastfrequenz [Hz]
|
||||
% fg : Grenzfrequenz [Hz] fg <= fa/2
|
||||
% Q : Polgüte (Q=1.0 für Butterworth)
|
||||
% N : Filterordnung (durch zwei teilbar)
|
||||
% Type : 'Lowpass', 'Highpass', 'Bandpass', 'Bandstop'
|
||||
%
|
||||
function [b,a] = coef(fa,fg,Q,N,Type)
|
||||
|
||||
if (rem(N,2) > 0)
|
||||
error('Filterordnung muss z.Zt. noch durch zwei teilbar sein!');
|
||||
end;
|
||||
|
||||
if (strcmp(Type,'Bandstop'))
|
||||
TF = 4;
|
||||
end;
|
||||
|
||||
TF
|
||||
sn = sin(2*pi*fg/fa);
|
||||
cs = cos(2*pi*fg/fa);
|
||||
ak = ones(N/2,3);
|
||||
bk = ones(N/2,3);
|
||||
a = 1;
|
||||
b = 1;
|
||||
|
||||
if (strcmp(Type,'Lowpass'))
|
||||
for n = 1:N/2,
|
||||
Qp = 1/(2*sin(pi*(n-0.5)/N))
|
||||
alpha = sn/(2*Q*Qp);
|
||||
a0 = 1+alpha;
|
||||
ak(n,2) = -2*cs/a0;
|
||||
ak(n,3) = (1-alpha)/a0;
|
||||
bk(n,1) = 0.5*(1-cs)/a0;
|
||||
bk(n,2) = (1-cs)/a0;
|
||||
bk(n,3) = 0.5*(1-cs)/a0;
|
||||
a = conv(a,ak(n,(1:3)));
|
||||
b = conv(b,bk(n,(1:3)));
|
||||
end;
|
||||
end;
|
||||
|
||||
if (strcmp(Type,'Highpass'))
|
||||
for n = 1:N/2,
|
||||
Qp = 1/(2*sin(pi*(n-0.5)/N))
|
||||
alpha = sn/(2*Q*Qp);
|
||||
a0 = 1+alpha;
|
||||
ak(n,2) = -2*cs/a0;
|
||||
ak(n,3) = (1-alpha)/a0;
|
||||
bk(n,1) = 0.5*(1+cs)/a0;
|
||||
bk(n,2) = -(1+cs)/a0;
|
||||
bk(n,3) = 0.5*(1+cs)/a0;
|
||||
a = conv(a,ak(n,(1:3)));
|
||||
b = conv(b,bk(n,(1:3)));
|
||||
end;
|
||||
end;
|
||||
|
||||
if (strcmp(Type,'Bandpass'))
|
||||
for n = 1:N/2,
|
||||
Qp = 1/(2*sin(pi*(n-0.5)/N))
|
||||
alpha = sn/(2*Q*Qp);
|
||||
a0 = 1+alpha;
|
||||
ak(n,2) = -2*cs/a0;
|
||||
ak(n,3) = (1-alpha)/a0;
|
||||
bk(n,1) = alpha/a0;
|
||||
bk(n,2) = 0;
|
||||
bk(n,3) = -alpha/a0;
|
||||
a = conv(a,ak(n,(1:3)));
|
||||
b = conv(b,bk(n,(1:3)));
|
||||
end;
|
||||
end;
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
% IIR-Tiefpass
|
||||
% y = iirtp(fa,fg,Q,N,x)
|
||||
%
|
||||
% fa : Abtastfrequenz [Hz]
|
||||
% fg : Grenzfrequenz [Hz] fg <= fa/2
|
||||
% Q : Polgüte (Resonanz)
|
||||
% N : Filterordnung (durch zwei teilbar)
|
||||
% x : Eingangssignal
|
||||
function y = iirtp(fa,fg,Q,N,x)
|
||||
|
||||
[b,a] = iirtpc(fa,fg,Q,N);
|
||||
|
||||
y = filter(b,a,x);
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
% IIR-Tiefpass
|
||||
% [y,zf] = iirtp2(fa,fg,Q,N,x,zi)
|
||||
%
|
||||
% fa : Abtastfrequenz [Hz]
|
||||
% fg : Grenzfrequenz [Hz] fg <= fa/2
|
||||
% Q : Polgüte (Resonanz)
|
||||
% N : Filterordnung (durch zwei teilbar)
|
||||
% x : Eingangssignal
|
||||
function [y,zf] = iirtp(fa,fg,Q,N,x,zi)
|
||||
|
||||
[b,a] = iirtpc(fa,fg,Q,N);
|
||||
|
||||
[y,zf] = filter(b,a,x,zi);
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
% IIRTPC generiert IIR-Tiefpass Koeffizienten für geradzahlige Ordnung
|
||||
% [b,a] = iirtpc(fa,fg,Q,N)
|
||||
%
|
||||
% fa : Abtastfrequenz [Hz]
|
||||
% fg : Grenzfrequenz [Hz] fg <= fa/2
|
||||
% Q : Polgüte (Resonanz)
|
||||
% N : Filterordnung (durch zwei teilbar)
|
||||
%
|
||||
function [b,a] = iirtpc(fa,fg,Q,N)
|
||||
|
||||
if (rem(N,2) > 0)
|
||||
error('Filterordnung muss z.Zt. noch durch zwei teilbar sein!');
|
||||
end;
|
||||
|
||||
sn = sin(2*pi*fg/fa);
|
||||
cs = cos(2*pi*fg/fa);
|
||||
ak = ones(N/2,3);
|
||||
bk = ones(N/2,3);
|
||||
a = 1;
|
||||
b = 1;
|
||||
|
||||
for n = 1:N/2,
|
||||
Qp = 1/(2*sin(pi*(n-0.5)/N));
|
||||
alpha = sn/(2*Q*Qp);
|
||||
a0 = 1+alpha;
|
||||
ak(n,2) = -2*cs/a0;
|
||||
ak(n,3) = (1-alpha)/a0;
|
||||
bk(n,1) = 0.5*(1-cs)/a0;
|
||||
bk(n,2) = (1-cs)/a0;
|
||||
bk(n,3) = 0.5*(1-cs)/a0;
|
||||
a = conv(a,ak(n,(1:3)));
|
||||
b = conv(b,bk(n,(1:3)));
|
||||
end;
|
||||
Executable
+27
@@ -0,0 +1,27 @@
|
||||
% Erzeugt Filterkoeffizienten für FIR-Filter zur Eliminierung des Gleichanteils
|
||||
% -----------------------------------------------------------------------------
|
||||
%
|
||||
% Aufruf
|
||||
% Function [coeff] = undcc(N)
|
||||
%
|
||||
% Parameter:
|
||||
% N : Bestimmt Grösse des Koeffizientenvektors
|
||||
%
|
||||
% Rückgabewerte:
|
||||
% coeff : Koeffizientenvektor, Länge N
|
||||
|
||||
% -----------------------------------------------------------------------------
|
||||
% Datum : 26.07.2001
|
||||
% Autor : Jens Ahrensfeld
|
||||
% Thema : Diplomarbeit
|
||||
% Datei : undcc.m
|
||||
% Benötigte Dateien:
|
||||
%
|
||||
% -----------------------------------------------------------------------------
|
||||
function [coeff] = undcc(N)
|
||||
|
||||
% Ansatz: y = x - arith. Mittelwert(x)
|
||||
coeff = [1.0-1/N ; -1/N*ones(N-1,1)];
|
||||
|
||||
% -----------------------------------------------------------------------------
|
||||
% Ende undcc.m
|
||||
Reference in New Issue
Block a user