本章介绍Octave中可用的信号处理和快速傅立叶变换函数。使用计算快速傅立叶变换FFTW或FFTPACK库,具体取决于Octave的构建方式。
y =
fft (x)
¶y =
fft (x, n)
¶y =
fft (x, n, dim)
¶计算的离散傅立叶变换x使用快速傅立叶变换(FFT)算法。
FFT是沿着数组的第一个非单例维度计算的。因此,如果x是矩阵,fft(x)
计算的每列的FTx.
如果用两个自变量调用,n应为指定的元素数的整数x或一个emptymatrix来指定应忽略其值。如果n大于计算FFT的维度,则x调整大小并用零填充。否则,如果ni小于计算FFT的维度,则x被截断。
如果用三个自变量调用,dim是一个整数,指定执行FFT时所沿着的矩阵的尺寸。
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)算法。
可选向量参数大小可以用于指定要使用的数组的维度。如果的元素大小小于的相应尺寸A,那么的尺寸A在执行FFT之前进行istuncated。否则,如果的元素大小大于相应的尺寸,则Aisresize并用零填充。
A =
ifftn (B)
¶A =
ifftn (B, size)
¶计算的逆N维离散傅立叶变换B使用快速傅立叶变换(FFT)算法。
可选向量参数大小可以用于指定要使用的数组的维度。如果的元素大小小于的相应尺寸B,那么的尺寸B在执行反向FFT之前进行istunculated。否则,如果的元素大小大于相应的尺寸,则Bisresize并用零填充。
Octave使用FFTW库来执行FFT计算。当Octavestarts启动并初始化FFTW库,它们读取整个系统的文件(在Unix系统上,通常是/etc/fftw/wisdom)其中包含有助于加快FFT计算的信息。这些信息被称为智慧。整个系统的文件允许使用FFTW图书馆。
使用fftw
返回和保存智慧的函数。使用与一起提供的工具FFTW库(fftw智慧
在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
函数可以用来导入智慧。例如
智慧=fftw(“dwisdom”)
将保存Octave使用的现有智慧到字符串中智慧。然后可以将此字符串保存到文件中,并使用拯救
和加载
命令。这种现有的智慧可以通过以下方式输入
fftw(“dwisdom”,智慧)
如果智慧是一根空的绳子,那么所用的智慧就被清除了。
在傅立叶变换的计算过程中,返回了进一步的智慧。这种智慧返回的方式也受到fftw
作用有五种不同的治疗方式:
估计
指定不执行对特定计算的最佳方式的运行时测量,并使用简单的启发式方法来选择(可能是次优)计划。这种方法的优点是在生成计划时几乎没有开销,这适用于将计算一次的傅立叶变换。
测量
在这种情况下,会考虑执行转换的一系列算法,并根据它们的执行时间选择最佳算法。
病人
类似测量
,但考虑了更广泛的算法。
详尽的
喜欢测量
,但是考虑了可用于处理变换的所有可能的算法。
混合的
从于算法的运行时测量可能很昂贵,这是一个折衷方案,其中测量
用于大小不超过8192的转换估计
方法。
默认方法为估计
。可以使用查询当前方法
方法=fftw(“规划师”)
或通过使用设置
fftw(“规划师”,方法)
请注意,重新启动Octave时,经过计算的智慧将丢失。但是,如果将智慧数据保存到如上所述的文件中,则可以重新加载智慧数据。保存的智慧文件不应在不同的平台上使用,因为它们不会有效率,并且失去了计算智慧的意义。
用于计算计划和执行转换的线程数可以通过设置
fftw(“线程”,NTHREADS)
请注意,Octave必须使用多线程编译FFTW支持此函数。默认情况下,当前进程可用的(逻辑)处理器数或3使用(以较小者为准)。
c =
fftconv (x, y)
¶c =
fftconv (x, y, n)
¶使用FFT对两个向量进行卷积运算。
c=fftconv(x, y)
返回长度等于的向量长x长y1.
如果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.
滤器
返回以下线性不变时间微分方程的解:
N MSUM a(k+1)y(N-k)=总和b(k+1
其中N=长度(a)-1,M=长度(b)-1。结果是在的第一个非单体维度上计算的x或以上dim如果提供的话。
该方程的等效形式为:
N My(N)=-SUM c(k+1)y(N-k)+SUM d(k+1
其中c=a/a(1)和d=b/a(1。
如果第四个参数硅被提供时,它被视为系统的初始状态,最终状态返回为sf状态向量是长度等于最长系数向量的长度减1的列向量。如果硅则初始状态向量被设置为全零。
就Z变换而言,y是通过离散时间信号的结果x通过具有以下国家系统函数的系统:
M总和d(k+1)z^(-k)k=0H(z)=--------------------N 1+总和c(k+1
y =
filter2 (b, x)
¶y =
filter2 (b, x, shape)
¶应用二维FIR滤波器b到x.
如果参数形状如果指定了,则返回所需形状的数组。可能的值为:
满的
衬垫x滤波前所有边上都为零。
相同的
未加衬垫的x默认
有效的
修剪x过滤后,不包括边缘效果。
请注意,这只是卷积的一个变体,参数相反b旋转了180度。
详见: 二维卷积.
[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应该考虑到少量的小素数。
如果第四个参数,整体
,则忽略在0和pi之间的频率下评估响应。
频率(b, a, w)
评估向量中特定频率下的响应w。的值w以弧度为单位测量。
[…]=freqz(…,Fs)
假设采样率,返回频率为Hz,而不是弧度Fs。如果您正在评估特定频率下的响应w,这些频率应以Hz而不是弧度为单位。
freqz(…)
绘制的幅度和相位响应h而不是归还它们。
详见: freqz_plot.
(w, h)
¶(w, h, freq_norm)
¶绘制的幅度和相位响应h.
如果可选频率_形式参数是正确的,频率向量w以归一化弧度为单位。如果频率_形式是假的,或者没有给出,那么w以赫兹为单位测量。
详见: 数字滤波器频率响应.
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。
打开…的软件包
将沿着维度工作dim如果dim未指定,则默认为第一个非单例维度。
打开…的软件包
忽略所有非有限输入值(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,更新因子伽玛,和初始值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,
鉴于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(我)用于初始化,即长度序列t+n生成并且x(n1.t+n)返回。如果n省略,n使用=100。
x =
autoreg_matrix (y, k)
¶给定时间序列(向量)y,返回一个在第一列和第一列中包含1的矩阵k的滞后值y在其他列中。
换句话说,对于t> k,1.y(t1.y(t-k)]
是结果的第六行。
所得到的矩阵可以用作自回归中的回归矩阵。
c =
bartlett (m)
¶返回长度为Bartlett(三角形)窗口的滤波器系数m.
关于Bartlett窗口的定义,参见例如a.V.Oppenheim&R.W.Schafer,离散时间信号处理.
c =
blackman (m)
¶c =
blackman (m, "periodic")
¶c =
blackman (m, "symmetric")
¶返回长度为的Blackman窗口的滤波器系数m.
如果可选参数周期性
则返回窗口的周期形式。这相当于窗口的长度m+1,去掉最后一个系数。可选参数对称
相当于不指定第二个参数。
关于Blackman窗口的定义,参见例如a.V.Oppenheim&R.W.Schafer,离散时间信号处理.
y =
detrend (x, p)
¶如果x是向量,去趋势(x, </p>)
去除阶多项式的最佳拟合</p>根据数据x.
如果x是矩阵,去趋势(x, </p>)
对中的每列执行相同操作x.
第二个参数</p>是可选的。如果未指定,则假定值为1。这对应于去除线性趋势。
多项式的阶数也可以作为字符串给出,在这种情况下</p>必须是其中之一常数
(对应于</p>=0
或线性的
(对应于</p>1.
).
详见: 拟合.
[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。时间序列:理论与方法.施普林格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:楼板((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.
如果可选参数周期性
则返回窗口的周期形式。这相当于窗口的长度m+1,去掉最后一个系数。可选参数对称
相当于不指定第二个参数。
关于Hamming窗口的定义,参见例如a.V.Oppenheim&R.W.Schafer,离散时间信号处理.
c =
hanning (m)
¶c =
hanning (m, "periodic")
¶c =
hanning (m, "symmetric")
¶返回长度为Hanning窗口的滤波器系数m.
如果可选参数周期性
则返回窗口的周期形式。这相当于窗口的长度m+1,去掉最后一个系数。可选参数对称
相当于不指定第二个参数。
关于Hanning窗口的定义,参见例如a.V.Oppenheim&R.W.Schafer,离散时间信号处理.
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是复值的,或者范围
指定两面性
,估计了全谱。
窗口权重数据。若窗口为空或未指定,则使用默认的矩形窗口。否则,窗口将应用于信号(x .* 赢
)在计算周期图之前。windowdata必须是长度与相同的向量x.
频率仓的数量。默认值为256,或比的长度大2的次幂x(max(256,2.^ nextpow2(长度(x)))
). 如果非规则采样快速傅里叶变换大于输入的长度,则x将被零填充到的长度非规则采样快速傅里叶变换.
采样率。默认值为1。
光谱范围。单面
从[0:nfft/2+1]计算光谱。两面性
根据[0:nft-1]计算光谱。
可选的第二个输出w是归一化的角频率。对于单侧计算w在[0,pi]范围内,如果非规则采样快速傅里叶变换是偶数并且[0,pi)如果非规则采样快速傅里叶变换很奇怪。类似地,对于双侧计算w在[0,2*pi]或[0,2*pi的范围内),取决于非规则采样快速傅里叶变换.
如果指定了采样频率,Fs,然后输出频率f将在[0,Fs/2] 或者[0,Fs/2) 用于单侧计算。对于双侧计算,范围将是[0,Fs).
当调用时没有输出,周期图立即绘制在当前图形窗口中。
详见: fft.
y =
sinetone (freq, rate, sec, ampl)
¶返回频率的正弦freq长度为秒采样率下的秒数速度和振幅ampl.
参数freq和ampl可以是共同大小的向量。
默认值为速度= 8000, 秒=1,以及ampl= 64.
详见: 正弦波.
sde =
spectral_adf (c)
¶sde =
spectral_adf (c, win)
¶sde =
spectral_adf (c, win, b)
¶返回给定自协方差向量的谱密度估计器c,窗口名称赢,和带宽,b.
窗口名称(例如。,三角形
或长方形
用于搜索名为的函数赢_lw
.
如果赢则使用三角形窗口。
如果b省略,1/sqrt(长度(x))
使用。
详见: spectral-xdf.
sde =
spectral_xdf (x)
¶sde =
spectral_xdf (x, win)
¶sde =
spectral_xdf (x, win, b)
¶返回给定数据向量的谱密度估计器x,窗口名称赢,和带宽,b.
窗口名称(例如。,三角形
或长方形
用于搜索名为赢_sw
.
如果赢则使用三角形窗口。
如果b省略,1/sqrt(长度(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数据点和增量股份有限公司点。
在计算傅立叶变换之前,将应用以下窗口之一:
汉宁
win_type=1
hamming
win_type=2
长方形
win_type=3
窗口名称可以作为字符串传递,也可以通过win_type数字
以下默认值用于未指定的参数:win_size= 80, 股份有限公司= 24, num_coef=64,以及win_type1.
y=stft(x, …)
根据返回傅立叶系数的绝对值num_coef正频率。
[y, c]=stft(x, …)
返回整个STFT矩阵y和一个3元素向量c包含窗口大小、增量和窗口类型,这是合成
作用
详见: 合成.
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 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号