单音和双音信号的区别?

信息处理 数字通讯
2022-02-03 23:35:45

已编辑

单音信号有 1 个频率:

y=sin(2πf1t)

双音是通过使用 2 个频率创建的:

sin(2πf1t)+sin(2πf2t)

我如何在绘图上定义这种差异,无论它是否是单音信号?

2个回答

要么,取决于我们如何看待它:

(1)sin(f1t)+sin(f2t)=2cos(.5(f1f2)t)sin(.5(f1+f2)t)

一个常见的经验规则是,如果f1f2(例如f2/f1>5),将它们分开 - 否则,单个幅度调制音调,其中(f1+f2)是“载波”并且(f1f2) “调制器”。

这可以在时频表示中观察到:

在此处输入图像描述

在此处输入图像描述

但如果我们真的想要,我们可以通过增加窗口的频率分辨率,让 STFT 将它们分别表示:

代码

import numpy as np
from scipy.signal import windows
from ssqueezepy import stft
from ssqueezepy.visuals import imshow, plot

def cosines(freqs, N):
    t = np.linspace(0, 1, N)
    return np.sum([np.cos(2*np.pi * f * t) for f in freqs], axis=0)

N = 2048
t = np.linspace(0, 1, N)
x1 = cosines([50, 250], N)
x2 = cosines([50, 60],  N)

Sx1, Sx2 = stft(x1), stft(x2)
stft_freqs = np.linspace(0, .5, len(Sx1)) * N

plot(t, x1, title="f1, f2 = 50, 250", show=1)
plot(t, x2, title="f1, f2 = 50, 60",  show=1)

kw = dict(abs=1, xticks=t, yticks=stft_freqs, 
          xlabel="time [sec]", ylabel="frequency [Hz]")
imshow(Sx1, **kw, title="abs(STFT) | f1, f2 = 50, 250")
imshow(Sx2, **kw, title="abs(STFT) | f1, f2 = 50, 60")

Sx2_2 = stft(x2, windows.dpss(N, 4), n_fft=2048)
stft_freqs = np.linspace(0, .5, len(Sx2_2)) * N
kw['yticks'] = stft_freqs
imshow(Sx2_2, **kw, title="abs(STFT), frequency-localized | f1, f2 = 50, 60")
kw['yticks'] = stft_freqs[:128]
imshow(Sx2_2[:128], **kw, title="frequency-zoomed (same STFT)")

单音信号有 1 个频率: sin(2πf1)

那不是单音信号。那是一个常数。这缺少时间依赖性!

你的意思是

s1(t)=sin(2πf1t).

在实值上下文中,这将是一个单音;在复杂信号的上下文中(您之前一直在谈论 OFDM,所以这可能是您想要工作的上下文),这是一个由两个复杂音调组成的信号:一个在,一个在f1+f1

双音是通过使用 2 个频率创建的: sin(2π(f1+f2))

不,根本不。即使把它写成

s2(t)=sin(2π(f1+f2)t),

这与您的第一个信号相同,但频率fs=f1+f2

所以,我认为你可能真的有一些数学基础是错误的;我很乐意帮助你,但我认为你只是在你的脑海中有一个错误的定义,我无法解决任何问题:(