파일:DFT approximation to Hilbert filter.png

testwiki
둘러보기로 이동 검색으로 이동
DFT_approximation_to_Hilbert_filter.png (665 × 523 픽셀, 파일 크기: 24 KB, MIME 종류: image/png)

이 파일은 위키미디어 공용에 있으며, 다른 프로젝트에서 사용하고 있을 가능성이 있습니다. 해당 파일에 대한 설명이 아래에 나와 있습니다.

파일 설명

설명 The green graph is a section of the infinitely long Hilbert transform filter impulse response. The blue graph is a shorter section, produced by the Scilab function hilb() for use as an FIR filter. hilb() apparently just applies a simple rect() window, but other windows are also possible. When the filtering (convolution) is performed by multiplication of DFTs in the frequency domain (circular convolution), people sometimes replace the DFT of hilb() with samples of the DTFT (discrete-time Fourier transform) of h[n] = 2/(πn), whose real and imaginary components are all just 0 or ±1, thereby avoiding actual multiplications. But in that case, the convolution is actually being done with the periodic summation of h[n], shown in red. Unlike hilb(), it never goes to zero, which means that the "edge effects" of circular convolution affect (distort) every output sample. They can't simply be eliminated by discarding a few corrupted samples. That effect is generally worse than the distortion caused by windowing the h[n] sequence, even with the crude rectangular window. (example)
날짜
출처 자작
저자 Bob K
저작권
(이 파일을 인용하기)
Public domain 나는 이 작품의 저작권자로서, 이 작품을 퍼블릭 도메인으로 모두에게 공개합니다. 이 공개 선언은 전 세계적으로 유효합니다.
만약 저작권의 포기가 법률적으로 가능하지 않은 경우,
나는 이 작품을 법적으로 허용되는 한도 내에서 누구나 자유롭게 어떤 목적으로도 제한없이 사용할 수 있도록 허용합니다.
PNG 발전
InfoField
 이 PNG 컴퓨터 그래픽스LibreOffice(으)로 제작되었습니다.
Scripts
InfoField
Do it in two languages (for fun).

Scilab

N = 512;        % DFT size
L = N/2;        % length of plots
odd = 1:2:L;

// Create a segment of the IIR filter and its periodic summation
  h_IIR = zeros(1,L);
  h_periodic = zeros(1,L);
  for n = odd
    h_IIR(n) = 2/(%pi*n);
    h_periodic(n) = 2/(N*tan(%pi*n/N));      % periodic summation
  end

// Equivalent method
// M = 2*L+1;         
// h_IIR = hilb(M);  //513-tap, FIR Hilbert transform filter
// h_IIR = h_IIR(L+2:M);

// Create a 65-tap, FIR Hilbert transform filter
  minimum_display_value = 0.0001;
  M = 65;         
  M2 = (M-1)/2;
// The next 2 statements are equivalent to the one commented out below them
  h_65 = hilb(M);
  h_65 = [h_65(M2+2:M) ones(1,L-M2)*minimum_display_value];   // align with h_IIR
//h_65 = [h_IIR(1:M2)  ones(1,L-M2)*minimum_display_value];   // align with h_IIR

// Create another filter (equivalent to h_periodic) by sampling the DTFT
  H_DFT = %i*[0 -ones(1,L-1) ones(1,L)];
  h_DFT = real(fft(H_DFT, 1));    // inverse FFT
  h_DFT = h_DFT(2:$);             // align with h_IIR

// Display the results
  r=5; g=3; b=2;  // based on a call to getcolor()
  plot2d(odd', [h_IIR(odd)' h_DFT(odd)' h_65(odd)'], logflag="nl", style=[g r b],..
        rect=[0,minimum_display_value,256,1], frameflag=1, axesflag=1);

  title("Hilbert filter (green) and two approximations", "fontsize", 4);
  ylabel("impulse response (for n > 0)", "fontsize", 3);
  xlabel("n (odd values only)", "fontsize", 3);

  a = gca();
//a.box = "on";         included in frameflag=1
  a.font_size=3;        //set the tics label font size
  a.x_ticks = tlist(["ticks", "locations", "labels"], [1 51 101 151 201 251],..
  ["1" "51" "101" "151" "201" "251"]);

// Set line thickness of plots
  a.children.children.thickness=3;

// This works too
//f = gcf();
//f.children.children.children.thickness=3;

// Can do it this way when the thicknesses are not all the same:
// pb = a.children.children(1);    // Note that the order (compared to "style") is LIFO
// pr = a.children.children(2);
// pg = a.children.children(3);
// pg.thickness = 3;
// pr.thickness = 3;       // equivalent to set(pr,'thickness',3);
// pb.thickness = 3;

Now do it in Octave.

Octave

pkg load signal
  N = 512;        % DFT size
  L = N/2;        % length of plots
  odd = 1:2:L;

% Create a segment of the IIR filter and its periodic summation
  h_IIR = zeros(1,L);
  h_periodic = zeros(1,L);
  for n = odd
    h_IIR(n) = 2/(pi*n);
    h_periodic(n) = 2/(N*tan(pi*n/N));      % periodic summation
  endfor

% Create a 65-tap, FIR Hilbert transform filter
  minimum_display_value = 0.0001;
  M = 65;         
  M2 = (M-1)/2;
  h_65 = [h_IIR(1:M2)  ones(1,L-M2)*minimum_display_value];   % align with h_IIR

% Create another filter (equivalent to h_periodic) by sampling the DTFT
  H_DFT = i*[0 -ones(1,L-1) ones(1,L)];
  h_DFT = real(ifft(H_DFT));        % inverse FFT
  h_DFT = h_DFT(2:end);             % align with h_IIR

% Display the results
  figure
  semilogy(odd', h_IIR(odd)', 'color', 'green', 'linewidth', 2)
  hold on
% The next two statements are eqivalent
  semilogy(odd', h_DFT(odd)', 'color', 'red', 'linewidth', 2)
% semilogy(odd', h_periodic(odd)', 'color', 'red', 'linewidth', 2)

  semilogy(odd', h_65(odd)', 'color', 'blue', 'linewidth', 2)

  xlim([0 256])
  ylim([minimum_display_value 1])
  set(gca, 'xtick', [1:50:251]);

  title("Hilbert filter (green) and two approximations", "fontsize", 14);
  ylabel("impulse response (for n > 0)", "fontsize", 12);
  xlabel("n (odd values only)", "fontsize", 12);

LaTex


La bildo estas kopiita de wikipedia:en. La originala priskribo estas (The image is copied from wikipedia: en. The original description is):

date/time username edit summary source
23:55, 7 December 2005 en:User:Bob K (I created this image myself, using Matlab tools.) http://en.wikipedia.org/wiki/Image:DFT_approximation_to_Hilbert_filter.png

en:Image:DFT approximation to Hilbert filter.png

설명

이 파일이 나타내는 바에 대한 한 줄 설명을 추가합니다

이 파일에 묘사된 항목

다음을 묘사함

95ee1586c240f8bb958d25b4147898071aea7ae4

25,042 바이트

523 화소

665 화소

파일 역사

날짜/시간 링크를 클릭하면 해당 시간의 파일을 볼 수 있습니다.

날짜/시간섬네일크기사용자설명
현재2015년 3월 28일 (토) 21:522015년 3월 28일 (토) 21:52 판의 섬네일665 × 523 (24 KB)wikimediacommons>Bob KThis one depicts the truncated part of the FIR filter as on the x-axis, which is slightly above zero. The actual value of the truncated part is exactly zero., of course.

다음 문서 1개가 이 파일을 사용하고 있습니다: