scipy.signal.welch参数详解

Scipy的signal.welch函数用于计算功率谱密度,参数包括信号频率fs、窗函数类型、窗口长度、重叠长度等。它支持自定义FFT长度、去除线性趋势及选择返回单边或双边频谱。平均方法可以是均值或中位数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scipy.signal.welch:
def welch(x, fs=1.0, window='hann', nperseg=None, noverlap=None, nfft=None,
          detrend='constant', return_onesided=True, scaling='density',
          axis=-1, average='mean')
x传入的信号数据。
fs是信号的采集频率,即1s采集多少次,默认为1.0。
window窗函数,默认为汉宁窗。
nperseg窗口的长度,即窗口的秒数*信号的采集频率=窗口限定的秒数内采集的所有信号数据量
noverlap相邻窗口的重叠位置,默认为‘None',表示 nperseg//2。
nfft如果需要一个零填充的FFT,则该值表示所使用的FFT的长度。如果'None',FFT长度为'nperseg'。默认为“None”。
detrend去除线性分量的方法,默认为‘constant’。
axis表示对数据x的操作维度,默认为-1,即对数据x的最后一维进行窗口操作。
return_onesided如果'True',返回真实数据的单边频谱。如果'False'返回一个双边频谱。默认为'True',但在处理复杂的数据时,总是返回一个双边频谱。
scaling可选值为{'density', 'spectrum'},表示计算的是功率谱密度,还是频谱,默认为'density',计算功率谱密度。
average取周期图平均值时采用的方法,默认为‘mean’,还可取值为‘median’。

import numpy as np import scipy.signal as signal import matplotlib.pyplot as plt import scipy.fftpack as fftpack import time def generatesignal(t,freqs,amps,phases,SNR): """ 根据指定的频率、幅度、相位、信噪比等参数生成信号片段 :param t: 生成信号的时间序列 :param freqs: 生成信号的频率参数,多个成分以列表形式组织 :param amps: 生成信号的幅度参数,多个成分以列表形式组织 :param phases: 生成信号的相位参数,多个成分以列表形式组织 :param SNR: 生成信号的高斯噪声信噪比参数 :return: 生成的信号片段 """ t = np.array(1) sig = np.zeros(np.shape(t)) for freq,amp,phase in zip(freqs,amps,phases): sig = sig + amp*np.sin(2*np.pi*freq*t+phase) noise = np.random.normal(loc = 0, scale = 1/np.exp(SNR/10),size = np.shape(t)) sig = sig + noise return sig def signalProcessByCon(sig,h,mode='same',method = None): """ 通过不同卷积方式实现FIR滤波器滤波功能 :param sig: 待处理信号 :param h: FIR滤波器单位脉冲响应 :param mode: 卷积输出类型 :param method: 卷积计算方法 :return: 返回滤波结果和卷积运算时间 """ start_time = time.time() if method is None: y = signal.convolve(sig,h,mode = mode, method = 'auto') elif method == 'overlap_add': y = signal.oaconvolve(sig,h,mode = mode) else: y = signal.convolve(sig,h,mode=mode,method = method) end_time = time.time() return y,end_time-start_time def drawSignalCur(tim,sig): """ 画出信号时域波形 :param tim: 信号片段的时间坐标 :param sig: 信号片段值 :return: 无返回值 """ plt.figure(figsize=(10, 4)) plt.plot(tim, sig) plt.xlabel('Time[s]') plt.ylabel('Amp') plt.title('Signal') plt.grid() plt.show() def drawspecrum(sig,Fs): """ 画出信号的频谱,包括幅度谱和相位谱 :param sig: 需要绘制的信号片段 :param Fs: 信号采样频率 :return: 无返回值 """ hs = fftpack.rfft(sig) dur = 1.0/Fs num = len(sig) fs = fftpack.rfftfreq(num,dur) fig = plt.figure(figsize=(10, 6)) # Plot Magnitude response sub1 = plt.subplot(2, 1, 1) sub1.plot(fs, np.abs(hs), 'r', linewidth=2) sub1.set_title('Magnitude Response', fontsize=20) sub1.set_xlabel('Frequency [Hz]', font
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我有明珠一颗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值