我试图检测特定的信号调制在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);但这是行不通的,我把原始信号和基带转换后的信号进行傅里叶变换,在频域上观察频谱。

正如你所看到的,75千赫信号的频谱不会移动到零点。
我的问题是:
发布于 2017-03-15 13:29:24
正如@路易斯·门多在评论中提到的,要将采样率为312.5kHz的频谱从75 the移到0,您需要将时间变量除以采样率:
fs = 312500;
t = (1:length(audio)).'/fs;
y = audio*sqrt(2).*exp(-i*2*pi*fc*t);这将改变整个输入频谱(包括图像约312.5-75=237.5Hz,其他导频音调你有约33千赫和66千赫和低通成分在0赫兹附近)。为了摆脱这些问题,你应该先对y信号进行低通滤波.您可能可以调整滤波器过渡带,但从您的图表来看,它似乎需要包括信号在大约4-5千赫的75千赫中心频率,并排除下一个干扰在66千赫左右(9千赫远离你的75千赫中心频率)。基于基于Matlab文件的Kaiser窗口低通滤波器设计实例,您可以使用以下方法来设计这样的过滤器:
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倍的信号(给出~13 the的最终采样率,以适应8000 by的近似信号带宽和过渡频带):
decimation_factor = 24;
baseband = filtered_signal(1:decimation_factor:end);这个过程,尽管可视化相当简单,但也是相当浪费的,因为您最终会丢弃大部分已过滤的输出。然后,一个有效的实现将使用一种多相FIR抽取器,使用与上面设计的相同的滤波器系数:
firdecim = dsp.FIRDecimator ('DecimationFactor',decimation_factor, 'Numerator', hh);
baseband = firdecim(y); https://stackoverflow.com/questions/42807677
复制相似问题