您的位置:首页 > 其它

Signal Processing Primer(信号处理基础解析)

2016-04-10 21:21 316 查看



//{@

文章原来出处:

https://mynameismjp.wordpress.com/2012/10/15/signal-processing-primer/

也想引用一下作者说的那句:I’m more interested in the material being correct than I am in sounding like I’m smart.

下面的翻译带上了原文,水平有限,希望指正,这系列文章有4篇,会和AA有很大关系,翻译后会陆续放出

//@}


Signal Processing Primer

信号处理初级读本

For a theoretical understanding of aliasing and anti-aliasing, we can turn to the fields of signal
processing[1] and sampling
theory[2]. This article will explain some of the basics of these two related field in my own words, taking a more theoretical point of view. In the following
article the concepts covered here will be used to analyze common aspects of real-time graphics, so that we can describe them in terms of signal processing. If you’d like some further
reading, I’d recommend consulting chapter 7 of Physically Based Rendering[3], chapter 5 of Real-Time
Rendering, 3rd Edition[4] or Principles of Digital Image Synthesis[5]
(which is actually freely available
for download)

为了在原理上理解走样与反走样,我们将要转到信号处理和采样理论的领域中。这篇文章将会用我的理解来解析这两个领域的基础知识。这里描述到的内容会在接下来的文章中被用来分析实时计算机图形学的常见部分,以致于我们能够用信号处理的方式描述他们。

As always, I’m more interested in the material being correct than I am in sounding like I’m smart. So if you see anything that you feel is incorrect or have any additional insights to share, please let
me know in the comments!

和往常一样,我更希望从文章中获得相关的指正而不是用它来展示我有多聪明。所以如果你看到任何你觉得不正确的或者有任何额外的观点要分享的,请在下面的评论中让我知道。

Sampling Theory

采样理论

Sampling theory deals with the process of taking some continuous signal that varies with one or parameters, and sampling the signal at discrete values of those
parameters. If you’re not familiar with signals and signal processing, you can think of a signal as some continuous function of any dimension that varies along its domain. To sample it, we then calculate that function’s value at certain points along the curve.
Usually the points at which we sample are evenly-spaced apart, which we call uniform sampling. So for instance if we had a 1D signal defined as f(x) = x^2, and we might sample it at x =0, x = 1, x = 2 x = 3, and
so on. This would give us our set of discrete samples, which in this case would be 0, 1, 4, 9, and continuing on in that fashion. Here’s an image showing our continuous function of f(x) = x^2, and the result of discretely sampling that function at integer
values of x:

采样理论是这样一个过程:基于一个或多个参数的连续信号,然后基于这些参数在离散的值上对这个信号进行采样。如果你对信号和信号处理不熟悉,你可以认为一个信号就如任意维数的连续函数会在它的域范围内改变。为了能够对它进行采样,我们会沿着函数的曲线计算出该函数在某些点上的值。通常来讲,我们用于采样点是等距离划分的,被称作uniform sampling。到目前为止,例如,假设我们有一个一维的信号以f(x)=x^2定义,我们用于采样的点在x=0,
1, 2, 3...上。这将会为我们得到离散采样集,在这个例子中,采样得到的值会是0, 1, 4, 9,....。下面的图片显示了一个以x为整数对连续函数f(x)=x^2进行离散采样的结果:



Discretely sampling a continuous function

Working with discrete samples has a lot of advantages. For instance, it allows us to store a representation of an arbitrary signal in memory by simply storing the sampled values in an array. It also allows
us to perform operations on a signal by repeatedly applying the same operation in a loop for all sample points. But what happens when we need the value of signal at a location that we didn’t sample at? In such cases, we can use a process known as reconstruction to
derive an approximation of the original continuous function. With this approximation we can then discretely sample its values at a new set of sample points, which is referred to as resampling. You may also see
this referred to as interpolation in cases where local discrete values are used to compute an “in between” value.

使用离散采样有很多优点。例如,当我们需要储存一个任意形状的信号到内存中时,离散采样允许我们像储存采样数据到一个array中的形式一样来执行。它也允许我们执行一系列的操作,如在一个循环中重复地应用相同的操作到所有的采样点中。但当我们需要的值不在采样点上会发生什么?在这个情况下,我们可以使用一种被称为reconstruction的方式获得一个近似原来的连续函数的值。使用这种近似方式我们能够在一个新的采样集中离散地对它的值进行采样,这被成为resampling。你可能也看到过resampling被称为interpolation的情况,在interpolation中,本地的离散值会被用来计算"中间"值。

The actual process of reconstruction involves applying some sort of reconstruction filter to a set of discrete samples. Typically this filter is some function
that is symmetrical about x=0, often with non-zero values only in a small region surrounding x=0. The following image contains a few functions commonly used as reconstruction filters:

reconstruction的实际过程会牵涉到应用某种reconstruction filter到离散采样集中。一般来讲这个filter是某种函数在x=0的位置中对称,通常情况下,在x=0附近会有很少一部分非零的采样值。下面的图片包含了一些通常用于reconstruction fitler的函数:

Various functions used as reconstruction filters. Starting from the top left and moving clockwise: the box function, the triangle function, and the sinc function. Image from Real-Time Rendering, 3rd Edition,
A K Peters 2008

The filter is applied using a process known as convolution. In the case of discrete sample points, a convolution implies multiplying the sample values with
an instance of the filter function translated such that it is centered about the same point, and then summing the result from all sample points. If you’re having trouble understand what this means, take a look at the following three images which show the result
of convolution with three common reconstruction filters:

这个filter被应用到离散集中的过程被称为convolution(卷积)。在离散采样点的情况下,一个卷积表示一个被平移的fitler函数实例乘以采样的值,被平移是为了使采样点能够依然位于相同的点的中央,然后将所有的采样点加起来。如果你在理解这个操作(K:卷积的操作)上有困难,看一下下面的三个图片,他们都显示了离散数据和reconstruction
filter进行卷积后的结果:







Discretely-sampled signals being reconstructed with a box function, a triangle function, and a sinc function. Images from Real-Time Rendering, 3rd Edition,A
K Peters 2008

离散的采样信号被box ,triangle,sinc函数重建

If you’ve ever written a full-screen Gaussian blur shader, then you’ve used convolution. Think about how you would write such a shader: you loop over nearby pixel values (sample points) in a texture, multiply
each value by the Gaussian function evaluated using the distance from your output pixel, and sum the results. Evaluating a function using the distance to the sample point is equivalent to translating the filter function to the location of the sample point,
although you may not have thought of it this way.

如果你曾经写过一个全屏的高斯模糊shader的话,那么你就已经使用过卷积了。思考一下你会怎样写这个shader:你在一个texture中循环地遍历邻近的像素值(采样点),将每个值和高斯函数相乘,(K:应该是遍历的距离)通过当前输出像素的距离来计算,然后将这些结果加起来。使用到采样点的距离来计算一个函数,和平移这个filter函数到相应采样点的位置需要平移的距离是相等的,尽管你可能并没有用这种方式来思考过它。

Of the common reconstruction filters, the sinc filter is particularly interesting. This is because it is theoretically possible to use it to exactly reconstruct the original continuous signal, provided
that the signal was adequately sampled. This is known as ideal reconstruction. To define what “adequately sampled” means for a continuous signal, we must now discuss aliasing.

与普通的reconstruction fitler相比,sinc filter是特别有趣的。这是因为,在确保信号都是被精确地采样的前提下,李黁上能够用它来准确重建出原始的连续信号。这就被称为理想重建。我们现在必须讨论走样,来定义什么是对连续信号的“精确采样”。

Key Takeaway Points:

关键点:

Continuous signals(functions) can be sampled at discrete sample points
An approximation of the original continuous signal can be reconstructed by applying a filter to the discrete sample values
连续信号能够被采样成离散点
接近原始连续信号能够在应用一个filter到离散采样点上被重建。

Frequency and Aliasing

频率和走样

Signals are often described in terms of their frequency, which in rough terms describes how quickly a signal changes over their domain. In reality a signal
is not composed of just one frequency, but can have an entire spectrum of frequencies. Mathematically a signal can be converted from its original representation (often referred to as the time domain or spatial
domain, depending on the context) to its spectrum of frequencies (known as the frequency domain) using the Fourier transform. Once in the frequency domain, it
can be determined if there is some maximum frequency where all frequencies above that have an intensity of zero. If such a maximum frequency exists, the signal is said to bebandlimited, which means we can determine
the bandwidth of that signal. Depending on the context, the term “bandwidth” can be either the passband bandwidth or the baseband
bandwidth. The passband bandwidth is equal to the maximum frequency minus the minimum frequency, while the baseband bandwidth simply refers to the maximum frequency. With sampling theory we are primarily concerned with the baseband bandwidth, because
it is used to determine the Nyquist rate of the signal. The Nyquist rate is minimum rate at which the signal should be sampled in order to prevent aliasing from occurring,
and it is equal to 2 times the baseband bandwidth. The term “aliasing” refers the fact that a signal can become indistinguishable from a lower-frequency signal when undersampled. The following image demonstrates
this phenomenon with two sine waves of different frequencies, where the samples would be the same for either signal:

信号通常会使用频率的形式来描述,这种方式大体上是描述一个信号在频域中的变化有多快。在真实环境中一个信号包含不止一个频率,其可以包含整个频谱的频率。在数学上,一个信号能够从原始图形(根据上下文,通常被指示为时域或空间域)使用傅立叶变换转化到使用频谱频率(被认为是频域)的形式中。一旦进入频域,如果存在某个最大值的频率,而其他比这个最大值频率要大的频率的强度都是零的话(K:即在频率轴上,假设最大值为fs,比fs要大的频率肯定在右边,也就是说右边的频率都是0的),它就能够被准确定义。如果这样一个最大的频率存在,这个信号就不认为是bandlimited,意思是我们能够决定这个信号的带宽。基于上下文,术语“bandwidth”能够表示为passband
bandwidth或者baseband bandwidth。passband bandwidth等同于最大频率减去最小频率,而baseband bandwidth简单地指表示为最大频率。在采样理论中我们主要关心baseband bandwidth,因为它被用来决定这个信号的Nyquist rate(尼奎斯特速率)。为了避免走样发生,Nyquist rate是信号被采样时最低的比率,而且它等于两倍的baseband bandwidth。术语“aliasing”表示,无法从一个undersampled(采样不足)的低频率信号中分辨出原来的信号。下面的图像展示了两个不同频率的sine曲线,图像中所显示的两个信号的采样率是一样的:



Aliasing of a sampled sine wave. Image from Wikipedia

In practice, aliasing that occurs due to undersampling will result in errors in the reconstructed signal. So in other words, the signal you end up with will be different than the one you were originally
sampling. For signals that are not bandlimited, there is no maximum frequency and thus there is no sampling rate that won’t result in aliasing after reconstruction.

在实践中,走样表示:错误会因undersampling的发生而出现在重建后的信号中。所以换句话讲,你最终(重建后)的信号将会不同于你原来采样的信号。对于哪些不是bandlimited的信号来讲,它们没有最大的频率,因此没有采样率在重建后会导致走样。(K:我这里的理解是,根本没有相应的sample rate,所以没有走样的情况能够发生)

To better understand how and why aliasing occurs, it can be helpful to look at things in the frequency domain. Let’s start with the plot of the frequency spectrum for an arbitrary signal:

为了更好的理解how and why走样会出现,看一下在频域上的图样会有所帮助。以下是一个任意信号的频谱曲线:



Frequency spectrum of an arbitrary signal. Image from Wikipedia.

As we can see from the plot, there is a maximum frequency located at point “B”, meaning that the signal is bandlimited and has a bandwidth equal to B. When this signal is discretely sampled, an infinite
number of “copies” of the signal will appear alongside the original at various points. Here’s an image illustrating how it looks:

如我们所见,在“B”点处有最大的频率,意思是这个信号是bandlimited的并且bandwidth等于B(K:为什么不是B-(-B)*0.5?原因是这里所说的是最大的频率,而Y轴上是X(f),是采样值,bandlimited表示在最大频率之上,都为0,这里是满足的)。当信号被离散地采样时,将会有无穷多个这个信号的“副本”沿着原来的信号出现在各个点上。下面是的图片解析了这个现象:



Replicas of a signals frequency spectrum. Image from Wikipedia

The location of the signal duplicates is determined by the sampling rate, which is marked as “fs” in the plot. Since these duplicates are present, we must use
a filter (the reconstruction filter) to remove these duplicates and leave us with only the frequency spectrum that was within the original signal’s bandwidth (referred to as the baseband frequencies). The obvious
solution is to use a box function in the frequency domain, since a box function implies multiplying a certain range of values by 1 and all other values by 0. So if we were to use a box function with a width of B, we would remove the duplicates while leaving
the original signal intact. The following diagram shows how this might work:

信号重复的位置是由采样率决定的,该采样率用“fs”标记在图中。因为这些重复的信号出现,我们必须有一个filter(reconstruction filter)去将这些重复的信号移除并且只留下在原始信号的频谱(表示为baseband的频率)。一个显然的办法就是在频域中使用一个box function,因为一个box function暗示着使用1乘上一定范围的值而其他所有的值乘以0.所以如果我们使用一个宽带为B的box
function,我们能够移除所有的重复信号而完整地保留下原始信号。下图说明了它大概是如何工作的:



A reconstruction filter is used to isolate the original copy of a signal’s spectrum. Image from Wikipedia

What’s important to keep in mind is that we typically need to apply our reconstruction filter in the spatial domain, and not in the frequency domain. This means that we need to use the spatial domain equivalent
of a box function in frequency space, and it turns out that this is the previously-mentioned sinc function. By now it should make sense why the sinc function is called the ideal reconstruction filter, since it has the ability to leave certain frequency ranges
untouched while completely filtering out other frequencies. For this same reason it is also common to refer to the frequency domain box function as the ideal low-pass filter.

需要重点记住的是,我们一般需要将我们的reconstruction filter应用到时域中而不是频域。意思是我们需要使用对应于频域中的时域box function filter的等价曲线,而事实上就是前面提到的sinc function。到目前为止为什么sinc function被叫做理想的reconstruction filter是有道理的,因为它有能力在不干扰的情况下,在完全过滤其他的频率时,留下某些范围内的频率。同样的原因,它在频域中的box
function被认为是理想的low-pass filter。

Now let’s look at what happens when we don’t sample the signal at an adequate rate. As we saw earlier, the duplicates of a signal will appear at multiples of the sampling frequency. So the higher our sampling
rate the further apart they will be, while the lower our sampling rate the closer they will be. Earlier we learned that the critical sampling rate for a signal is 2B, so let’s look at the plot of a signal that’s been sampled at a rate lower than 2B:

现在来看一下当我们不以正确的比率来采样信号会发生什么。我们前面见到,重复的信号会出现在多个频率位置上(K:看下面的fs,两个绿色的plot在fs和-fs上,再一次主意,X轴是频率,Y轴是X(f))。所以,当我们的采样比率越高他们就会分离得越开,而采样比率越低它们就会越靠近。前面我们知道,采样比率的临界值是2B,所以看一下信号是绿色的图,它以低于2B的比率比采样:



Inadequate sampling rate results in overlap of a signal’s replicas. Image from Wikipedia

Once we dip below the Nyquist rate of the signal, the duplicates begin to overlap in the frequency domain. After this happens it is no longer possible to isolate the original copy of the signal with a sinc
filter, and thus we end up with aliasing. The bottom plot in the above image demonstrates what an alias of the original signal would look like. Since its frequency response is identical to that of the original signal, it is completely indistinguishable.

一旦我们低于信号的Nyquist rate时,在频域上重复的信号就会开始叠加。这发生之后,将不再能够使用sinc filter把原来的信号副本分离出去,最终会出现走样。上图中下面的plot图像展示了一个走样后的原始信号会是怎样的。由于它的频率响应等同于原始的信号,所以它是完全不能够区分出来的。

Key Takeaway Points:

关键点:

Signals can be decomposed into a spectrum of frequencies, with the spectrum being tied to the rate of change of the signal
Signals with a maximum frequency are bandlimited
A signal’s Nyqust rate is equal to two times its maximum frequency, and this is the minimum sampling rate required to perfectly
reconstruct a signal without aliasing
Signal reconstruction can be viewed as the process of removing “replicas” of a signal’s spectrum in the frequency domain
信号能够被整个频谱的频率组成,对应的频谱和信号的变化率紧密连结在一齐
信号有最大的频率的话是bandlimited的
一个信号的Nyqust rate等于他最大频率的梁沛,并且这是完美重建一个信号并且不走样的最低的采样率
信号重建能够看成是在频域中移除信号频谱的重复复本。

Reconstruction Filter Design

Reconstruction Filter 设计

Aliasing that results from undersampling is referred to as prealiasing, since it occurs before reconstruction takes place. However it is also possible for artifacts
to occur due to the reconstruction process itself. For instance, imagine if we used a box function that was too wide when applying a reconstruction filter. The result would look like this:

走样发生在undersampling被成为prealiasing,因为它发生在重建之前。然而它也有可能因为重建过程而出现瑕疵。例如,想象一下,当我们应用一个Reconstruction filter时如果我们使用的box function太宽的话。结果将会像下面这样:



A wide reconstruction filter fails to isolate the original copy of a signal’s spectrum. Image from Wikipedia

With such a reconstruction we would still end up with artifacts in the reconstructed signal, even though it was adequately sampled.

使用这样的Reconstruction filter,最终重建出的信号将仍有瑕疵,尽管它已经被精确采样了。

As we’ve demonstrated, using the wrong size box function in the frequency domain is one way to adversely affect the quality of our reconstructed signal. However we’ve already mentioned that a variety of
functions can be applied as a filter in the spatial domain, and these functions all have a frequency domain counterpart that differs from the box function that we previously discussed. With this in mind, we can reason that the choice in filter will affect
how well we isolate the signal in the frequency domain, and that this will affect how much postaliasing is introduced into the reconstructed signal. Let’s look at some common filtering functions, and compare their plots with the plots of their frequency domain
counterparts:

如我们已经展示的,在频域中使用错误大小的box function是一种会影响到重建信号质量的行为。然而我们已经提到过有很多种不同的函数,在时域中会作为一个filter应用到信号中,并且这些函数在频域中都具有对应的plot并且不同于我们之前讨论过的box function。记住这点,我们可以推断,选择filter将会影响到我们怎样能够在频域中更好地分离信号,并且这将会影响到有多少的postaliasing被引入到重建的信号中。让我们观察一些通常用到的滤波函数,并且比较他们的在时域和频域中的曲线图:



Box function -> Sinc Function



Triangle Function -> (Sinc Function)2



Gaussian Function -> Gaussian Function



(Sinc Function)2 -> Triangle Function



Sinc Function -> Box Function

By looking at the frequency domain counterpart of a spatial domain filter function, we can get a rough idea of how well it’s going to preserve the frequency range we’re interested in and filter out the
extraneous copies of our signal’s spectrum. The field of filter design is primarily concerned with this process of analyzing a filter’s frequency domain spectrum, and using that to evaluate or approximate that
filter’s overall performance. Looking that the spectrums plotted in the above images, we can see that the non-sinc functions will all attenuate the baseband frequencies in some way. For some functions we can also observe that the frequency domain equivalent
has no maximum value above which all frequencies have a value of zero, which means that the frequency domain filter extends infinitely in both directions. This ultimately means that all of the infinite replicas of the signal’s spectrum will bleed into the
reconstructed signal to some extent, which will cause aliasing.

在观察频域对应的时域fliter function,我们可以获得一个粗略的概念,关于它能够多好地保留我们感兴趣的频域范围和过滤出额外的信号频谱副本。滤波器设计的领域主要关心一个滤波器频域频谱的分析过程,并使用这个分析过程来估计滤波器的总体性能。观察上面的频谱的绘图,我们可以看到non-sinc functions将全部都会在baseband频率下以某种形式衰减。对于一些函数,我们也能够观察到时域对应频域中的等价图像没有那种在最大频率出现后所有频率都是0的情况(K:不是bandlimited的??),意思是频域的filter会(在X轴或频率轴上)向两端无限延伸。最终所有无限重复的信号频谱将会以某种形式渗透到重建信号中,这将会引起走样。

One general pattern that we can observe from looking at the plots of the spatial domain filter functions and their frequency domain equivalents is that there is an inverse relationship between rate of change
in one representation and its counterpart. For instance, have a look at the spatial domain box function. This function has a discontinuity at some value, resulting in infinite rate of change. Consequently its frequency domain counterpart is the sinc, which
extends to infinity representing the infinite rate of change inherent in the box function’s discontinuity. By the same token a sinc function in the spatial domain equates to a box function in the frequency domain since the relationship is reciprocal. The Gaussian
function is a special case, where the spatial domain and frequency domain counterparts are the same function. For this reason the Gaussian function represents the exact “midpoint” between smoothly-changing functions and sharply-changing functions in the spatial
and frequency domains. Another important aspect of this relationship is that by making a filtering function “wider” (which can be achieved by dividing the input distance by some value greater than 1), the resulting frequency spectrum for that function will
become more “narrow”. As an example, have a look at the spectrum of a “unit” box function with width of 1.0 compared with the spectrum of a box function with width of 4.0

普通情况下,我们能够从查看时域filter functions的绘图和它们频域的相应绘图观察到一个plot representation和它的对应物之间是有相反关系的。例如,观察box function的时域。这个函数在某个值上是不连续的,结果为采样值的特变(K:1到0的变化)。由于频域对应曲线是sinc,它会无限延展以表示box function内在的不连续的特变。同样地,时域sinc function等于频域的box
function,原因是他们的关系是倒置的。高斯函数是一个特殊的例子,时域和频域都是相同的函数。正是这个原因,在时域和频域中,高斯函数代表平滑变化函数和尖锐变化函数之间的中间点。这个关系的另一个重要部分是在让一个滤波函数“更宽”(可以通过除以一个大于1的数值来获得),而这个函数的频率频谱将会变得更窄。作为一个例子,观察一个“unit” box function的频谱在宽度为1和4的之间的比较:



Frequency spectrum of a box function with width of 1.0



Frequency spectrum of a box function with width of 4.0

The graphs clearly show that as the filter kernel becomes wider, the magnitude of the lowest frequencies becomes higher. This is really just another manifestation of the behavior we noted earlier regarding
rate of change in the spatial domain and the frequency domain, since “wider” functions will change more slowly over time and thus will have more low frequency components in its frequency spectrum.

这两个图像清晰的显示了滤波器的核心变得更宽,最低频率的振幅将会变得更高。这显示了另外的一种形式,我们前面主要讨论了关于比率在时域和频域中的变化关系,而“更宽”函数将会在时域上变化得更慢,因此将会在频谱中有更多的低频部分。

One difficult aspect of filter design is that we often must not just consider the filter’s frequency domain representation, but we also must consider the effect that its spatial domain representation will
have on the reconstructed signal. In particular, we must be careful with filters that have negative lobes, such as the sinc filter. Such filters can produce an effect known as ringing when applied to sharp discontinuities,
where the reconstructed signal oscillates about the signal being sampled. Take a look at the plot of a square wave being reconstructed with a sinc filter:

一个滤波器设计的难点是我们通常必须不只考虑滤波器的频域变化,也必须观察重建信号时域上的表现。更特殊的情况下,我们必须小心滤波器的负分量,例如sinc filter。当应用到一种尖锐的不连续部分时(含有特变部分),这种滤波器能够产生一种叫做ringing的效果,这表现在重建后的信号轮廓上。观察一下下面这个使用sinc filter重建的方形波的绘图:



Gibbs phenomenon resulting from a square wave being reconstructed with a sinc filter

Key Takeaway Points:

关键点:

Error resulting from inadequate sampling rate is known as prealiasing. Error introduced through poor filtering is known
as postaliasing.
A filter’s ability to limit aliasing can be estimated by observing its frequency domain representation
A filter’s rate of change in the spatial domain is inversely related to its rate of change in the frequency domain
A filter’s spatial domain representation can also have an effect on the quality of the reconstructed signal, with the most notable effect being ringing occurring at
discontinuities.
prealiasing被认为是不精确采样造成的错误。postaliasing被认为是通过引入较差的滤波造成的错误。
一个滤波器的现在走样的能力能够同过观察它的频域表现来估计。
一个滤波器在时域的变化率相对于它在频域的变化率是相反的。
一个滤波器的时域表现也能够对重建后的信号的质量产生影响,而最引人注意的是在不连续点上的ringing现象的发生。

K:ringing现象就在后面的信号处理系列中介绍到。

References

[1]http://en.wikipedia.org/wiki/Signal_processing

[2]http://en.wikipedia.org/wiki/Nyquist-Shannon_sampling_theorem

[3]Pharr, Matt and Humphreys, Greg. Physically Based Rendering – From Theory to Implementation, 2nd Edition.

[4]Akenine-Möller, Tomas, Haines, Eric, and Hoffman, Naty. Real-Time Rendering, 3rd Edition

[5]Glassner, Andrew. Principles of Digital Image Synthesis

Next article in the series:

Applying
Sampling Theory To Real-Time Graphics
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: