我希望仅使用整数分割将基频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 .: 我知道预分频器和后置分频器通常用于降低频率。我不知道他们是否允许将频率降低一小部分。
答案 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免费工具的链接,该工具包括抽取阶段过滤器和源代码。很多阅读,我知道......