Wolfram 信号处理 | 应用示例
Wolfram 信号处理 | 应用示例
在代码中点击并按下 ,即可编辑并运行任何代码。
+
信号处理与分析。全面的信号处理功能,与强大的微积分、统计学和机器学习紧密集成,适用于工程、金融、医学等领域的学生和专业人士。
低通 IIR 巴特沃斯滤波器
低通 IIR 巴特沃斯滤波器
创建阶数 n=3 ω c T=1 |
In[]:=
T=1;=;n=3;=Tan;tf=ButterworthFilterModel[{n,},s]//TransferFunctionExpand//Chop
ω
c
π
6
Ω
c
2.
T
ω
c
2
Ω
c
使用双线性变换创建相应的数字滤波器: |
In[]:=
dtf=ToDiscreteTimeModel[tf,T,z]//Chop
可视化滤波器的波特图: |
In[]:=
BodePlotdtf,{0,π},
使用 IIR 滤波器进行数据滤波
使用 IIR 滤波器进行数据滤波
创建含噪声的正弦信号: |
In[]:=
sig=TableSinn,{n,0,127}+RandomReal[{-0.25,0.25},128];
3.π
128
定义 IIR 巴特沃斯滤波器: |
In[]:=
dtf=
;
0.153903 3 (1.+z) -4.70766+19.0258z-26.6767 2 z 3 z |
1
对含噪信号进行滤波: |
In[]:=
res=RecurrenceFilter[dtf,sig,Padding->None];ListPlot[{sig,res}]
使用窗函数方法的低通 FIR 滤波器
使用窗函数方法的低通 FIR 滤波器
创建长度 L=17 ω c |
In[]:=
ω
c
π
6
ω
c
对单位采样响应应用汉恩窗: |
In[]:=
w=Array[HannWindow,L,{-0.5,0.5}];fir=wh
显示所得滤波器的频率响应: |
In[]:=
PlotEvaluate[20Log10[Abs[ListFourierSequenceTransform[fir,ω]]]],{ω,0,π},
使用 FIR 滤波器进行数据滤波
使用 FIR 滤波器进行数据滤波
创建含噪信号: |
In[]:=
sig=Table[SquareWave[n/64],{n,0,127}]+RandomReal[{-0.25,0.25},128];
创建低通 FIR 滤波器: |
In[]:=
fir=LeastSquaresFilterKernel[{"Lowpass",π/6},17]Array[HannWindow,17,{-0.5,0.5}];
使用 |
In[]:=
res=ListConvolve[fir,sig,9];ListPlot[{sig,res}]
等效地,使用 |
In[]:=
ListPlot[{sig,LowpassFilter[sig,π/6,17,HannWindow,Padding->0]}]
DTMF 信号的功率谱
DTMF 信号的功率谱
定义拨号音数字 2 的一对双音多频(DTMF)归一化频率(以弧度/采样为单位): |
In[]:=
{fp,fs}={697,1336};{wp,ws}=fp,fs
2π
8000.
2π
8000.
创建持续时间约 200 毫秒的双音信号: |
In[]:=
dtmf=Table[Sin[wpn]+Sin[wsn],{n,0,1799}]+RandomReal[{-0.25,0.25},1800];audio=AudioPad[Audio[dtmf,SampleRate8000],{0.02,0.02}]
显示功率谱: |
In[]:=
Periodogramaudio,
韦尔奇方法对平滑和重叠分区的功率谱进行平均: |
In[]:=
Periodogramaudio,600,300,BlackmanWindow,
使用频谱图进行信号分析
使用频谱图进行信号分析
定义拨号音数字 9 和 1 的 DTMF 归一化频率对(以弧度/采样为单位): |
In[]:=
freqs=#[[1]],#[[2]]&/@{{852,1447},{697,1209}}
2π
8000.
2π
8000.
为双音序列创建音频片段: |
In[]:=
dtmf=(Table[Sin[#[[1]]n]+Sin[#[[2]]n],{n,0,1799}]+RandomReal[{-0.25,0.25},1800]&)/@freqs;audio=AudioJoin[AudioPad[Audio[#,SampleRate8000],{0.01,0.01}]&/@dtmf]
查看频谱图: |
In[]:=
Spectrogramaudio,
通过增加片段长度来提高频率分辨率: |
In[]:=
Spectrogramaudio,512,
此外,通过增加片段之间的重叠度来提高时间分辨率: |
In[]:=
Spectrogramaudio,512,64,
时间序列处理
时间序列处理
获取每日温度数据。数据的采样周期为 T=1 T=86400 sr= 1 86400 |
In[]:=
ts=TimeSeries;
通过应用截止频率近似于周平均值的低通滤波器来平滑数据: |
In[]:=
sr=1/86400;DateListPlotts,LowpassFilterts,sr,15,
π
6
此外,计算并可视化近似月平均值: |
In[]:=
DateListPlotts,LowpassFilterts,sr,15,LowpassFilterts,sr,65,
π
6
π
186