将通带信号转换为基带等效模型以降低采样率和样本数

Conversion of passband signal to baseband equivalent model to decrease the sampling rate and the number of samples

我正在尝试使用匹配滤波检测以 fc=75kHz 调制的特定信号。此外,检测是在一个 7 分钟的音频文件中实现的,采样率为 312.5kHz(这导致了非常大量的样本——大约 1.35 亿)。这使得处理和过滤过程花费太多时间并且不适用于实时应用。然后,我决定使用以下代码将信号转换为基带等效模型(以更改采样频率,从而减少样本数量):

    audio = audioread(file);
    fc = 75000;
    t = (1:length(audio)).';
    y = audio*sqrt(2).*exp(-i*2*pi*fc*t);

但这不行,我对原始信号和转换为基带后的信号都进行了傅里叶变换,以观察频域的频谱。

如您所见,75kHz 信号的频谱没有移动到零点。

我的问题是:

  1. 我转基带的代码是不是错了?如果是这样,如何将此信号转换为基带信号?
  2. 有没有其他方法可以在不丢失 75kHz 信号信息的情况下显着减少此文件的样本数量(我尝试使用采样率 = 150kHz 进行下采样,但样本仍然太多)?

正如评论中提到的@Luis Mendo,要以 312.5kHz 的采样率将频谱从 75kHz 移动到 0,您需要将时间变量除以采样率:

fs = 312500;
t = (1:length(audio)).'/fs;
y = audio*sqrt(2).*exp(-i*2*pi*fc*t);

这将移动整个输入频谱(包括 312.5-75=237.5Hz 左右的图像,33kHz 和 66kHz 左右的其他导频音以及 0Hz 附近的低通分量)。要摆脱这些,您应该对 y 信号进行低通滤波。您可以调整滤波器过渡带,但查看您的图表,似乎您需要在 75kHz 中心频率的大约 4-5kHz 范围内包含信号,并排除 66kHz 左右的下一个干扰(距离您的 75kHz 9kHz中心频率)。基于 Kaiser Window Lowpass Filter Design sample from Matlab documentation 你可以设计这样一个过滤器:

fcuts = [4000 9000];
mags = [1 0];
devs = [0.05 0.01];

[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fs);
hh = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');

filtered_signal = filter(hh, 1, y);

那么您应该能够将信号抽取大约 24 倍(最终采样率为 ~13kHz 以适应大约 8000Hz 的信号带宽和过渡带):

decimation_factor = 24;
baseband = filtered_signal(1:decimation_factor:end);

这个过程虽然可视化相当简单,但也相当浪费,因为您最终会丢弃大部分过滤后的输出。然后,一个有效的实现将使用 a polyphase FIR decimator,利用与上面设计的相同的滤波器系数:

firdecim = dsp.FIRDecimator ('DecimationFactor',decimation_factor, 'Numerator', hh);
baseband = firdecim(y);