Wolfram 신호 처리 | 시도해 볼 것들

모든 코드는 클릭 한 다음
+
를 눌러 편집하거나 실행할 수 있습니다.
신호 처리 및 분석 포괄적인 신호 처리 기능은 강력한 미적분, 통계, 기계 학습 기능에 견고하게 통합되어 공학, 금융학, 의학 등의 학생 및 전문가에게 최적의 기능을 제공합니다.

저역통과 IIR 버터워스 필터

샘플링 주기
T=1
을 가정하고, 차수
n=3
인 무한 임펄스 응답 (IIR) 필터의 아날로그 버터워스 프로토타입을 생성하되, 컷오프 주파수는
ω
c
=π/6
로 설정합니다:
실행
In[]:=
T=1;
ω
c
=
π
6
;n=3;​​
Ω
c
=
2.
T
Tan
ω
c
2
;​​tf=ButterworthFilterModel[{n,
Ω
c
},s]//TransferFunctionExpand//Chop
빌리니어 변환 (bilinear transformation)을 사용하여 해당하는 디지털 필터를 생성합니다:
실행
In[]:=
dtf=ToDiscreteTimeModel[tf,T,z]//Chop
필터의 보드 플롯을 시각화합니다:
실행
In[]:=
BodePlotdtf,{0,π},


IIR 필터를 사용한 데이터 필터링

노이즈가 추가된 사인파 신호를 생성합니다:
실행
In[]:=
sig=TableSin
3.π
128
n,{n,0,127}+RandomReal[{-0.25,0.25},128];
IIR 버터워스 필터를 정의합니다:
실행
In[]:=
dtf=
0.153903
3
(1.+z)
-4.70766+19.0258z-26.6767
2
z
+13.5898
3
z
1
;
노이즈가 추가된 신호를 필터링합니다:
실행
In[]:=
res=RecurrenceFilter[dtf,sig,Padding->None];​​ListPlot[{sig,res}]

윈도우 방법을 사용한 저역통과 FIR 필터

컷오프 주파수
ω
c
=π/6
인 길이
L=17
인 유한 임펄스 응답 (FIR) 필터를 성생합니다:
실행
In[]:=
ω
c
=
π
6
;L=17;​​h=LeastSquaresFilterKernel[{"Lowpass",
ω
c
},L]
단위 샘플 응답에 Hann 창을 적용합니다:
실행
In[]:=
w=Array[HannWindow,L,{-0.5,0.5}];​​fir=wh
생성된 필터의 주파수 응답을 나타냅니다:
실행
In[]:=
PlotEvaluate[20Log10[Abs[ListFourierSequenceTransform[fir,ω]]]],{ω,0,π},


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}];
ListConvolve
를 사용하여 신호를 필터링합니다:
실행
In[]:=
res=ListConvolve[fir,sig,9];​​ListPlot[{sig,res}]
LowpassFilter
함수를 사용합니다:
실행
In[]:=
ListPlot[{sig,LowpassFilter[sig,π/6,17,HannWindow,Padding->0]}]

DTMF 신호의 파워 스펙트럼

다이얼 톤 숫자 2에 해당하는 이중 톤 다중 주파수 (DTMF) 정규화 주파수 쌍 (라디안/샘플 단위)을 정의합니다:
실행
In[]:=
{fp,fs}={697,1336};​​{wp,ws}=
2π
8000.
fp,
2π
8000.
fs
약 200밀리초 동안 지속되는 이중 톤 신호를 생성합니다:
실행
In[]:=
dtmf=Table[Sin[wpn]+Sin[wsn],{n,0,1799}]+RandomReal[{-0.25,0.25},1800];​​audio=AudioPad[Audio[dtmf,SampleRate8000],{0.02,0.02}]
파워 스펙트럼을 표시합니다:
실행
In[]:=
Periodogramaudio,

웰치의 방법은 평활화되고 겹쳐진 구간의 파워 스펙트럼의 평균을 냅니다:
실행
In[]:=
Periodogramaudio,600,300,BlackmanWindow,


스펙트로그램을 사용한 신호 분석

다이얼 톤 숫자 9와 1에 해당하는 이중 톤 다중 주파수 (DTMF) 정규화 주파수 쌍 (라디안/샘플 단위)을 정의합니다:
실행
In[]:=
freqs=
2π
8000.
#[[1]],
2π
8000.
#[[2]]&/@{{852,1447},{697,1209}}
이중 톤 시퀀스에 대한 오디오 클립을 생성합니다:
실행
In[]:=
dtmf=(Table[Sin[#[[1]]n]+Sin[#[[2]]n],{n,0,1799}]+RandomReal[{-0.25,0.25},1800]&)/@freqs;​​audio=AudioJoin[AudioPad[Audio[#,SampleRate8000],{0.01,0.01}]&/@dtmf]
스펙트로그램을 봅니다:
실행
In[]:=
Spectrogramaudio,

세그먼트 길이를 늘려 주파수 해상도를 개선합니다:
실행
In[]:=
Spectrogramaudio,512,

세그먼트 간 겹침을 늘려 시간 해상도를 개선합니다:
실행
In[]:=
Spectrogramaudio,512,64,


시계열 처리

일일 온도 데이터를 얻습니다. 이 데이터는 샘플링 주기
T=1
일 또는
T=86400
초로, 샘플링 속도
sr=
1
86400
샘플/초를 가집니다:
실행
In[]:=
ts=TimeSeries
Time:
01 Jan 2024
to
06 Aug 2024
Data points: 219
;
주간 평균을 근사하는 컷오프 주파수를 가진 저역통과 필터를 적용하여 데이터를 부드럽게 합니다:
실행
In[]:=
sr=1/86400;​​DateListPlotts,LowpassFilterts,
π
6
sr,15,

또한, 근사적인 월간 평균을 계산하고 시각화합니다:
실행
In[]:=
DateListPlotts,LowpassFilterts,
π
6
sr,15,LowpassFilterts,
π
186
sr,65,
