File:Overlap-add algorithm.svg
From testwiki
Jump to navigation
Jump to search
Size of this PNG preview of this SVG file: 800 × 579 pixels. Other resolutions: 320 × 232 pixels | 640 × 463 pixels | 1,024 × 741 pixels | 1,280 × 927 pixels | 2,560 × 1,853 pixels | 855 × 619 pixels.
Original file (SVG file, nominally 855 × 619 pixels, file size: 140 KB)
This file is from Wikimedia Commons and may be used by other projects. The description on its file description page there is shown below.
Summary
| DescriptionOverlap-add algorithm.svg |
English: A sequence of 5 plots depicts one cycle of the Overlap-add convolution algorithm. The first plot is a long sequence of data to be processed with a lowpass FIR filter. The 2nd plot is one segment of the data to be processed in piecewise fashion. The 3rd plot is the filtered segment, including the filter rise and fall transients. The 4th plot indicates where the new data will be added with the result of previous segments. The 5th plot is the updated output stream. |
|||
| Date | ||||
| Source | Own work | |||
| Author | Bob K | |||
| Permission (Reusing this file) |
I, the copyright holder of this work, hereby publish it under the following license:
|
|||
| Other versions |
This file was derived from: Overlap-save algorithm.svg |
|||
| SVG development InfoField | ||||
| Gnu Octave source InfoField | click to expand
This graphic was created with the help of the following Octave script: % Options
frame_background_gray = true;
if frame_background_gray
graphics_toolkit("qt") % or graphics_toolkit("fltk")
frame_background = .94*[1 1 1];
d = 2; % amount to add to text sizes
else
graphics_toolkit("gnuplot") % background will be white regardless of value below
frame_background = .94*[1 1 1];
d=0;
endif
M = 16; % filter length
h = ones(1,M)/M; % filter impulse response
L = 100; % output segment length
La = 500; % input data length
%randn("seed","reset") % experiment with data generator
%seed = randn("seed") % print value, in case want to use it again
randn("seed", e) % generate same data as Overlap-save_algorithm.svg
a = 1 + randn(1,La)/3; % data to be filtered
seg = 2; % segment to be computed
N = L + M-1; % DFT size (a power-of-2 would be more efficient)
Xa = seg*L + (1:L); % indices of segment to be filtered
% (https://octave.org/doc/v4.2.1/Graphics-Object-Properties.html#Graphics-Object-Properties)
% Speed things up when using Gnuplot
set(0, "DefaultAxesFontsize",10+d)
set(0, "DefaultTextFontsize",12+d)
set(0, "DefaultAxesYlim",[0 2])
set(0, "DefaultAxesYtick",[0:2])
set(0, "DefaultAxesYgrid","on")
set(0, "DefaultAxesXlim",[0 La])
set(0, "DefaultAxesXtick",[100:100:La])
set(0, "DefaultAxesXgrid","on")
set(0, "DefaultFigureColor",frame_background)
set(0, "DefaultAxesColor","white")
%=======================================================
hfig = figure("position",[10 10 912 685], "color",frame_background);
x1 = .02; % left margin
x2 = .02; % right margin
y1 = .08; % bottom margin for annotation
y2 = .08; % top margin for title
dy = .04; % vertical space between rows
width = 1-x1-x2;
height= (1-y1-y2-4*dy)/5; % space allocated for each of 5 rows
x_origin = x1;
y_origin = 1; % start at top of graph area
%=======================================================
y_origin = y_origin -y2 -height; % position of top row
subplot("position",[x_origin y_origin width height])
plot(1:La, a, "color","blue", Xa, a(Xa), "color","red", "linewidth",2)
title("One segment of an Overlap-add algorithm", "fontsize",14+d);
text(1, 2.2, "X[n], with segment k=2 in red", "fontsize",10+d)
%=======================================================
y_origin = y_origin -dy -height;
subplot("position",[x_origin y_origin width height])
plot(1:L, a(Xa), "color","red",...
L+(1:M-1),zeros(1,M-1), "color","red", "linewidth",2)
text(250, 1.6, 'X_k[n]')
%=======================================================
y_origin = y_origin -dy -height;
subplot("position",[x_origin y_origin width height])
H = fft(h,N);
b = real(ifft(H .* fft(a(Xa),N))); % = conv(h,a(Xa))
plot(1:N, b, "color","red", "linewidth",2);
text(250, 1.6, 'Y_k[n], output of FIR lowpass filter');
%=======================================================
y_origin = y_origin -dy -height;
subplot("position",[x_origin y_origin width height])
Xc = 1:seg*L;
c = conv(h,a(Xc));
x = (length(c)+1):La;
plot(1:length(c), c, "color","blue",...
x, zeros(1,length(x)), "color","blue", "linewidth",2,...
seg*L + (1:N), b, "color","red", "linewidth",2)
text(250, 1.6, 'Y_2[n-2L]')
%=======================================================
y_origin = y_origin -dy -height;
subplot("position",[x_origin y_origin width height])
Xd = 1:(seg+1)*L;
d1 = conv(h,a(Xd));
x = (length(d1)+1):La;
plot(1:length(d1), d1, "color","blue",...
x, zeros(1,length(x)), "color","blue", "linewidth",2)
xlabel('\leftarrow n \rightarrow', "fontsize",12+d)
|
Captions
Add a one-line explanation of what this file represents
Items portrayed in this file
depicts
14 January 2020
image/svg+xml
File history
Click on a date/time to view the file as it appeared at that time.
| Date/Time | Thumbnail | Dimensions | User | Comment | |
|---|---|---|---|---|---|
| current | 14:57, 25 January 2020 | 855 × 619 (140 KB) | wikimediacommons>Bob K | replace version with spurious arrow at the top |
File usage
The following page uses this file: