#DSP28335滤波 #数字信号处理

#DSP28335滤波问题 #数字信号处理

没连28335得到的波形是正确的,但是一旦接上28335进行仿真得到的波形就是错的,请问是啥情况?

代码、运行结果以及图形设置如下。
程序代码:

img

得到的输入波形:(正确的应该是三个正余弦信号叠加的波形)

img


图形参数设置:

img


滤波以后的频域:

img


滤波器的参数是由matlab生成:

img

代码可以用文本发出来吗

该回答引用GPTᴼᴾᴱᴺᴬᴵ
从代码和描述来看,问题可能是在滤波器的实现上。没有提供滤波器的代码,因此无法确定问题所在。以下是一些可能的问题和解决方法:

  1. 滤波器设计的问题:滤波器的截止频率、通带和阻带特性是否正确?
    解决方法:重新设计和优化滤波器的参数和特性。

  2. 代码中的错误:是否存在变量声明错误、循环次数错误、数组越界等问题?
    解决方法:仔细检查代码,修改错误。

  3. 仿真参数设置的问题:是否选择了正确的仿真参数,例如采样频率、仿真时长等?
    解决方法:检查仿真参数是否正确。

  4. 仿真环境的问题:是否存在硬件或软件问题?
    解决方法:检查硬件和软件配置是否正确,并尝试在其他环境中进行仿真。

参考GPT和自己的思路:可能存在以下几种情况:

1 电路连接问题:请检查DSP28335和信号发生器之间的电路连接是否正确,例如连接是否松动、接口是否正确等。

2 信号发生器设置问题:请检查信号发生器的设置是否正确,例如频率、振幅、波形等是否与期望的信号匹配。

3 DSP28335程序问题:请检查DSP28335程序是否正确,例如是否存在代码错误、滤波器系数是否正确、输入输出是否正确等。

为了确定问题的具体原因,请先检查电路连接和信号发生器的设置是否正确。如果这些方面都没有问题,可以尝试使用示波器等仪器检查信号在DSP28335输入和输出之间的波形,以确定问题的具体原因。

此外,关于您提供的程序代码,可以参考以下几点:

1 滤波器系数BL定义是否正确:在程序中没有提供BL的定义,您可以通过查看fdacoefs.h文件中的定义来确定滤波器系数BL的值是否正确。

2 循环计算是否正确:在程序中循环计算的范围是否正确,例如在卷积计算循环中,是否应该循环到Length+BL-1而不是Length+BL。

3 输出结果是否正确:在程序中,最后一次卷积计算的结果是否应该是输出结果,即output[Length+BL-1]。

在您提供的代码中,有一些问题需要注意:

1 在程序中,滤波器系数BL没有定义,可以通过查看fdacoefs.h文件来确定BL的值。

2 在卷积计算循环中,应该循环到Length+BL-1而不是Length+BL。

3 在程序中,最后一次卷积计算的结果应该是输出结果,即output[Length+BL-1]。

4 在程序中,输入和输出都是使用长整型long类型,需要注意在运算过程中是否会出现溢出或截断问题。

此外,您需要确认您的代码中是否正确地加载了滤波器系数B,以确保滤波器能够正确地工作。

希望这些建议可以帮助您解决问题。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先需要确认输入波形是否正确地传输到了DSP28335板子上。可以通过在代码中添加输出来检查输入数据是否正确传输。同时需要确认板子的时钟和采样率是否正确设置。

另外,需要检查滤波器的设计参数是否正确地传输到了DSP28335板子中。可以通过在代码中添加输出来检查滤波器参数是否正确传输。

如果以上问题都没有出现,则需要检查滤波器的实现是否正确。可以尝试使用MATLAB进行仿真,比较MATLAB和DSP28335板子上的输出结果是否一致,如果不一致,则需要检查滤波算法的实现是否正确。在实现滤波器时,需要注意C语言中的数据类型和运算符的限制,同时需要进行数据类型的转换和处理,以避免出现溢出、精度损失等问题。

以下是一个简单的卡尔曼滤波器的实现示例,供参考:

#define Q 0.0001f
#define R 0.01f

float x_k, x_k_1, p_k, p_k_1, k;

void kalman_filter(float z)
{
    // 状态预测
    x_k_1 = x_k;
    p_k_1 = p_k + Q;
    
    // 观测预测
    k = p_k_1 / (p_k_1 + R);
    
    // 状态更新
    x_k = x_k_1 + k * (z - x_k_1);
    p_k = (1 - k) * p_k_1;
}

其中,Q和R分别为过程噪声和观测噪声的方差,可以根据实际情况进行调整。z为当前的观测值,x_k为当前的状态值,p_k为当前的状态方差。通过卡尔曼滤波可以对信号进行平滑处理,去除高频噪声,提高信号质量。

希望对您有帮助!
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^