本章介绍Octave中可用的信号处理和快速傅立叶变换函数。使用计算快速傅立叶变换FFTW或FFTPACK库,具体取决于Octave的构建方式。
x =
ifft (y)
¶x =
ifft (y, n)
¶x =
ifft (y, n, dim)
¶计算的离散傅立叶逆变换y使用快速傅立叶变换(FFT)算法。
逆FFT是沿着数组的第一个非奇异维度计算的。因此,如果y是矩阵,ifft (y)
计算每列的逆FFTy.
如果用两个自变量调用,n应为指定的元素数的整数y或一个emptymatrix来指定应忽略其值。如果n大于计算逆FFT的维度,则y调整大小并用零填充。否则,如果ni小于计算逆FFT的维度,则y被截断。
如果用三个自变量调用,dim是一个整数,指定执行逆FFT所沿的矩阵的维数。
B =
fft2 (A)
¶B =
fft2 (A, m, n)
¶计算的二维离散傅立叶变换A使用快速傅立叶变换(FFT)算法。
可选参数m和n可以用于指定的行数和列数A使用。如果其中任何一个大于的大小A, A调整大小并用零填充。
如果A是一个多维矩阵,每个二维子矩阵A单独处理。
A =
ifft2 (B)
¶A =
ifft2 (B, m, n)
¶计算的二维离散傅立叶逆变换B使用快速傅立叶变换(FFT)算法。
可选参数m和n可以用于指定的行数和列数B使用。如果其中任何一个大于的大小B, B调整大小并用零填充。
如果B是一个多维矩阵,每个二维子矩阵B单独处理。
B =
fftn (A)
¶B =
fftn (A, size)
¶计算的N维离散傅立叶变换A使用快速傅立叶变换(FFT)算法。
可选向量参数size可以用于指定要使用的数组的维度。如果的元素size小于的相应尺寸A,那么的尺寸A在执行FFT之前进行istuncated。否则,如果的元素size大于相应的尺寸,则Aisresize并用零填充。
A =
ifftn (B)
¶A =
ifftn (B, size)
¶计算的逆N维离散傅立叶变换B使用快速傅立叶变换(FFT)算法。
可选向量参数size可以用于指定要使用的数组的维度。如果的元素size小于的相应尺寸B,那么的尺寸B在执行反向FFT之前进行istunculated。否则,如果的元素size大于相应的尺寸,则Bisresize并用零填充。
Octave使用FFTW库来执行FFT计算。当Octavestarts启动并初始化FFTW库,它们读取整个系统的文件(在Unix系统上,通常是/etc/fftw/wisdom)其中包含有助于加快FFT计算的信息。这些信息被称为智慧。整个系统的文件允许使用FFTW依赖库。
使用fftw
返回和保存智慧的函数。使用与一起提供的工具FFTW库(fftw-wisdom
在Unix系统上),您甚至可以将Octave生成的智慧添加到整个系统的智慧文件中。
method =
fftw ("planner")
¶("planner", method)
¶wisdom =
fftw ("dwisdom")
¶("dwisdom", wisdom)
¶nthreads =
fftw ("threads")
¶("threads", nthreads)
¶管理FFTW智慧数据。
智慧数据可以用于显著加速FFT的计算,但在计算中意味着初始成本。当FFTW库被初始化,它们读取整个系统的智慧文件(通常在/etc/fftw/wisdom),允许智慧在应用程序之间共享,而不是Octave。或者fftw
函数可以用来导入智慧。例如
wisdom = fftw ("dwisdom")
将保存Octave使用的现有智慧到字符串中wisdom。然后可以将此字符串保存到文件中,并使用save
和load
命令。这种现有的智慧可以通过以下方式输入
fftw ("dwisdom", wisdom)
如果wisdom是一根空的绳子,那么所用的智慧就被清除了。
在傅立叶变换的计算过程中,返回了进一步的智慧。这种智慧返回的方式也受到fftw
作用有五种不同的治疗方式:
"estimate"
指定不执行对特定计算的最佳方式的运行时测量,并使用简单的启发式方法来选择(可能是次优)计划。这种方法的优点是在生成计划时几乎没有开销,这适用于将计算一次的傅立叶变换。
"measure"
在这种情况下,会考虑执行转换的一系列算法,并根据它们的执行时间选择最佳算法。
"patient"
类似"measure"
,但考虑了更广泛的算法。
"exhaustive"
喜欢"measure"
,但是考虑了可用于处理变换的所有可能的算法。
"hybrid"
因为算法的运行时测量可能很昂贵,这是一个折衷方案,其中"measure"
用于大小不超过8192的转换"estimate"
方法。
默认方法为"estimate"
。可以使用查询当前方法
method = fftw ("planner")
或通过使用设置
fftw ("planner", method)
请注意,重新启动Octave时,经过计算的智慧将丢失。但是,如果将智慧数据保存到如上所述的文件中,则可以重新加载智慧数据。保存的智慧文件不应在不同的平台上使用,因为它们不会有效率,并且失去了计算智慧的意义。
用于计算计划和执行转换的线程数可以通过设置
fftw ("threads", NTHREADS)
请注意,Octave必须使用多线程编译FFTW支持此函数。默认情况下,当前进程可用的(逻辑)处理器数或3使用(以较小者为准)。
c =
fftconv (x, y)
¶c =
fftconv (x, y, n)
¶使用FFT对两个向量进行卷积运算。
c = fftconv (x, y)
返回长度等于的向量length (x) + length (y) - 1
如果x和y是两个多项式的系数向量,返回值是乘积多项式的有效向量。
计算通过调用函数使用FFTfftfilt
.If可选参数n则使用N点FFT。
y =
fftfilt (b, x)
¶y =
fftfilt (b, x, n)
¶滤器x带有FIR滤波器b使用FFT。
如果x是一个矩阵,过滤矩阵的每一列。
给定可选的第三自变量,n, fftfilt
使用overlap-add方法进行筛选x具有b使用N点FFT。FFT大小必须是2的偶数幂,并且必须大于或等于的长度b。如果指定n如果不符合这些标准,则会自动调整为最接近的值。
y =
filter (b, a, x)
¶[y, sf] =
filter (b, a, x, si)
¶[y, sf] =
filter (b, a, x, [], dim)
¶[y, sf] =
filter (b, a, x, si, dim)
¶对数据应用一维数字滤波器x.
filter
返回以下线性不变时间微分方程的解:
N M SUM a(k+1) y(n-k) = SUM b(k+1) x(n-k) for 1<=n<=length(x) k=0 k=0
其中N=长度(a)-1,M=长度(b)-1。结果是在的第一个非单体维度上计算的x或以上dim如果提供的话。
该方程的等效形式为:
N M y(n) = - SUM c(k+1) y(n-k) + SUM d(k+1) x(n-k) for 1<=n<=length(x) k=1 k=0
其中c=a/a(1)和d=b/a(1。
如果第四个参数si被提供时,它被视为系统的初始状态,最终状态返回为sf状态向量是长度等于最长系数向量的长度减1的列向量。如果si则初始状态向量被设置为全零。
就Z变换而言,y是通过离散时间信号的结果x通过具有以下国家系统函数的系统:
M SUM d(k+1) z^(-k) k=0 H(z) = --------------------- N 1 + SUM c(k+1) z^(-k) k=1
y =
filter2 (b, x)
¶y =
filter2 (b, x, shape)
¶应用二维FIR滤波器b到x.
如果参数shape如果指定了,则返回所需形状的数组。可能的值为:
"full"
衬垫x滤波前所有边上都为零。
"same"
未加衬垫的x默认
"valid"
修剪x过滤后,不包括边缘效果。
请注意,这只是卷积的一个变体,参数相反b旋转了180度。
详见: conv2.
[h, w] =
freqz (b, a, n, "whole")
¶[h, w] =
freqz (b)
¶[h, w] =
freqz (b, a)
¶[h, w] =
freqz (b, a, n)
¶h =
freqz (b, a, w)
¶[h, w] =
freqz (…, Fs)
¶(…)
¶返回复频响应h的有理IIR滤波器,其分子和分母系数为b和a分别地
响应评估在n角频率在0和2*pi之间。
输出值w是频率的向量。
如果a则假定分母为1(这对应于简单的FIR滤波器)。
如果n则假定值为512。对于最快的计算,n应该考虑到少量的小素数。
如果第四个参数,"whole"
,则忽略在0和pi之间的频率下评估响应。
freqz (b, a, w)
评估向量中特定频率下的响应w。的值w以弧度为单位测量。
[…] = freqz (…, Fs)
假设采样率,返回频率为Hz,而不是弧度Fs。如果您正在评估特定频率下的响应w,这些频率应以Hz而不是弧度为单位。
freqz (…)
绘制的幅度和相位响应h而不是归还它们。
详见: freqz_plot.
(w, h)
¶(w, h, freq_norm)
¶绘制的幅度和相位响应h.
如果可选freq_norm参数是正确的,频率向量w以归一化弧度为单位。如果freq_norm是假的,或者没有给出,那么w以赫兹为单位测量。
详见: freqz.
y =
sinc (x)
¶计算sinc函数。
返回值sin(pi*x)/(pi**x)。
b =
unwrap (x)
¶b =
unwrap (x, tol)
¶b =
unwrap (x, tol, dim)
¶通过适当地添加或减去2*pi的倍数来消除弧度相位,以消除大于tol.
tol默认为pi。
unwrap
将沿着维度起作用dim如果dim未指定,则默认为第一个非奇异维度。
unwrap
忽略所有非有限输入值(Inf、NaN、NA)。
[a, b] =
arch_fit (y, x, p, iter, gamma, a0, b0)
¶将ARCH回归模型拟合到时间序列y使用Engle原始ARCH论文中的scoringalgorithm。
型号为
y(t) = b(1) * x(t,1) + ... + b(k) * x(t,k) + e(t), h(t) = a(1) + a(2) * e(t-1)^2 + ... + a(p+1) * e(t-p)^2
这里的e(t)是N(0,h(t)),给定一个时间序列向量y最新t-1和(普通)回归矩阵x高达t。残差方差的回归顺序从p.
如果调用为arch_fit (y, k, p)
带着正的心态k,适合ARCH(k, p)过程,即用t-第行,共行x从给定
[1, y(t-1), ..., y(t-k)]
可选地,可以指定迭代次数iter,更新因子gamma,和初始值a0和b0用于评分算法。
y =
arch_rnd (a, b, t)
¶模拟长度为ARCH的序列t具有AR系数b和CH系数a.
结果y(t)遵循模型
y(t) = b(1) + b(2) * y(t-1) + ... + b(lb) * y(t-lb+1) + e(t),
这里的e(t)鉴于y最新t-1是N(0,h(t))具有
h(t) = a(1) + a(2) * e(t-1)^2 + ... + a(la) * e(t-la+1)^2
[pval, lm] =
arch_test (y, x, p)
¶对于线性回归模型
y = x * b + e
针对CH的替代方案,对无条件异方差的零假设进行拉格朗日乘子(LM)检验(p).
也就是说,模型是
y(t) = b(1) * x(t,1) + ... + b(k) * x(t,k) + e(t),
鉴于y高达t-1和x高达t,e(t) 是N(0,h(t))具有
h(t) = v + a(1) * e(t-1)^2 + ... + a(p) * e(t-p)^2,
而null为a(1)== … == a(p)== 0.
如果第二自变量是标量整数,k,在阶线性自回归模型中执行相同的测试k,即,与
[1, y(t-1), ..., y(t-k)]
作为t-第行,共行x.
在零下,LM近似具有具有p自由度和pval是吗</p>-试验的值(1mus为LM处该分布的CDF)。
如果没有给出输出参数,则</p>-显示值。
x =
arma_rnd (a, b, v, t, n)
¶返回ARMA模型的仿真。
ARMA模型定义如下
x(n) = a(1) * x(n-1) + ... + a(k) * x(n-k) + e(n) + b(1) * e(n-1) + ... + b(l) * e(n-l)
这里的k是向量的长度a, l是向量的长度b和e是具有方差的高斯白噪声v。函数返回一个长度为的向量t.
可选参数n给出了假人的数量x(i)用于初始化,即长度序列t+n生成并且x(n1.t+n)返回。如果n省略,n使用=100。
x =
autoreg_matrix (y, k)
¶给定时间序列(向量)y,返回一个在第一列和第一列中包含1的矩阵k的滞后值y在其他列中。
换句话说,对于t> k,[1, y(t-1), …, y(t-k)]
是结果的第六行。
所得到的矩阵可以用作自回归中的回归矩阵。
c =
bartlett (m)
¶返回长度为Bartlett(三角形)窗口的滤波器系数m.
关于Bartlett窗口的定义,详见例如a.V.Oppenheim&R.W.Schafer,Discrete-Time Signal Processing.
c =
blackman (m)
¶c =
blackman (m, "periodic")
¶c =
blackman (m, "symmetric")
¶返回长度为的Blackman窗口的滤波器系数m.
如果可选参数"periodic"
则返回窗口的周期形式。这相当于窗口的长度m+1,去掉最后一个系数。可选参数"symmetric"
相当于不指定第二个参数。
关于Blackman窗口的定义,详见例如a.V.Oppenheim&R.W.Schafer,Discrete-Time Signal Processing.
y =
detrend (x, p)
¶如果x是向量,detrend (x, p)
去除阶多项式的最佳拟合p根据数据x.
如果x是矩阵,detrend (x, p)
对中的每列执行相同操作x.
第二个参数p是可选的。如果未指定,则假定值为1。这对应于去除线性趋势。
多项式的阶数也可以作为字符串给出,在这种情况下p必须是其中之一"constant"
(对应于p=0
或"linear"
(对应于p=1
).
详见: polyfit.
[d, dd] =
diffpara (x, a, b)
¶返回估计器d对于积分时间序列的差分参数。
来自的频率[2*pi*a/t,2*pi*b/t]用于估计。如果b省略,间隔[2*pi/T,2*pi*a/T]使用。如果两者都有b和a则省略a=0.5*sqrt(T)和b=1.5*sqrt(T)使用,其中T是样本大小。如果x是一个矩阵,估计每列的差分参数。
上述区间中所有频率的估计量在dd.
的值d只是的意思dd.
参考资料:P.J.Brockwell&R.A.Davis。Time Series: Theory and Methods.施普林格1987年。
[newphi, newv] =
durbinlevinson (c, oldphi, oldv)
¶执行Durbin-Levinson算法的一个步骤。
向量c指定自协方差[gamma_0, …, gamma_t]
从滞后0到t, oldphi指定基于的系数c(t-1) 以及oldv指定相应的错误。
如果oldphi和oldv省略了从1到的所有步骤t执行了算法的。
y =
fftshift (x)
¶y =
fftshift (x, dim)
¶执行向量的移位x,用于fft
和ifft
函数,以便将频率0移动到向量或矩阵的中心。
如果x是的向量N元素对应于N时间采样间隔dt然后fft (x))
对应于频率
f = [ -(ceil((N-1)/2):-1:1), 0, (1:floor((N-1)/2)) ] * df
这里的df=1/(N*dt).
如果x是一个矩阵,行和列也是如此。如果x是一个数组,那么沿着每个维度都是一样的。
可选dim自变量可以用来限制排列发生的维度。
详见: ifftshift.
x =
ifftshift (y)
¶x =
ifftshift (y, dim)
¶撤消的操作fftshift
作用
长度均匀x, fftshift
它本身是相反的,但奇怪的长度略有不同。
详见: fftshift.
fd =
fractdiff (x, d)
¶计算分数差(1-L)^d x这里的L表示滞后运算符,并且d大于-1。
c =
hamming (m)
¶c =
hamming (m, "periodic")
¶c =
hamming (m, "symmetric")
¶返回长度为的Hamming窗口的滤波器系数m.
如果可选参数"periodic"
则返回窗口的周期形式。这相当于窗口的长度m+1,去掉最后一个系数。可选参数"symmetric"
相当于不指定第二个参数。
关于Hamming窗口的定义,详见例如a.V.Oppenheim&R.W.Schafer,Discrete-Time Signal Processing.
c =
hanning (m)
¶c =
hanning (m, "periodic")
¶c =
hanning (m, "symmetric")
¶返回长度为Hanning窗口的滤波器系数m.
如果可选参数"periodic"
则返回窗口的周期形式。这相当于窗口的长度m+1,去掉最后一个系数。可选参数"symmetric"
相当于不指定第二个参数。
关于Hanning窗口的定义,详见例如a.V.Oppenheim&R.W.Schafer,Discrete-Time Signal Processing.
H =
hurst (x)
¶样本赫斯特参数的估计x通过重新缩放的范围统计。
如果x是一个矩阵,参数是为每列估计的。
pp =
pchip (x, y)
¶yi =
pchip (x, y, xi)
¶返回点的分段三次Hermite插值多项式(pchip)x和y.
如果使用两个参数调用,则返回分段多项式pp可以与一起使用ppval
以在特定点处多项式求值。
当用第三输入自变量调用时,pchip
在点处多项式求值xi。第三种调用形式等效于ppval (pchip (x, y), xi)
.
变量x必须是长度的严格单调向量(递增或递减)n.
y可以是向量或数组。如果y是一个向量,那么它的长度必须相同n像x如果y是一个大小等于的数组y必须具有形式[s1, s2, …, sk, n]
数组内部被变形为矩阵,其中前导维度从s1 * s2 * … * sk
然后将该矩阵的每一行分别处理。注意,这与完全相反interp1
但已经结束了MATLAB兼容性。
[Pxx, w] =
periodogram (x)
¶[Pxx, w] =
periodogram (x, win)
¶[Pxx, w] =
periodogram (x, win, nfft)
¶[Pxx, f] =
periodogram (x, win, nfft, Fs)
¶[Pxx, f] =
periodogram (…, "range")
¶(…)
¶返回的周期图(功率谱密度)x.
可能的输入包括:
数据向量。如果x是实值的,则估计单边频谱。如果x是复值的,或者range
指定"twosided"
,估计了全谱。
窗口权重数据。若窗口为空或未指定,则使用默认的矩形窗口。否则,窗口将应用于信号(x .* win
)在计算周期图之前。windowdata必须是长度与相同的向量x.
频率仓的数量。默认值为256,或比的长度大2的次幂x(max (256, 2.^nextpow2 (length (x)))
). 如果nfft大于输入的长度,则x将被零填充到的长度nfft.
采样率。默认值为1。
光谱范围。"onesided"
从[0:nfft/2+1]计算光谱。"twosided"
根据[0:nft-1]计算光谱。
可选的第二个输出w是归一化的角频率。对于单侧计算w在[0,pi]范围内,如果nfft是偶数并且[0,pi)如果nfft很奇怪。类似地,对于双侧计算w在[0,2*pi]或[0,2*pi的范围内),取决于nfft.
如果指定了采样频率,Fs,然后输出频率f将在[0,Fs/2] 或者[0,Fs/2) 用于单侧计算。对于双侧计算,范围将是[0,Fs).
当调用时没有输出,周期图立即绘制在当前图形窗口中。
详见: fft.
y =
sinetone (freq, rate, sec, ampl)
¶返回频率的正弦freq长度为sec采样率下的秒数rate和振幅ampl.
参数freq和ampl可以是共同大小的向量。
默认值为rate= 8000, sec=1,以及ampl= 64.
详见: sinewave.
y =
sinewave (m, n, d)
¶返回m-元素向量i-第th个元素从给定sin (2 * pi * (i+d-1) / n)
.
的默认值d为0,为的默认值n是m.
详见: sinetone.
sde =
spectral_adf (c)
¶sde =
spectral_adf (c, win)
¶sde =
spectral_adf (c, win, b)
¶返回给定自协方差向量的谱密度估计器c,窗口名称win,和带宽,b.
窗口名称(例如"triangle"
或"rectangle"
用于搜索名为的函数win_lw
.
如果win则使用三角形窗口。
如果b省略,1 / sqrt (length (x))
使用。
详见: spectral_xdf.
sde =
spectral_xdf (x)
¶sde =
spectral_xdf (x, win)
¶sde =
spectral_xdf (x, win, b)
¶返回给定数据向量的谱密度估计器x,窗口名称win,和带宽,b.
窗口名称(例如"triangle"
或"rectangle"
用于搜索名为win_sw
.
如果win则使用三角形窗口。
如果b省略,1 / sqrt (length (x))
使用。
详见: spectral_adf.
savg =
spencer (x)
¶返回Spencer每列的15点移动平均值x.
y =
stft (x)
¶y =
stft (x, win_size)
¶y =
stft (x, win_size, inc)
¶y =
stft (x, win_size, inc, num_coef)
¶y =
stft (x, win_size, inc, num_coef, win_type)
¶[y, c] =
stft (…)
¶计算向量的短时傅立叶变换x具有num_coef通过应用的窗口win_size数据点和增量inc点。
在计算傅立叶变换之前,将应用以下窗口之一:
"hanning"
win_type=1
"hamming"
win_type=2
"rectangle"
win_type=3
窗口名称可以作为字符串传递,也可以通过win_type数字
以下默认值用于未指定的参数:win_size= 80, inc= 24, num_coef=64,以及win_type1.
y = stft (x, …)
根据返回傅立叶系数的绝对值num_coef正频率。
[y, c] = stft (x, …)
返回整个STFT矩阵y和一个3元素向量c包含窗口大小、增量和窗口类型,这是synthesis
作用
详见: synthesis.
x =
synthesis (y, c)
¶根据信号的短时傅立叶变换计算信号y和a3元素向量c指定窗口大小、增量和窗口类型。
值y和c可以通过导出
[y, c] = stft (x , ...)
详见: stft.
[a, v] =
yulewalker (c)
¶在给定向量的情况下,用Yule-Worker估计拟合AR(p)-模型c自协变量[gamma_0, …, gamma_p]
.
返回AR系数,a,以及白噪声的方差,v.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2