python – 生成准周期信号

有没有办法生成准周期信号(具有特定频率分布的信号,如正态分布)?此外,

信号不应该具有固定的频率分布,因为高斯函数的逆傅里叶变换仍然是高斯函数,而我想要的是振荡信号.

我使用离散系列的正常分布频率来生成信号,即

《python – 生成准周期信号》

频率分布如下:

《python – 生成准周期信号》

所以初步阶段

,我收到了信号

《python – 生成准周期信号》

但是,信号就像

《python – 生成准周期信号》

它的FFT频谱就像

《python – 生成准周期信号》.

我发现最终的光谱只是在短时间内类似于高斯函数,因为t = 0(对应于图4中的左边几个极高的极值),其余信号只对两者的毛刺造成影响.图5中的峰值侧面.

我认为问题可能来自初始阶段.我试过随机分布的初始阶段,但它也没有用.

那么,产生这种信号的正确方法是什么?

这是我的python代码:

import numpy as np
from scipy.special import erf, erfinv
def gaussian_frequency(array_length = 10000, central_freq = 100, std = 10):
    n = np.arange(array_length)
    f = np.sqrt(2)*std*erfinv(2*n/array_length - erf(central_freq/np.sqrt(2)/std)) + central_freq
    return f
f = gaussian_frequency()
phi = np.linspace(0,2*np.pi, len(f))
t = np.linspace(0,100,100000)
signal = np.zeros(len(t))
for k in range(len(f)):
    signal += np.sin(phi[k] + 2*np.pi*f[k]*t)
def fourierPlt(signal, TIMESTEP = .001):
    num_samples = len(signal)
    k = np.arange(num_samples)
    Fs = 1/TIMESTEP
    T = num_samples/Fs
    frq = k/T # two sides frequency range
    frq = frq[range(int(num_samples/2))] # one side frequency range
    fourier = np.fft.fft(signal)/num_samples # fft computing and normalization
    fourier = abs(fourier[range(int(num_samples/2))])
    fourier = fourier/sum(fourier)
    plt.plot(frq, fourier, 'r', linewidth = 1)
    plt.title("Fast Fourier Transform")
    plt.xlabel('$f$/Hz')
    plt.ylabel('Normalized Spectrum')
    return(frq, fourier)
fourierPlt(signal)

最佳答案 如果您希望信号是实值的,则需要镜像频率分量:您需要正负频率是彼此的复共轭.我认为你想到了这个.

高斯形频谱(f = 0处的平均值)产生高斯形信号.

通过频率f0移动频谱使得时域信号乘以exp(j2πf0t).也就是说,你只改变它的阶段.

假设您仍然需要实值时间信号,则必须复制频谱并将其向两个方向移动.这导致乘以

exp(j2πf0t)exp(-j2πf0t)= 2 cos(2πf0t).

因此,您的信号是高斯调制余弦.

我在这里使用MATLAB作为示例,我希望您可以轻松地将其转换为Python:

t=0:300;
s=exp(-(t-150).^2/30.^2) .* cos(2*pi*0.1*t);
subplot(2,1,1)
plot(t,s)
xlabel('time')

S=abs(fftshift(fft(s)));
f=linspace(-0.5,0.5,length(S));
subplot(2,1,2)
plot(f,S)
xlabel('frequency')

《python – 生成准周期信号》

对于那些对图像处理感兴趣的人:Gabor filter就是这样,但频谱只移动了一个方向.得到的滤波器很复杂,使用滤波结果的幅度.这导致了与相位无关的滤波器.

点赞