国产的GPT性能大大提升了,赶紧注册试用

[复制链接]
 楼主| gaoyang9992006 发表于 2023-8-14 16:32 | 显示全部楼层 |阅读模式
国内做GPT做的最好的是科大讯飞,之前的版本跟傻子一样,最近又使用,发现提升了不少,基本上接近了chatGPT,大家可以注册试用。网页版如下,只需要通过手机验证码即可注册登录使用。

https://xinghuo.xfyun.cn/

下面跟大家看看效果
001.png
  1. #include <complex.h>
  2. #include <math.h>
  3. #include <stdio.h>

  4. #ifndef M_PI
  5. #define M_PI 3.14159265358979323846
  6. #endif

  7. void fft(complex double *a, int n) {
  8.     if (n <= 1) return;

  9.     complex double a0[n / 2], a1[n / 2];
  10.     for (int i = 0; i < n / 2; i++) {
  11.         a0[i] = a[i * 2];
  12.         a1[i] = a[i * 2 + 1];
  13.     }

  14.     fft(a0, n / 2);
  15.     fft(a1, n / 2);

  16.     for (int i = 0; i < n / 2; i++) {
  17.         complex double t = cexp(-2.0 * I * M_PI * i / n) * a1[i];
  18.         a[i] = a0[i] + t;
  19.         a[i + n / 2] = a0[i] - t;
  20.     }
  21. }

  22. int main() {
  23.     int n = 8;
  24.     complex double a[] = {1, 1, 1, 1, 0, 0, 0, 0};

  25.     fft(a, n);

  26.     for (int i = 0; i < n; i++) {
  27.         printf("%f%+fi
  28. ", creal(a[i]), cimag(a[i]));
  29.     }

  30.     return 0;
  31. }
这个程序实现了一个递归的FFT算法,输入数组a的长度为n,输出数组a包含n个复数,表示原始信号的频域表示。注意,这个实现假设输入数组的长度是2的整数次幂。如果需要处理其他长度的数组,可以在调用fft函数之前对数组进行填充。

(内容由讯飞星火AI生成)


继续提问

002.png
继续提问:如果使用Arduino来实现FFT,该如何编写代码?
讯飞星火:
使用Arduino实现FFT需要对C语言和数字信号处理有一定的了解。以下是一个简化的Arduino FFT实现示例:
  1. #include <complex.h>
  2. #include <math.h>

  3. #ifndef M_PI
  4. #define M_PI 3.14159265358979323846
  5. #endif

  6. void fft(complex double *a, int n) {
  7.     if (n <= 1) return;

  8.     complex double a0[n / 2], a1[n / 2];
  9.     for (int i = 0; i < n / 2; i++) {
  10.         a0[i] = a[i * 2];
  11.         a1[i] = a[i * 2 + 1];
  12.     }

  13.     fft(a0, n / 2);
  14.     fft(a1, n / 2);

  15.     for (int i = 0; i < n / 2; i++) {
  16.         complex double t = cexp(-2.0 * I * M_PI * i / n) * a1[i];
  17.         a[i] = a0[i] + t;
  18.         a[i + n / 2] = a0[i] - t;
  19.     }
  20. }

  21. void setup() {
  22.     complex double a[] = {1, 1, 1, 1, 0, 0, 0, 0};
  23.     int n = sizeof(a) / sizeof(a[0]);

  24.     fft(a, n);

  25.     for (int i = 0; i < n; i++) {
  26.         Serial.print(creal(a[i]));
  27.         Serial.print(" + ");
  28.         Serial.print(cimag(a[i]));
  29.         Serial.println("i");
  30.     }
  31. }

  32. void loop() {
  33. }
这个程序实现了一个递归的FFT算法,输入数组a的长度为n,输出数组a包含n个复数,表示原始信号的频域表示。注意,这个实现假设输入数组的长度是2的整数次幂。如果需要处理其他长度的数组,可以在调用fft函数之前对数组进行填充。

这个实现中,我们使用了C语言中的复数类型complex double来表示复数,其中实部和虚部都是浮点数。我们还使用了cexp函数来计算复数的指数,以及creal和cimag函数来提取复数的实部和虚部。

在setup函数中,我们初始化了一个长度为8的复数数组a,并调用fft函数计算其DFT。然后,我们将结果输出到串口。

在loop函数中,我们没有执行任何操作,因为FFT计算只需要在程序开始时执行一次。如果你需要在循环中不断更新FFT结果,可以将FFT计算部分的代码移动到loop函数中,并在每次循环时重新计算FFT。

(内容由讯飞星火AI生成)


大家觉得这个GPT工具如何呢?想不想赶紧试用一下。
HeTui 发表于 2024-8-22 16:51 | 显示全部楼层
赶紧注册尝试
瞌睡虫本虫 发表于 2025-4-2 14:25 | 显示全部楼层
只需要手机验证码就能使用,很方便
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2045

主题

16350

帖子

222

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