图1是论文【Development of a AD8233-Based EMG Sensor and Double Interrupt Sampling Technique in a Low-Cost Prototype for Biosignal Acquisition】里的,可对EMG实现15-200HZ的滤波。

图1
我想复现这个功能,我在LTspice搭建了电路,图2。但是仿真结果并不符合。

图2
仿真结果,频率范围是4-312HZ.

麻烦大家帮忙看看问题
图1是论文【Development of a AD8233-Based EMG Sensor and Double Interrupt Sampling Technique in a Low-Cost Prototype for Biosignal Acquisition】里的,可对EMG实现15-200HZ的滤波。

我想复现这个功能,我在LTspice搭建了电路,图2。但是仿真结果并不符合。

仿真结果,频率范围是4-312HZ.

麻烦大家帮忙看看问题
关注让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define ADC_PIN 0 // 模拟输入引脚
int main(void) {
if (wiringPiSetup() == -1) {
printf("wiringPiSetup failed\n");
return 1;
}
while (1) {
int adcValue = analogRead(ADC_PIN);
// 这里假设ADC值与EMG信号有一定线性关系,实际需校准
float emgAmplitude = adcValue * (3.3 / 1023); // 假设参考电压3.3V
printf("EMG amplitude: %.2f mV\n", emgAmplitude * 1000);
delay(100);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringPiTimer.h>
#define ADC_PIN 0
#define TIMER_INTERVAL 10 // 定时器中断间隔10ms
void timerInterrupt(void) {
int adcValue = analogRead(ADC_PIN);
float emgAmplitude = adcValue * (3.3 / 1023);
printf("EMG amplitude: %.2f mV\n", emgAmplitude * 1000);
}
int main(void) {
if (wiringPiSetup() == -1) {
printf("wiringPiSetup failed\n");
return 1;
}
wiringPiISR(TIMER_INTERVAL, INT_EDGE_RISING, &timerInterrupt);
wiringPiTimerSet(TIMER_INTERVAL, 1);
while (1) {
delay(1000); // 主循环可以做其他事情,这里简单延迟
}
return 0;
}
希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。