矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 895|回复: 9

分别用C++和matlab实现RC滤波器增益曲线

[复制链接]
     
发表于 2025-3-11 16:41:36 | 显示全部楼层 |阅读模式
Image 1093.jpg
Image 1094.jpg
但是把,感觉OpenGL画出来的图,下降快一些
算法应该是一致的,只不过没有 1j 这个实部虚部,C++里不会实现

评分

1

查看全部评分

     
 楼主| 发表于 2025-3-11 16:44:17 | 显示全部楼层
  1. R = 20;
  2. C = 22e-6;
  3. f = logspace(1, 3, 1000);
  4. w = 2*pi*f;

  5. H = 1./(1 + 1j*w*R*C);
  6. gain = abs(H);

  7. semilogx(f, 20*log10(H));
  8. xlabel('Frequency (Hz)');
  9. ylabel('Gain (dB)');
  10. title('Gain Curve of RC Low-Pass Filter');
  11. grid on;
复制代码
  1.         for(int f=0;f<1000;f+=10){
  2.                 double H,w=2*pi*f;//角频率
  3.                 H=1./sqrt(1+pow(w*R*C,2));
  4.                 //double gain=abs(H);
  5.                 double o=20*log10(H);
  6.                 cout<<f<<" "<<H<<" "<<o<<endl;
  7.                 glVertex2d(f/1000.,o);
  8.         }
复制代码
回复 支持 反对

使用道具 举报

     
发表于 2025-3-11 18:41:03 | 显示全部楼层
我一般用matlab设计一个需要的曲线,然后得到系数,自己用C代码调用系数。
回复 支持 反对

使用道具 举报

     
发表于 2025-3-11 20:00:20 | 显示全部楼层
代洪波 发表于 2025-3-11 18:41
我一般用matlab设计一个需要的曲线,然后得到系数,自己用C代码调用系数。

是的,滤波器的基本模型就那几种,性能的差别反映在系数的不同,只要系数确定,算法部分程序都不用改
回复 支持 反对

使用道具 举报

发表于 2025-3-11 20:37:25 | 显示全部楼层
数字滤波厉害,不用考虑过度衰减,无须再次放大。
回复 支持 反对

使用道具 举报

     
发表于 2025-3-11 20:38:46 | 显示全部楼层
Matlab的现成工具好像只有L,C组成的滤波器,没有RC滤波器的。不知道是不是这样?
回复 支持 反对

使用道具 举报

     
发表于 2025-3-11 22:48:52 | 显示全部楼层
matlab编写函数运算特别轻松,不需要循环,也天生支持复数和矩阵/向量运算。
本永远的编程小白在2017年DIY网分时,为了算复数微波参量,居然自己编写了复数四则运算函数。现在回想起来,肯定有库函数的,不需要自己折腾。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
发表于 2025-3-13 18:36:31 | 显示全部楼层
通义千问给的答案:
% 设计一个简单的RC低通滤波器
R = 1000; % 电阻值 (欧姆)
C = 1e-6; % 电容值 (法拉)

% 计算截止频率
fc = 1 / (2 * pi * R * C);

% 创建传递函数
num = [1];
den = [R*C, 1];
sys = tf(num, den);

% 绘制频率响应
bode(sys);
title('RC Low-pass Filter Frequency Response');
RC-Filter.jpg
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-13 22:18:30 | 显示全部楼层
dabfxz 发表于 2025-3-13 18:36
通义千问给的答案:
% 设计一个简单的RC低通滤波器
R = 1000; % 电阻值 (欧姆)

C++/OpenGL成功画出了下面的图
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2025-3-14 09:22:52 | 显示全部楼层
本帖最后由 JuncoJet 于 2025-3-14 09:24 编辑
dabfxz 发表于 2025-3-13 18:36
通义千问给的答案:
% 设计一个简单的RC低通滤波器
R = 1000; % 电阻值 (欧姆)

微信截图_20250314092424.png
微信截图_20250314092124.png
  1.     for (int f = 0; f < 100000; f += 10) {
  2.         double H, w = 2 * pi * f; // 频率
  3.         H = 1. / sqrt(1 + pow(w * R * C, 2));
  4.         double o = 20 * log10(H);
  5.         Point p;
  6.         p.x = f / 1000.;
  7.         p.y = o;
  8.         vp.push_back(p);
  9.         glVertex2d(p.x, p.y);
  10.     }
复制代码

好像不属于上面任何一种
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-26 03:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表