搜索

关于信号处理的问题,求大神解答一下啊~

[复制链接]
2280|55
 楼主 | 2020-4-7 23:02 | 显示全部楼层 |阅读模式
现在只有一组数据见附件,横坐标是时间,纵坐标是电势,存在噪声和不等为电势,能通过软件仿真处理(滤波放大什么)这组数据么,最后处理后的数据是要输入到单片机(STM32)进行采集。求大神解答,这个要怎么仿真呢

ZWX1023-20mA.rar

144.02 KB, 下载次数: 16

使用特权

评论回复

评论

zwx1777 2020-4-9 21:54 回复TA
@zyj9490 :o,这样,那我这个如果要做出一个实物电路来的话,可以按你说的那样做么,还有我需要怎么做啊..用什么软件做啊 
zyj9490 2020-4-9 19:02 回复TA
@zwx1777 :滤波器设计很成熟了。 
zyj9490 2020-4-9 19:00 回复TA
@zwx1777 ,数字带通滤波器是用程序实现,模拟滤波器用电路实现。 
zwx1777 2020-4-9 18:49 回复TA
@zyj9490 :谢谢,那这个数字带通滤波可以做电路么,或者可以通过其他东西实现么 
zyj9490 2020-4-9 09:14 回复TA
搞一个数字带通滤滤即可,先用模拟滤波器搞出个带通传递函数,再用双线性变换从S哉转化成Z哉,也就是变成Z哉的传递函数,这样可以做差分方程了,再用差分方程编写滤波程序了。 
21ic小喇叭 2020-4-8 11:00 回复TA
感谢分享,奖励您50家园币,家园币可以兑换礼品或抽奖,欢迎体验~ 
| 2020-4-7 23:55 | 显示全部楼层
STM32 可以用DSP库里面的FIR滤波器库,用matlab 产生20个数值系数,matlab 缩放到16位整型

#define  DSP_ASM
#include "fir.h"
#include "stm32f10x.h"
#include "stdio.h"
#include "ADC.h"
#include "math.h"
#include "dsp_asm.h"
#include <stdlib.h>
#include "stm32_dsp.h"

int32_t fir_out[Counter_point];   /*filter output vector*/

//typedef struct {     //DSP库中的定义
//  uint16_t *h;      //滤波器系数数组指针
//  uint32_t nh;      //系数长度
//} COEFS;


//fir_16by16_stm32( Data_Out,  Data_In, &fir_coefs, Out_Number);/*performs the FIR filtering*/

//第一个参数为输入数组,
//第二个参数为输出数组,
//第三个参数为系数结构体指针,
//第四个参数为输出数组中数的个数。

//1.系数个数必须是 4 的倍数,输出数组中元素的个数必须为 4 的倍数。
//2.输入和系数为16位,输出数据为32位
//3.输入数组中数组元素的个数 N = 系数个数 + 输出数据的个数 - 1 .

//测试:
//输入数组  DATA_In[]={0,1,2,3,4,5,6}   //7个
//系数矩阵 hx[]={111,212,201,212}       //4个
//经过计算 输出的数据应该为   
//    3×212+2×201+1×212+0×111 = 1250
//    4×212+3×201+2×212+1×111 = 1986
//    5×212+4×201+3×212+2×111 = 2722
//    6×212+5×201+4×212+3×111 = 3458    //4个

//  (输出数据 >>15) 为原16位数值大小

//窗函数法
//低通
//采样率 2048
//通带截止频率 15Hz
//窗类型:kaiser
//长度 20
//Beta 0.5
//Matlab-》uint16_t
//*/

const uint16_t  coeffici_15HZ[20]={
               1543,   1573,   1599,   1623,   1643,   1660,   1674,   1684,   1691,
     1694,   1694,   1691,   1684,   1674,   1660,   1643,   1623,   1599,
     1573,   1543
              };

使用特权

评论回复
 楼主 | 2020-4-8 08:52 | 显示全部楼层
雪山飞狐D 发表于 2020-4-7 23:55
STM32 可以用DSP库里面的FIR滤波器库,用matlab 产生20个数值系数,matlab 缩放到16位整型

#define  DSP_A ...

原谅我还看不懂,这一串程序什么意思啊,,,,真小白..,我是想做一个仿真再做一个实物的电路出来

使用特权

评论回复
| 2020-4-8 09:10 | 显示全部楼层
zwx1777 发表于 2020-4-8 08:52
原谅我还看不懂,这一串程序什么意思啊,,,,真小白..,我是想做一个仿真再做一个实物的 ...

586885e8d245369ca5.png
你这个excel的数据,是取交流信号,还是直流信号?

使用特权

评论回复
 楼主 | 2020-4-8 09:21 | 显示全部楼层
叶春勇 发表于 2020-4-8 09:10
你这个excel的数据,是取交流信号,还是直流信号?

应该算是交流信号,一个随角度(时间变的时候角度也会变,符合余弦的那条线)变化的输出电压,因为测试时存在偏置电压,所以基准线不在原点了

使用特权

评论回复
| 2020-4-8 10:13 | 显示全部楼层
zwx1777 发表于 2020-4-8 09:21
应该算是交流信号,一个随角度(时间变的时候角度也会变,符合余弦的那条线)变化的输出电压,因为测试时 ...

优化的程序看不懂,可以使用浮点数。把原理搞懂再说,这些整数运算是在浮点数运算基础上的优化算法。
目前你是要搞懂程序,优化部分,看懂浮点运算程序再说。

使用特权

评论回复
 楼主 | 2020-4-8 10:28 | 显示全部楼层
叶春勇 发表于 2020-4-8 10:13
优化的程序看不懂,可以使用浮点数。把原理搞懂再说,这些整数运算是在浮点数运算基础上的优化算法。
目 ...

这是哪方面的知识啊,我要怎么入手啊,这个仿真的话是用什么软件呢

使用特权

评论回复
| 2020-4-8 10:55 | 显示全部楼层
zwx1777 发表于 2020-4-8 10:28
这是哪方面的知识啊,我要怎么入手啊,这个仿真的话是用什么软件呢 ...

仿真软件,excel就可以了,你的系数才20阶

使用特权

评论回复
 楼主 | 2020-4-8 11:06 | 显示全部楼层
叶春勇 发表于 2020-4-8 10:55
仿真软件,excel就可以了,你的系数才20阶

ang,我又查了下资料,因为我这个采集的数据是一个传感器的输出信号,现在输出的为一个交流波形,想要做一个电路转换为方波,最后要做出一个实物,然后输出进单片机计数。因为还算小白现在还不懂这个信号处理电路的是怎么做,不知道怎么入手

使用特权

评论回复
 楼主 | 2020-4-8 11:07 | 显示全部楼层
自顶,感谢小喇叭的推荐。
又查了下资料,因为我这个采集的数据是一个传感器的输出信号,现在输出的为一个交流波形,想要做一个电路转换为方波,最后要做出一个实物,然后输出进单片机计数。因为还算小白现在还不懂这个信号处理电路的是怎么做,不知道怎么入手

使用特权

评论回复
| 2020-4-8 11:08 | 显示全部楼层
zwx1777 发表于 2020-4-8 10:28
这是哪方面的知识啊,我要怎么入手啊,这个仿真的话是用什么软件呢 ...

300895e8d3f9f2c8ca.png
  1. <font style="background-color: rgb(255, 255, 255);">const int BL = 20;
  2. const uint16_T B[20] = {
  3.      1543,   1573,   1599,   1623,   1643,   1660,   1674,   1684,   1691,
  4.      1694,   1694,   1691,   1684,   1674,   1660,   1643,   1623,   1599,
  5.      1573,   1543
  6. };</font>
复制代码

你这个的确是matlab生成的,一模一样的。


使用特权

评论回复
 楼主 | 2020-4-8 11:12 | 显示全部楼层
叶春勇 发表于 2020-4-8 11:08
你这个的确是matlab生成的,一模一样的。

额,matlab生成的数据?不会的,我亲手测出来的

使用特权

评论回复
| 2020-4-8 11:21 | 显示全部楼层
zwx1777 发表于 2020-4-8 11:12
额,matlab生成的数据?不会的,我亲手测出来的

944515e8d42c9f3867.png
把你第二列的信号fft一下,除了直流,还有这个频率f= Fs*15/8192 这个信号比较强

使用特权

评论回复
 楼主 | 2020-4-8 11:23 | 显示全部楼层
叶春勇 发表于 2020-4-8 11:21
把你第二列的信号fft一下,除了直流,还有这个频率f= Fs*15/8192 这个信号比较强

...

是啊,有一个是电机的一个转速频率..其他就是噪声和直流信号

使用特权

评论回复
| 2020-4-8 11:29 | 显示全部楼层
zwx1777 发表于 2020-4-8 11:23
是啊,有一个是电机的一个转速频率..其他就是噪声和直流信号

你这个电机转速是可变的吗,还是检测堵转?

使用特权

评论回复
 楼主 | 2020-4-8 11:33 | 显示全部楼层
叶春勇 发表于 2020-4-8 11:29
你这个电机转速是可变的吗,还是检测堵转?

可变的,但是这个数据是定速。

使用特权

评论回复
| 2020-4-8 11:54 | 显示全部楼层
zwx1777 发表于 2020-4-8 11:33
可变的,但是这个数据是定速。

如果用matlab,
第一步,把xls文件导入matlab。
  1. xls=xlsread('d:\ZWX1023-20mA.xlsx')
复制代码

第二步,把第二列提取出来。
  1. data=xls(:,2)
复制代码
第三步,DFT分析
  1. V=abs(FFT(data))
复制代码

分析V,和采样率,确定型号频率。通过做试验分析最低转速和最高转速,确定频率范围。
不过我认为高通就可以了。

使用特权

评论回复
| 2020-4-8 12:17 | 显示全部楼层
本帖最后由 雪山飞狐D 于 2020-4-8 12:38 编辑
zwx1777 发表于 2020-4-8 08:52
原谅我还看不懂,这一串程序什么意思啊,,,,真小白..,我是想做一个仿真再做一个实物的 ...

  我已经注释得很详细了,就是FIR库,其实就是底层汇编优化的卷积,你只管输入和输出还有滤波器系数,滤波器系数用matlab 的滤波器工具箱生成,昨晚12点发不了后面的函数,

输入ADC值是
ADC_ConvertedValueTab[]ADC点数取1024+20-1点

最终结果是1024点
fir[out]

         COEFS fir= {(uint16_t * )coeffici_15HZ,20};    //初始化滤波器系数,选择滤波器组
                                                
                                 fir_16by16_stm32(fir_out, (void *)ADC_ConvertedValueTab, &fir, Counter_point);
                                          
                                                 for(i=0;i<Counter_point;i++)
                                   {
                                 
                                    fir_out=(fir_out>>15);      //恢复原值范围
                                         
                                   }
 

如果你要检测电机转速,可能还需要做FFT,用STM32的FFT库

使用特权

评论回复
 楼主 | 2020-4-8 13:11 | 显示全部楼层
雪山飞狐D 发表于 2020-4-8 12:17
  我已经注释得很详细了,就是FIR库,其实就是底层汇编优化的卷积,你只管输入和输出还有滤波器系数,滤 ...

那如果是想要仿真后做一个实际电路出来呢

使用特权

评论回复
 楼主 | 2020-4-8 13:12 | 显示全部楼层
叶春勇 发表于 2020-4-8 11:54
如果用matlab,
第一步,把xls文件导入matlab。

频谱分析已经做了,想做一个电路处理这个数据

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表