File:Amplitude & phase vs frequency for 3-term boxcar filter.svg

原始文件(SVG文件,尺寸为435 × 400像素,文件大小:20 KB)


摘要

描述
English: These graphs depict the same transfer function as File:Frequency response of 3-term boxcar filter.gif. But here, the amplitude is a signed quantity. And where it is negative, the quantity π has been added to the phase plot (before computing the principal value). The purpose is to illustrate the linear-phase property of the FIR filter.
Русский: Амлитудно-частотная и фазовая характеристики фильтра с конечной импульсной характеристикой скользящего среднего
日期
来源 自己的作品
作者 original: Bob K
vector version: Krishnavedala
授权
(二次使用本文件)
Creative Commons CC-Zero 本作品采用知识共享CC0 1.0 通用公有领域贡献许可协议授权。
采用本宣告发表本作品的人,已在法律允许的范围内,通过在全世界放弃其对本作品拥有的著作权法规定的所有权利(包括所有相关权利),将本作品贡献至公有领域。您可以复制、修改、传播和表演本作品,将其用于商业目的,无需要求授权。

其他版本 本檔案衍生自: Amplitude & phase vs frequency for a 3-term boxcar filter.gif
SVG开发
InfoField
W3C grn 
SVG的源代码为有效代码
Python-logo-notext 
矢量图Krishnavedala使用Python创作。
Python source
InfoField
click to expand

This script is a translation of the original Octave script into Python, for the purpose of generating an SVG file to replace the GIF version.

import scipy
from scipy import signal
import numpy as np
from matplotlib import pyplot as plt

N = 256
h = np.array([1., 1., 1.]) / 3
H = scipy.fftpack.shift(scipy.fft(h, n=N), np.pi)
w = np.linspace(-N/2, N/2-1, num=N) * 2 * np.pi / N

amplitude = abs(H)
L = int(np.floor(N/6))
negate1 = np.array(range(L)) + 1
negate2 = N - np.array(range(L)) - 1
amplitude[negate1] = -amplitude[negate1]
amplitude[negate2] = -amplitude[negate2]
H[negate1] = -H[negate1]
H[negate2] = -H[negate2]

fig = plt.figure(figsize=[5,5])
plt.subplot(211)
plt.plot(w, amplitude, 'blue')
plt.grid(True)
plt.ylabel('Amplitude')
plt.xlim([-np.pi,np.pi])
plt.xticks([-np.pi, -2*np.pi/3,0,2*np.pi/3,np.pi], [])
plt.subplot(212)
plt.plot(w, np.angle(H), 'blue')
plt.grid(True)
plt.ylabel('Phase (radians)')
plt.xlabel('$\\longleftarrow$ Frequency ($\\omega$) (radians/sample) $\\longrightarrow$')
plt.xticks([-np.pi, -2*np.pi/3,0,2*np.pi/3,np.pi], ['-$\pi$','-2$\pi$/3','0','2$\pi$/3','$\pi$'])
plt.xlim([-np.pi,np.pi])
plt.yticks([-np.pi, -2,-1,0,1,2,np.pi], ['-$\pi$','-2','-1','0','1','2','$\pi$'])
plt.ylim([-np.pi,np.pi])
plt.subplots_adjust(hspace=0.1)
plt.savefig('Amplidue & phase vs frequency response of 3-term boxcar filter.svg', bbox_inches='tight', transparent=True)
Octave/gnuplot source
InfoField
click to expand
This script was derived from the original in order to address some GNUplot bugs: a missing title and two missing axis labels.  And to add an Octave print function, which creates an SVG file.  Alternatively, the gnuplot screen image has an export function that produces an SVG file, but the π characters aren't as professional-looking.  I think the resultant quality produced by this script is now better than the file produced by the Python script.
graphics_toolkit gnuplot
clear all; close all; clc
  
hfig = figure("position",[100 100 509 509]);

x1 = .12;               % left margin for name of Y-variable
x2 = .02;               % right margin
y1 = .10;               % bottom margin for ticks
y2 = .08;               % top margin for title
dy = .08;               % vertical space between rows

width = 1-x1-x2;
height= (1-y1-y2-dy)/2; % space allocated for each of 2 rows

x_origin = x1;
y_origin = 1;           % start at top of graph area
%=======================================================
  N= 256;
  h = [1 1 1]/3;              % impulse response
  H = fftshift(fft(h,N));     % samples of DTFT
  abscissa = (-N/2:N/2-1)*2*pi/N;  % normalized frequency

% Specify the bins that are to show a negative amplitude
  L = floor(N/6);
  negate = [1+(0:L) N-(0:L-1)];
  amplitude = abs(H);
  amplitude(negate) = -amplitude(negate);
  H(negate) = -H(negate);   % compensate the phase of those bins
  phase = angle(H);
%=======================================================
  y_origin = y_origin -y2 -height;        % position of top row
  subplot("position",[x_origin y_origin width height])
  plot(abscissa, amplitude, "linewidth", 2);
% Default xaxislocation is "bottom", which is where we want the tick labels.
% set(gca, "xaxislocation", "origin")
  hold on
  plot(abscissa, zeros(1,N), "color", "black")  % draw x-axis
  xlim([-pi pi])
  ylim([-.4 1.2])
  set(gca, "XTick", [-pi -2*pi/3 0 2*pi/3 pi])
  set(gca, "YTick", [-.2 0 .2 .4 .6 .8 1])
  grid("on")

  ylabel("Amplitude")
% set(gca, "ticklabelinterpreter", "tex")	% tex is the default
  set(gca, "XTickLabel", ['-\pi'; '-2\pi/3'; '0'; '2\pi/3'; '\pi';])
  set(gca, "YTickLabel", ['-.2'; '0'; '.2'; '.4'; '.6'; '.8'; '1';])
  title("Frequency response of 3-term boxcar filter", "fontsize", 12)
%=======================================================
  y_origin = y_origin -dy -height;
  subplot("position",[x_origin y_origin width height])
  plot(abscissa, phase, "linewidth", 2);
  xlim([-pi pi])
  ylim([-pi pi])
  set(gca, "XTick", [-pi -2*pi/3 0 2*pi/3 pi])
  set(gca, "YTick", [-pi -2 -1 0 1 2 pi])
  grid("on")

  xlabel('\leftarrow Frequency (\omega) (radians/sample) \rightarrow')
  ylabel("Phase (radians)")
% set(gca, "ticklabelinterpreter", "tex")	% tex is the default
  set(gca, "XTickLabel", ['-\pi'; '-2\pi/3'; '0'; '2\pi/3'; '\pi';])
  set(gca, "YTickLabel", ['-\pi'; '-2'; '-1'; '0'; '1'; '2'; '\pi';])

% The print function results in nicer-looking "pi" symbols
% than the export function on the GNUPlot figure toolbar.
print(hfig,"-dsvg", "-S509,509","-color", ...
'C:\Users\BobK\Amplitude & phase vs frequency for a 3-term boxcar filter.svg')

说明

添加一行文字以描述该文件所表现的内容

此文件中描述的项目

描繪內容

image/svg+xml

9f3c3a071591f369e4e0d2c300c59f7bdf6e2841

20,378 字节

400 像素

435 像素

文件历史

点击某个日期/时间查看对应时刻的文件。

日期/时间缩⁠略⁠图大小用户备注
当前2020年10月1日 (四) 13:042020年10月1日 (四) 13:04版本的缩略图435 × 400(20 KB)KrishnavedalaText-to-graph aspect ratio renders poorly in thumbnails with text unreadable.
2019年7月3日 (三) 01:252019年7月3日 (三) 01:25版本的缩略图512 × 512(42 KB)Bob Kchange graph "linewidth" to 2
2019年7月2日 (二) 13:032019年7月2日 (二) 13:03版本的缩略图512 × 512(42 KB)Bob KEnlarge image. Add title. Improve rendering of "pi" symbols.
2017年8月22日 (二) 16:232017年8月22日 (二) 16:23版本的缩略图435 × 400(20 KB)Krishnavedalacorrections on phase plot
2017年8月22日 (二) 16:112017年8月22日 (二) 16:11版本的缩略图435 × 400(20 KB)Krishnavedalanew version using Matplotlib
2017年8月21日 (一) 15:262017年8月21日 (一) 15:26版本的缩略图512 × 384(42 KB)Krishnavedalathicker lines and uses unicode text
2017年8月16日 (三) 22:012017年8月16日 (三) 22:01版本的缩略图576 × 432(43 KB)KrishnavedalaUse Unicode for Greek symbols
2017年8月16日 (三) 21:582017年8月16日 (三) 21:58版本的缩略图576 × 432(43 KB)KrishnavedalaUnicode symbols corrected
2017年8月16日 (三) 21:522017年8月16日 (三) 21:52版本的缩略图576 × 432(43 KB)Krishnavedalaregenerate using "gnuplot" backend
2017年8月16日 (三) 21:312017年8月16日 (三) 21:31版本的缩略图576 × 431(28 KB)KrishnavedalaUser created page with UploadWizard

以下页面使用本文件:

全域文件用途

以下其他wiki使用此文件:

元数据