使用快速傅立叶变换重建信号

机器算法验证 傅里叶变换
2022-03-17 20:40:31

我通过添加正弦波和余弦波创建了一个信号R

# number of samples
N <- 1000    

# time period
TT <- 2       

# sampling frequency (number of samples by unit of time)
fs <- N / TT  

# vector of sampling time points
stp <- seq(from=0, to=TT - 1 / fs, by=1 / fs)

# 2 Hz sine wave with peak amplitude 2
sn1 <- 2 * sin(2 * pi * 2 * stp)

# 5 Hz cosine wave with peak amplitude 3
sn2 <- 3 * cos(2 * pi * 5 * stp)

# input signal
sn <- sn1 + sn2

在此处输入图像描述

使用傅里叶变换,我可以看到信号由两个波组成,振幅分别为 2 和 3,频率分别为 2 和 5。

fou <- fft(sn)
N <- length(fou)
fou <- fou[2:((N / 2) + 1)]
freq <- (1:(N / 2)) / TT
ampl <- Mod(fou) / length(fou)
plot(freq, ampl)

在此处输入图像描述

问题:我怎么知道频率为 2 的波是正弦波,而频率为 5 的波是余弦波

1个回答

正弦和余弦是相同的波π/2同相

cos(x)=sin(x+π/2)
. 傅立叶变换为您返回每个频率的复数。这个数字有幅度和角度(相位)。它基本上是一组具有幅度和相位的正弦波。等效地,您可以将它们重写为不同幅度的正弦波和余弦波的总和。

例子:

phase <- Arg(fou) 
sx=ampl[4]*cos(2*pi*freq[4]*stp+phase[4])+ampl[10]*cos(2*pi*freq[10]*stp+phase[10])
plot(sx)