| 
    
       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);');
 
     |