如何使用整数除法降低采样率?

时间:2018-02-18 13:31:15

标签: c signals signal-processing frequency

我希望仅使用整数分割将基频F(80000 Hz)减少任意分数

假设使用频率F调用new_sample()函数。然后我可以使用下面的代码将采样率降低到40000 Hz。

i = 0; // global counter
new_sample(value){
    if(i % 2 == 0){
        add_sample_to_buffer(value);
    }else{
        // skip sample
    }
    i++;
}

如果我想将采样率降低1.6到50000赫兹怎么办?

正如克利福德指出的那样:我想在不改变频率的情况下改变采样率。基本上我想通过实时跳过一些样本来对信号进行欠采样。

P.S .: 我知道预分频器和后置分频器通常用于降低频率。我不知道他们是否允许将频率降低一小部分。

2 个答案:

答案 0 :(得分:1)

试试这个:

unsigned Nanoseconds = 0; // global counter

void new_sample(value){
    Nanoseconds += 12500; // interval between calls at 80000 
    if(Nanoseconds>20000){
        Nanoseconds-=20000;
        add_sample_to_buffer(value);
    }else{
        // skip sample
    }
}

在一秒钟内Nanoseconds将增加80000倍12500等于1E9,并将50000倍递减20000.

答案 1 :(得分:1)

如果要更改信号的采样率,而不改变信号内容的绝对位置,则需要执行称为"抽取"的信号处理。如果你想了解它,你可能希望阅读这个非常密集的大学讲座:https://homepages.wmich.edu/~bazuinb/ECE6560/CR_DecAndInterp.pdf。简而言之,您必须执行一些过滤,一些抽取以及一些插值。这里有更简单的解释:https://dspguru.com/dsp/faqs/multirate/decimation/,它确实有一个指向scopeFIR免费工具的链接,该工具包括抽取阶段过滤器和源代码。很多阅读,我知道......