Project

General

Profile

1454 markw
pkg load signal;

fsample = 48000;
%fsample = 24000;

%notches = [15600/4,15600/2,15600];
cutoff = [15600,15600];
cutoff_norm = cutoff/(fsample/2);
%notches = load('notches');
%notches = notches.freqs;
notches = []
linepal = 312*49.86;
linentsc = 262*59.92;
for i=1:8
notches(end+1) = i*linepal/8;
notches(end+1) = i*linentsc/8;
end
notches(end+1) = linepal/64;
notches(end+1) = linentsc/64;
notches = notches(notches<cutoff(2));
notches_norm = notches/(fsample/2);

steps = 10000;

l=0;
%thr = 0.0008;
thr = 0.0016;
%thr = 0.0032;
for i = 0.0:1.0/steps:1.0
l=l+1;
pos(l) = i;
val = min(((i-notches_norm).^2).^0.5);
if val>thr
func(l)= 1.0;
else
func(l) = 0.0;
endif
if i>cutoff_norm(2)
func(l) = 0;
continue;
endif
if i>cutoff_norm(1)
cutoff_normd = cutoff_norm(2)-cutoff_norm(1);
func(l) = (cutoff_norm(2)-i)/cutoff_normd;
endif
end

fil_len = 2031;
fil = fir2(fil_len,pos,func);

bits = 16;
range = (2^bits-2)/2;
fil = round(fil*range)/range;

[h,w] = freqz(fil,1,10000);

f = pos;
m = func;

figure();
subplot(121);
plot(f,m,';target response;',w/pi,abs(h),';filter response;');
subplot(122);
plot(f,20*log10(m+1e-5),';target response (dB);',...
w/pi,20*log10(abs(h)),';filter response (dB);');