零序保持在混合模拟/数字采样数据系统中究竟起什么作用?


14

我承认,我是在口头上问这个问题。我很好奇这会带来什么答案。

如果选择回答这个问题,请确保您对Shannon-Nyquist采样定理有很好的理解。特别是重建。也要注意教科书中的“陷阱”。Dirac delta脉冲函数的工程概念就足够了。您不必担心所有的“分布”问题,作为新生的三角函数的狄拉克脉冲就足够了:

δ(t)=limτ01τrect(tτ)

哪里

rect(t){0if |t|>121if |t|<12

与精度,样本字的位宽以及转换中完成的量化有关的问题与该问题无关。但是从输入到输出的缩放重要。

除非有人提出准确且在教学上有用的答案,否则我将最终写出自己的答案。我什至可以为此悬赏(不妨花一些我的小代表)。

吃吧


您是否有兴趣主要了解别名?
deadude

不。我假设采样定理的所有规则都得到遵守。也就是说,连续时间输入中的内容或能量不会被采样到或更高。现在,请记住“别名”和“图像”之间是有区别的。fs2
罗伯特·布里斯托

据我所知,零阶保持只是数字系统中样本之间的延迟,并且显然会影响一个样本与下一个样本之间的模拟情况
KyranF

@KyranF,不仅如此。
罗伯特·布里斯托

Timo给出的答案中的@ robertbristow-johnson确实看起来比我想象的要复杂得多。祝你好运!
KyranF

Answers:


6

设定

我们考虑一个具有输入信号,为清楚起见,在必要时将的值称为电压。我们的采样周期是,和相应的采样速率是。X Ť ˚F 小号1 / Ťx(t)x(t)Tfs1/T

对于傅立叶变换,我们选择约定 给出傅立叶逆变换 注意,按照这些约定,是拉普拉斯变量。

X(i2πf)=F(x(t))x(t)ei2πftdt,
X 小号= ω = 2 π ˚F
x(t)=F1(X(i2πf))X(i2πf)ei2πftdf.
Xs=iω=i2πf

理想的采样和重建

让我们从理想采样开始:根据Nyquist-Shannon采样定理,给定一个信号,其带宽限制为, 则可以从样本完美地重构原始信号,其中。换句话说,给定信号带宽的条件(称为奈奎斯特准则),只要知道等距离散时间点的瞬时值就足够了。f < 1x(t)X2π˚F=0f<12fs X[Ñ]XÑŤÑŽ

X(i2πf)=0,when|f|12fs,
x[n]x(nT)nZ

采样定理还给出了进行重构的明确方法。让我们以一种对以下内容有帮助的方式证明这一点:让我们通过步长的信号Riemann和估算信号的傅立叶变换: 其中。让我们将其重写为整数,以量化我们所犯的错误: X Ť X 2 π ˚F &Sigma; ñ = - X Ñ Δ ë - 2 π ˚F Ñ Δ Δ Δ = Ť &Sigma; ñ = - X ñ Ť ë -X(i2πf)x(t)Ť

X(i2πf)n=x(nΔŤË-一世2πFñΔŤΔŤ
ΔŤ=Ť X&Sigma;ñ = - Ťδ-ñŤ&Sigma;ñ = - δ˚F-ķ/Ť
ñ=-XñŤË-一世2πFñŤŤ=-ñ=-XŤË-一世2πFŤŤδŤ-ñŤdŤ=X一世2πFFŤñ=-δŤ-ñŤ(1)=ķ=-XF-ķ/Ť
,其中我们使用了与采样函数乘积的卷积定理,采样函数的傅里叶变换为的事实,并且对delta函数进行了积分。XŤ ñ=-ŤδŤ-ñŤn=δ(fk/T)

请注意,左侧恰好是,其中是相应采样信号的离散时间傅立叶变换,其中是无量纲的离散时间频率。X 1 / Ť2 π ˚F Ť X [ Ñ ] X Ñ Ť ˚F ŤTX1/T(i2πfT)X1/T(i2πfT)x[n]x(nT)fT

在这里,我们看到了Nyquist准则背后的根本原因:正是要保证总和的项不重叠。使用奈奎斯特准则,上述总和减少为从间隔到整个实线的频谱的周期性扩展。[fs/2,fs/2]

由于的DTFT在间隔与原始信号相同的傅立叶变换,因此我们可以将其与矩形函数并恢复原始信号。通过卷积定理,这等于使狄拉克梳子与矩形函数的傅立叶变换卷积,在我们的惯例中为 其中归一化的sinc函数 [ - f s / 2 f s / 2 ] r e c tf / f sFr e c tf / f s= 1 / T s i n ct / T š ñ çX π(1)[fs/2,fs/2]rect(f/fs)

F(rect(f/fs))=1/Tsinc(t/T),
X = &Sigma; ñ = - X [ Ñ ] š Ñ Ç/ Ť - Ñ
sinc(x)sin(πx)πx.
然后,卷积只需用转移到增量位置的Sinc函数简单地替换Dirac梳中的每个Dirac增量,即可得出 这是Whittaker-Shannon插值公式
(2)x(t)=n=x[n]sinc(t/Tn).

非理想采样

为了将上述理论转化为现实世界,最困难的部分是保证带宽限制,这必须在采样之前完成。出于此答案的目的,我们假定已完成此操作。然后剩下的任务是对信号的瞬时值进行采样。由于实际的ADC将需要有限的时间来形成对样本的逼近,因此通常的实现方式是将信号的值存储到一个采样保持电路,从中形成数字逼近。

即使这非常类似于零阶保持,它也是一个不同的过程:从采样保持所获得的值的确确实是信号的瞬时值,直到近似等于信号保持恒定为止。保持采样值的电容器充电所需的持续时间。这通常可以通过现实世界的系统很好地实现。

因此,我们可以说,现实世界中的ADC忽略了带宽限制的问题,是理想采样情况的一个很好的近似值,特别是来自采样保持的“阶梯”不会引起采样误差。自行取样

非理想的重建

为了进行重建,目的是找到一种电子电路,该电路可以实现出现的总和。由于Sinc的时间范围是无限的,因此很明显这是无法准确实现的。此外,形成这样的信号和甚至达到合理的近似值将需要多个子电路,并且很快变得非常复杂。因此,通常使用更简单的近似方法:在每个采样时刻,输出与采样值相对应的电压,并保持恒定,直到下一个采样时刻为止(尽管有关替代方法的示例,请参见Delta-sigma调制)。这是零阶保持,对应于用矩形函数替换我们上面使用的sinc 1 / Ť ř ë Ç / Ť - 1 / 2 1 / Ť ř ë Ç / Ť - 1 / 2 * &Sigma; ñ = - Ť X [ Ñ ] δ - ñ Ť 1 / Ť Ť(2)1/Trect(t/T1/2)。评估卷积 使用delta函数的定义属性,我们看到这确实导致了经典的连续时间阶梯波形。的因子进入取消在引入。从脉冲响应的单位是1 /次这一事实也清楚需要这种因素。

(1/Trect(t/T1/2))(n=Tx[n]δ(tnT)),
1/TT(1)

的偏移仅仅是为了保证因果关系。与使用相比,这仅相当于将输出偏移1/2个样本(这可能会对实时系统或需要与外部事件进行非常精确的同步产生影响),我们将在后面忽略。1 / Ť ř ë Ç 1 / Ť 1/2T1/Trect(1/T)

与,我们在频域中替换了矩形函数,该函数使基带完全不受影响,并使用函数的傅立叶变换去除了频谱的所有更高频率的副本,即图像。。这当然是 1 / Ť ř ë Ç / Ť š Ñ Ç˚F / ˚F 小号(1)1/Trect(t/T)

sinc(f/fs).

请注意,逻辑与理想情况有些相反:我们定义了我们的目标,即在频域中删除图像,并在时域中得出结果。在这里,我们定义了如何在时域中进行重构(因为这就是我们所知道的方法),并得出了在频域中的后果。

因此,零阶保持的结果是,代替频域中的矩形窗口,我们最终将sinc作为窗口函数。因此:

  • 频率响应不再受带宽限制。而是衰减为,较高的频率是原始信号的图像1/f
  • 在基带中,响应已经大大衰减,在达到约-4 dB1/2fs

总体而言,零阶保持用于近似出现在Whittaker-Shannon插值公式中的时域Sinc函数。采样时,外观相似的采样保持是解决信号瞬时值估计问题的技术解决方案,并且本身不会产生任何误差。

请注意,在重建过程中也不会丢失任何信息,因为我们总是可以在初始零阶保持之后滤除高频图像。增益损耗也可以在DAC之前或之后通过反Sinc滤波器进行补偿。因此,从更实际的角度来看,零阶保持可用于构建理想重构的初始可实现近似值,然后在必要时可以进一步加以改进。


有趣的蒂莫。您遇到了维基百科政治的后果。查看有关采样定理的Wikipedia文章的较旧版本。而不是隐藏在泊松求和公式的后面,它只是显示了采样如何生成图像以及明确地恢复原始连续时间信号所需的条件。您会看到为什么采样函数中存在 因子。T
罗伯特·布里斯托

有趣的是,在我看来,旧版的Wikipedia文章实际上更清晰。该计算几乎与我上面写的完全一样,只是它提供了更多详细信息。
Timo 2015年

无论如何,我不太确定为什么需要这样做,以了解为什么需要因子:我认为答案中写的是满足的充分条件(从技术上讲,是一致性条件,但是我们已经假设重建是可能的)。当然,现在理解永远是主观的。例如,在这里可以认为是因数出现的更深层次的原因,即当取极限时,本质上成为积分度量。T T T d t T 0TTTTdtT0
2015年

我想您指的是为什么en.wikipedia.org/w/…中 Dirac梳子中1 / T的出现是复指数的总和?当然,这是一种表达方式,与作为量度的作用直接相关。T
2015年

1
我忍不住想您应该添加您要的答案。评论不用于扩展讨论。
大卫

4

零阶保持具有逼近采样定理中出现的增量和函数的作用。sinc

为了清楚起见,我考虑带有电压信号的ADC / DAC系统。但是,以下所有内容都适用于任何具有适当单位更改的采样系统。我还假设输入信号已经被神奇地限制为满足奈奎斯特标准。

从采样开始:理想情况下,应该在一个瞬间对输入信号的值进行采样。由于实际ADC需要有限的时间来形成其近似值,因此瞬时电压可以通过采样保持来近似(瞬时可以通过用于给电容器充电的开关时间来近似)。因此,从本质上讲,保持将将三角函数应用于信号的问题转换为测量恒定电压的问题。

在此请注意,输入信号乘以脉冲序列或在同一时刻施加零阶保持之间的差异仅是解释的问题,因为ADC仍将仅存储保持的瞬时电压。一个可以从另一个重建。出于这个答案的目的,我将采用这样一种解释,即采样信号是形式为的连续时间信号。 其中是ADC / DAC的参考电压,是位数,是通常表示为整数的样本,并且V- [RÈ˚FÑXķΔXķ

x(t)=ΔtVref2nkxkδ(tkΔt),
VrefnxkΔt是采样周期。这种有点非常规的解释的优点是,我一直都在考虑连续时间信号,此处的采样仅表示用数字表示它,这实际上是通常意义上的样本。xk

在这种解释中,基带中信号的频谱与原始信号的频谱完全相同,并且脉冲序列的有效卷积具有复制该信号的作用,例如使频谱成为周期性。复制品称为光谱图像。例如,可以通过考虑持续时间为的1伏脉冲的DC偏移量来看出归一化因子的必要性:定义为的傅里叶变换分量的DC偏移量为 为了从我们的采样版本中获得相同的结果,我们必须确实包括。* 的因数。Δ ˚F = 0 X0 = &Integral; Δ 0 1 V d= 1 V Δ Δ ŤΔtΔtf=0

x^(0)=0Δt1Vdt=1VΔt.
Δt

然后,理想的重构意味着构造一个具有与该信号相同的基带频谱的电信号,并且该频率范围之外的频率上没有任何分量。这与使用适当的函数对脉冲序列进行卷积相同。以电子方式进行这项工作颇具挑战性,因此通常由矩形函数AKA零阶保持近似。本质上,在每个增量函数中,在采样周期的整个过程中都将保留采样值。sincsinc

为了查看这对重构信号有什么影响,我观察到保持完全等于用矩形函数卷积脉冲序列。 通过要求正确再现恒定电压来定义此矩形函数的归一化,换句话说,如果在采样时测量了电压,则在重建时输出相同的电压。

rectΔt(t)=1Δtrect(tΔt).
V1

在频域中,这等于将频率响应与矩形函数的傅立叶变换相乘,即 注意,DC的增益为。在高频率下,像一样衰减,因此会衰减频谱图像。

rect^Δt(f)=sinc(πΔtf).
1sinc1/f

最后,由零阶保持产生的函数充当信号上的低通滤波器。请注意,在采样阶段不会丢失任何信息(假定为奈奎斯特准则),并且在原理上,重建时也不会丢失任何信息:在基带中的滤波可以通过逆滤波器进行补偿(并且确实确实可以完成此操作,请参见例如https://www.maximintegrated.com/en/app-notes/index.mvp/id/3853)。的适度衰减通常需要某种形式的滤波以进一步衰减图像。sincsinc6dB/octavesinc

还要注意,可以物理再现分析中使用的脉冲序列的虚构脉冲发生器将在重建图像时输出无限量的能量。这也会引起一些毛病,例如,对输出进行重新采样的ADC将看不到任何东西,除非它与原始系统完全同步(它大部分将在脉冲之间采样)。这清楚地表明,即使我们不能精确限制输出的带宽,在将信号转换为物理表示之前,总需要一些近似的带宽限制来调节信号的总能量。

总结一下:

  • 在两个方向上,零阶保持都可充当增量函数的近似值,或者是带限制形式的函数。sinc
  • 从频域的角度看,它是去除图像的砖墙滤波器的近似值,因此可以调节理想脉冲序列中存在的无限量的能量。

*从尺寸分析中也可以看出:电压信号的傅立叶变换的单位为而delta函数的单位为,这将取消来自转换积分的时间单位。Vs=VHž1个/s


计时器允许我允许的时候,蒂莫,我会为此悬赏。我喜欢一些东西:例如,直流增益= 1,与等式一致。1你的格言引用,但方式太多的教科书搞砸了与增益,他们不知道该怎么做。似乎您已经了解到ZOH与ADC输入端的任何可能的S / H无关。那很好。我仍将等待更严格的答案。不用担心。我假设对于ADC和DAC都是相同的。TVref
罗伯特·布里斯托

@ robertbristow-johnson:谢谢您的客气!您能在更严格的方向上指明一点吗?更多细节,更多数学证明风格的答案或完全不同的东西?
蒂莫

我猜想用干净一致的数学符号进行数学处理。我建议与奥本海姆和威尔斯基保持一致。 ,因此Laplace和Fourier变换具有一致且兼容的符号。讨论采样定理在说什么,以及它在现实中有何不同以及ZOH在其中的作用。
T1fs
x[n]x(nT)
F{x(t)}=X(j2πf)+x(t)ej2πft dt
罗伯特·布里斯托

好的,让我实际尝试编写另一个答案,因为编辑此答案将表示法更改为您喜欢的方式等可能会造成混乱。我会首先解决一个小错误,因为它困扰着我……
Timo

我有点困惑,绘画缓慢,没有按赏金图标来授予你赏金。根据规则:如果您未在7天内(加上宽限期)授予赏金,则在赏金开始后创建的投票最高的答案(最低分数为2)将获得一半的赏金。如果两个或多个合格答案的分数相同(即,它们的分数并列),则最早的答案将被授予赏金。如果没有满足这些条件的答案,则赏金不会授予任何人。-根据这些规则,您应该在一周内拿到它。
罗伯特·布里斯托·约翰逊

3

X(j2πf)=F{x(t)}+x(t) ej2πft dt

x(t)=F1{X(j2πf)}=+X(j2πf) ej2πft df

rect(u){0if |u|>121if |u|<12

sinc(v){1if v=0sin(πv)πvif v0

定义采样频率fs1TT

F{rect(tT)}=T sinc(fT)=1fs sinc(ffs)

狄拉克梳子(又称“采样功能”,又称“ Sha函数”)

IIIT(t)n=+δ(tnT)

T

IIIT(t)=k=+1Tej2πkfst

采样的连续时间信号

用狄拉克梳理想地采样的信号

xs(t)=x(t)(TIIIT(t))=x(t)(Tn=+δ(tnT))=T n=+x(t) δ(tnT)=T n=+x(nT) δ(tnT)=T n=+x[n] δ(tnT)

x[n]x(nT)

xs(t)x[n]Tx(t)x[n]xnxs(t)=0nT<t<(n+1)Tx[n]n

x[n]ZTx[n]Tx[n]T

xs(t)

Xs(j2πf)F{xs(t)}=F{x(t)(TIIIT(t))}=F{x(t)(Tk=+1Tej2πkfst)}=F{k=+x(t) ej2πkfst}=k=+F{x(t) ej2πkfst}=k=+X(j2π(fkfs))

TIIIT(t)xs(t)T

  1. Txs(t)x(t)
  2. TT
  3. T此处会导致零阶保持(ZOH)的净传递函数和净频率响应出现类似的缩放误差。 我见过的所有有关数字(和混合)控制系统的教科书都犯了这个错误,这是一个严重的教学错误。

x[n]xs(t)

XDTFT(ω)Z{x[n]}|z=ejω=XZ(ejω)=n=+x[n] ejωn

可以证明

XDTFT(ω)=XZ(ejω)=1TXs(j2πf)|f=ω2πT


The above math is true whether x(t) is "properly sampled" or not. x(t) is "properly sampled" if x(t) can be fully recovered from the samples x[n] and knowledge of the sampling rate or sampling period. The Sampling Theorem tells us what is necessary to recover or reconstruct x(t) from x[n] and T.

If x(t) is bandlimited to some bandlimit B, that means

X(j2πf)=0for all|f|>B

bandlimited spectrum

Consider the spectrum of the sampled signal made up of shifted images of the original:

Xs(j2πf)=k=+X(j2π(fkfs))

The original spectrum X(j2πf) can be recovered from the sampled spectrum Xs(j2πf) if none of the shifted images, X(j2π(fkfs)), overlap their adjacent neighbors. This means that the right edge of the k-th image (which is X(j2π(fkfs))) must be entirely to the left of the left edge of the (k+1)-th image (which is X(j2π(f(k+1)fs))). Restated mathematically,

kfs+B<(k+1)fsB

which is equivalent to

fs>2B

If we sample at a sampling rate that exceeds twice the bandwidth, none of the images overlap, the original spectrum, X(j2πf), which is the image where k=0 can be extracted from Xs(j2πf) with a brickwall low-pass filter that keeps the original image (where k=0) unscaled and discards all of the other images. That means it multiplies the original image by 1 and multiplies all of the other images by 0.

X(j2πf)=rect(ffs)Xs(j2πf)=H(j2πf) Xs(j2πf)

reconstruction filter

The reconstruction filter is

H(j2πf)=rect(ffs)

and has acausal impulse response:

h(t)=F1{H(j2πf)}=fssinc(fst)

This filtering operation, expressed as multiplication in the frequency domain is equivalent to convolution in the time domain:

x(t)=h(t)xs(t)=h(t)T n=+x[n] δ(tnT)=T n=+x[n] (h(t)δ(tnT))=T n=+x[n] h(tnT))=T n=+x[n] (fssinc(fs(tnT)))=n=+x[n] sinc(fs(tnT))=n=+x[n] sinc(tnTT)

That spells out explicitly how the original x(t) is reconstructed from the samples x[n] and knowledge of the sampling rate or sampling period.


So what is output from a practical Digital-to-Analog Converter (DAC) is neither

n=+x[n] sinc(tnTT)

which needs no additional treatment to recover x(t), nor

xs(t)=n=+x[n] Tδ(tnT)

which, with an ideal brickwall LPF recovers x(t) by isolating and retaining the baseband image and discarding all of the other images.

DAC output

What comes out of a conventional DAC, if there is no processing or scaling done to the digitized signal, is the value x[n] held at a constant value until the next sample is to be output. This results in a piecewise-constant function:

xDAC(t)=n=+x[n] rect(tnTT2T)

Note the delay of 12 sample period applied to the rect() function. This makes it causal. It means simply that

xDAC(t)=x[n]=x(nT)whennTt<(n+1)T

Stated differently

xDAC(t)=x[n]=x(nT)forn=floor(tT)

where floor(u)=u is the floor function, defined to be the largest integer not exceeding u.

This DAC output is directly modeled as a linear time-invariant system (LTI) or filter that accepts the ideally sampled signal xs(t) and for each impulse in the ideally sampled signal, outputs this impulse response:

hZOH(t)=1Trect(tT2T)

Plugging in to check this...

xDAC(t)=hZOH(t)xs(t)=hZOH(t)T n=+x[n] δ(tnT)=T n=+x[n] (hZOH(t)δ(tnT))=T n=+x[n] hZOH(tnT))=T n=+x[n] 1Trect(tnTT2T)=n=+x[n] rect(tnTT2T)

The DAC output xDAC(t), as the output of an LTI system with impulse response hZOH(t) agrees with the piecewise constant construction above. And the input to this LTI system is the sampled signal xs(t) judiciously scaled so that the baseband image of xs(t) is exactly the same as the spectrum of the original signal being sampled x(t). That is

X(j2πf)=Xs(j2πf)forfs2<f<+fs2

The original signal spectrum is the same as the sampled spectrum, but with all images, that had appeared due to sampling, discarded.

The transfer function of this LTI system, which we call the Zero-order hold (ZOH), is the Laplace Transform of the impulse response:

HZOH(s)=L{hZOH(t)}+hZOH(t) est dt=+1Trect(tT2T) est dt=0T1T est dt=1T1sest|0T=1esTsT

The frequency response is obtained by substituting j2πfs

HZOH(j2πf)=1ej2πfTj2πfT=ejπfTejπfTejπfTj2πfT=ejπfTsin(πfT)πfT=ejπfTsinc(fT)=ejπfTsinc(ffs)

This indicates a linear phase filter with constant delay of one-half sample period, T2, and with gain that decreases as frequency f increases. This is a mild low-pass filter effect. At DC, f=0, the gain is 0 dB and at Nyquist, f=fs2 the gain is -3.9224 dB. So the baseband image has some of the high frequency components reduced a little.

As with the sampled signal xs(t), there are images in sampled signal xDAC(t) at integer multiples of the sampling frequency, but those images are significantly reduced in amplitude (compared to the baseband image) because |HZOH(j2πf)| passes through zero when f=kfs for integer k that is not 0, which is right in the middle of those images.

Concluding:

  1. The Zero-order hold (ZOH) is a linear time-invariant model of the signal reconstruction done by a practical Digital-to-Analog converter (DAC) that holds the output constant at the sample value, x[n], until updated by the next sample x[n+1].

  2. Contrary to the common misconception, the ZOH has nothing to do with the sample-and-hold circuit (S/H) one might find preceding an Analog-to-Digital converter (ADC). As long as the DAC holds the output to a constant value over each sampling period, it doesn't matter if the ADC has a S/H or not, the ZOH effect remains. If the DAC outputs something other than the piecewise-constant output (such as a sequence of narrow pulses intended to approximate dirac impulses) depicted above as xDAC(t), then the ZOH effect is not present (something else is, instead) whether there is a S/H circuit preceding the ADC or not.

  3. The net transfer function of the ZOH is

    HZOH(s)=1esTsT
    and the net frequency response of the ZOH is
    HZOH(j2πf)=ejπfTsinc(fT)
    Many textbooks leave out the T factor in the denominator of the transfer function and that is a mistake.

  4. The ZOH reduces the images of the sampled signal xs(t) significantly, but does not eliminate them. To eliminate the images, one needs a good low-pass filter as before. Brickwall LPFs are an idealization. A practical LPF may also attenuate the baseband image (that we want to keep) at high frequencies, and that attenuation must be accounted for as with the attenuation that results from the ZOH (which is less than 3.9224 dB attenuation). The ZOH also delays the signal by one-half sample period, which may have to be taken in consideration (along with the delay of the anti-imaging LPF), particularly if the ZOH is in a feedback loop.


我承认您的答案比我的答案更干净,更彻底。我仍然想知道,最大的启示是什么?也许您想强调零阶保持作为DAC输出的模型
Timo'1

您的答案有一些错误。例如,它在频率响应中没有显示1/2采样延迟。很抱歉,我们的赏金(这是我的,现在应该是您的)所发生的事情掉进了厕所。
罗伯特·布里斯托

Well, I do mention it (in the longer one), although I do then brush it under the carpet, which I think I did because of mostly thinking about DSP in terms of audio, where a 1/2 sample delay is insignificant (unless theres another path which introduces an undelayed copy). Basically I just didn't want to carry the factor of eiπfT all the way to the end, so that's a part of what I'm saying you're more thorough.
Timo

@Timo, now you got twice the rep as me. when are you gonna post a bounty that i can take a stab at?? :-)
robert bristow-johnson

Fair enough, I should try to think of something :D
Timo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.