调频(FM)代码片段

时间:2011-12-30 08:15:20

标签: audio signal-processing sound-synthesis

我已经为音频信号的频率调制编写了以下代码。音频本身长1秒,以8000 Hz采样。我想通过使用频率为50 Hz的正弦波(表示为采样频率的一小部分)将FM应用于此音频信号。调制信号具有0.25的调制指数,以便仅产生一对边带。

for (i = 0; i < 7999; i++) {
    phi_delta = 8000 - 8000 * (1 + 0.25 * sin(2* pi * mf * i));
    f_phi_accum += phi_delta; //this can have a negative value
    /*keep only the integer part that'll be used as an index into the input array*/
    i_phi_accum = f_phi_accum;   
    /*keep only the fractional part that'll be used to interpolate between samples*/
    r_phi_accum = f_phi_accum - i_phi_accum; 
    //If I'm getting negative values should I convert them to positive
    //r_phi_accum = fabs(f_phi_accum - i_phi_accum);   
    i_phi_accum = abs(i_phi_accum);
    /*since i_phi_accum often exceeds 7999 I have to add this if statement so as to      prevent out of bounds errors   */  
    if (i_phi_accum < 7999)
        output[i] = ((input[i_phi_accum] + input[i_phi_accum + 1])/2) * r_phi_accum;            
}

1 个答案:

答案 0 :(得分:1)

你对phi_delta的计算偏差是因子8000和一个偏差 - 它应该是1 +/-一个小值,即

phi_delta = 1.0 + 0.25 * sin(2.0 * pi * mf * i));

将导致phi_delta的范围为0.75至1.25。