硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1156|回复: 17
收起左侧

[DSP] 请教下:假设我要采集低频信号0hz,有个100khz干扰,ADC采样率只能到10Khz,传统的数字滤波器是不是没招了?

[复制链接]

41

主题

215

回帖

338

积分

高级会员

积分
338
发表于 2023-4-3 21:32:58 | 显示全部楼层 |阅读模式
假设我要采集低频信号0hz,有个100khz干扰,采样率只有10Khz,传统的数字滤波器是不是没招了?
即干扰信号频率 > 采样频率,IIR, FIR就不行了。


因为数字滤波器只能处理奈奎斯特频率以下的信号,以上的就混叠了。
现代滤波器有办法吗?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2023-4-3 22:09:28 | 显示全部楼层
0hz ? 直流信号?

FFT提取直流信号。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-4-4 08:55:31 来自手机 | 显示全部楼层
eric2013 发表于 2023-4-3 22:09
0hz ? 直流信号?

FFT提取直流信号。

1 我没说清楚,是采集直流
2 我的疑惑。在模拟电路里面,我加个rc滤波器,那截止频率后的信号都会衰减。
可在数字信号的领域,只有<0.5f_sample的信号,可以数字滤波后衰减,可以DFT提取幅度相位。>0.5fs的信号,在数字信号的领域内,是没有办法做任何事情的,只能看着
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-4-4 09:00:26 来自手机 | 显示全部楼层
对于数字滤波器和dft的关系我也困惑。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2023-4-4 09:00:33 | 显示全部楼层
snakeemail 发表于 2023-4-4 08:55
1 我没说清楚,是采集直流
2 我的疑惑。在模拟电路里面,我加个rc滤波器,那截止频率后的信号都会衰减。 ...

数字滤波器就是这样的。

现在的抗混叠基本都是模拟电路来实现,很多ADC采样都是支持抗混叠的。其实本身就是个低通滤波器,带宽就那么大。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-4-4 09:01:40 来自手机 | 显示全部楼层
我对时间不是太敏感,可以采集1秒的数据。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-4-4 09:05:08 来自手机 | 显示全部楼层
sorry,手机敲的,多发了几个。谢谢版主答复。假设我对时间不敏感,只关注直流的幅度是否准确,那我是用dft好,还是用数字滤波器好,还是说我先用数字滤波器,再dft,我觉得是最后一种
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-4-4 09:37:05 | 显示全部楼层
100KHz的信号,以10KHz采样,会混频到0Hz,数字滤波器肯定无能为力;但是(比如说)如果你用9KHz的采样率,100KHz会混频到1KHz,这时做DFT,把1KHz的频率成分清除掉,就只剩下直流成分了。

我还没有想明白这样做对幅值有何影响,欢迎路过的各位大虾指点。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2023-4-4 11:30:58 | 显示全部楼层
snakeemail 发表于 2023-4-4 09:05
sorry,手机敲的,多发了几个。谢谢版主答复。假设我对时间不敏感,只关注直流的幅度是否准确,那我是用dft ...

FFT就行,数字滤波也没问题,现在的ADC采样本身就是个低通。你可以实际测试下。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2023-4-4 11:33:52 | 显示全部楼层
ME_Engineer 发表于 2023-4-4 09:37
100KHz的信号,以10KHz采样,会混频到0Hz,数字滤波器肯定无能为力;但是(比如说)如果你用9KHz的采样率, ...

FFT有频谱泄露问题,不过对直流的幅值几乎没影响。FFT做直流提取本质就是采样数值求平均。
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-4-4 14:09:04 | 显示全部楼层
其实我指的是:按照我提及的方法,去除掉1KHz的频率成分后,得到的频谱就不再是采集到的原始数据的频谱了,
如果将这个频谱IDFT变换回去,得到的是一个直流信号。
这个直流信号和没有100KHz干扰时的直流信号是一致的吗?或者说,二者幅值一样吗?
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-4-4 14:10:59 | 显示全部楼层
我想了一下,应该是没有影响的。去除1KHz的频率成分后,就得到了想要的直流信号。
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-4-4 14:14:46 | 显示全部楼层
做了一个脚本验证一下:

[Python] 纯文本查看 复制代码
from scipy.fftpack import fft, ifft
import matplotlib.pyplot as plt
from math import sin, pi
import numpy as np

def main():
    fs1 = 10000         # Hz
    fs2 = 9000          # Hz
    f_ac = 100000       # Hz
    dc = 1.65           # v
    N = 90              # number of sample points
    ac1 = [0.5 * sin(2 * pi * f_ac * i / fs1 + pi / 4) for i in range(N)]    # 0.5v sinewave, sampling in 10KHz
    ac2 = [0.5 * sin(2 * pi * f_ac * i / fs2 + pi / 4) for i in range(N)]    # 0.5v sinewave, sampling in 9KHz
    signal1 = [(dc + x) for x in ac1]
    signal2 = [(dc + x) for x in ac2]

    fft_sig1 = fft(signal1)
    fft_sig2 = fft(signal2)

    # fft results - magnitude
    fft_sig1_mag = np.abs(fft_sig1)
    fft_sig2_mag = np.abs(fft_sig2)

    # remove 1khz component from spectrum
    fft_sig2[10] = 0.0 + 0.0j
    fft_sig2[80] = 0.0 + 0.0j

    fft_sig2_mag2 = np.abs(fft_sig2)

    # ifft to recover original signal
    signal1_ifft = np.real(ifft(fft_sig1))
    signal2_ifft = np.real(ifft(fft_sig2))

    fig, ax = plt.subplots(2, 2)
    ax[0][0].set_title("signal simulate")
    ax[0][0].plot(signal1, label="sig1: dc+10khz")
    ax[0][0].plot(signal2, label="sig2: dc+9khz")
    ax[0][0].set_xlim(0, N)
    ax[0][0].set_ylim(0, 3.3)
    ax[0][0].legend()
    ax[0][1].set_title("signal fft results")
    ax[0][1].plot(fft_sig1_mag, label="sig1")
    ax[0][1].plot(fft_sig2_mag, label="sig2")
    ax[0][1].legend()
    ax[1][0].set_title("sig2 remove 1khz")
    ax[1][0].plot(fft_sig1_mag, label="sig1")
    ax[1][0].plot(fft_sig2_mag2, label="sig2: remove 1khz")
    ax[1][0].legend()
    ax[1][1].set_title("after ifft")
    ax[1][1].plot(signal1_ifft, label="sig1")
    ax[1][1].plot(signal2_ifft, label="sig2")
    ax[1][1].legend()
    plt.show()

if __name__ == "__main__":
    main()
bandpass_sampling.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2023-4-4 14:31:14 | 显示全部楼层
ME_Engineer 发表于 2023-4-4 14:14
做了一个脚本验证一下:

[mw_shl_code=python,true]from scipy.fftpack import fft, ifft

混叠对直流信号没有影响,影响的主要是ADC采样的波形做FIR,IIR滤波等,截至频率前会可能有混叠的波形频率成分,这个去不掉。

而通过FFT滤波的话,他不方便像IIR FIR那样逐点输出了,FFT提取直流是把一段波形数据求平均了。他这段数据处理后都是这个值。
回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-4-4 20:23:22 | 显示全部楼层
对于楼主的问题,我的理解是:楼主有一个直流信号dc,这个直流信号叠加了一个100KHz的干扰信号(假定是正弦波ac),现在以10KHz的采样率采样,如何从采样结果中获取正确的直流信号幅值?

我们假设dc是1.65v,ac的幅值是0.5v、初相是pi/4,那么,如前所述,采样结果是约2.0v的直流信号,显然2.0v != 1.65v。

因此,高频信号完全可能混叠到直流信号上。

对@eric2013 所说,我的理解是:很多ADC前面都有抗混叠滤波器,抗混叠滤波器带宽有限,因此直接采集就不会有100KHz的干扰,这个取决于实际环境,得实测再说。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-4-4 21:05:25 | 显示全部楼层
谢谢楼上两位。
1. 在数字信号的领域,处理的是band limited的信号,这是大前提,只能模拟去滤掉100Khz。不能让100KHz混进来,靠数字滤波
2. 混叠是每隔fs,band limited信号之间的混叠,所以混叠,是下图中第一个fs左边的频率,和第0个fs右边的频率,是否交叉。
3. 采样率为9kHz, w0 * T  = 2PI * 100KHz * 1/9KHz = 2PI * 11.1 = 2PI * 0.1,  
即 2PI * f_analog * 1/ 9KHz =2PI * 0.1,  f_analog = 0.9KHz, 即100KHz混叠回来的频率为0.9KHz。
这个思路太过清奇,和上面说的带限信号是冲突的。但是我不能证明这个思路,数学上哪出了问题
4. DFT由于难以避免的频谱泄露,求直流还是会受到干扰,所以还是要先数字滤波。
5. 这里有个巧合,DFT求直流,就是取N点的均值,这也是个滤波器

下载+(3).png

回复

使用道具 举报

0

主题

17

回帖

17

积分

新手上路

积分
17
发表于 2023-4-5 14:39:41 | 显示全部楼层
采样有两种,一种是低通采样(遵守奈奎斯特-香农采样定理),一种是带通采样(我了解也不多)。带通采样时,就不是针对band-limited信号了。

设想一个射频信号,频率77~77.5GHz(带宽500MHz),要是按低通采样,你要155GHz以上的采样率才行,现在的技术水平估计很难达到。要分析这样的信号,就是带通采样,刻意利用混叠现象。

从@snakeemail 你的图中也可以看出,采样导致模拟信号的频谱发生周期延拓(术语是这个吗?),发生混频时,高频频率f_h被混叠到低频成分f_l上,有:f_l = f_h ± k f_s,其中,k是正整数,f_s是采样率,混叠后的频率位于0~f_s(或者说±f_s / 2)之间。

因此,100KHz的信号,被混叠到1KHz了:1 KHz = 100 KHz - 11 * 9 KHz。

你上面3的推导过程没有问题,但是你把1/9近似为了0.1,实际上是0.1111111...,如果不近似的话,算出来就是1KHz了。

评分

参与人数 1金币 +50 收起 理由
caicaptain2 + 50 很给力!

查看全部评分

回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-4-5 19:16:15 | 显示全部楼层
ME_Engineer 发表于 2023-4-5 14:39
采样有两种,一种是低通采样(遵守奈奎斯特-香农采样定理),一种是带通采样(我了解也不多)。带通采样时 ...

那优先改采样率为9k,然后加数字滤波器,算直流。数字滤波器的开销小。
带通采样真没学过。
这次把不少模糊的东西,搞清楚了,谢谢各位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 19:14 , Processed in 0.361370 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表