硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3192|回复: 16
收起左侧

[其它] C算法合集500例,突出极致运算速度

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2022-12-27 03:18:31 | 显示全部楼层 |阅读模式
https://www.jjj.de/fxt/

涵盖数据结构,FFT, RFFT,三角函数,各种位操作,FIFO,HEAP,沃尔什变换,haar变换,排序,小波变换,相关性,卷积,矩阵,数论变换NTT等

链接:https://pan.baidu.com/s/13d_gWDm38iUqGvNfNe9tIg  提取码:8bw5


为了方便大家使用,提供了一批demo案例


回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
发表于 2022-12-27 08:49:21 | 显示全部楼层
感谢大佬分享,学习一下
回复

使用道具 举报

23

主题

1406

回帖

1475

积分

至尊会员

积分
1475
发表于 2022-12-27 10:52:28 | 显示全部楼层
牛逼class
代码不规范,亲人两行泪!
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-12-27 12:18:17 | 显示全部楼层
厉害厉害  下载研究一下啊
回复

使用道具 举报

8

主题

136

回帖

160

积分

初级会员

积分
160
发表于 2022-12-29 17:20:14 | 显示全部楼层
收藏收藏, 好东西
回复

使用道具 举报

8

主题

136

回帖

160

积分

初级会员

积分
160
发表于 2022-12-29 17:21:37 | 显示全部楼层
如果说某个算法达到极致的运行速度, 是不是不同的芯片要针对指令做相应的优化, 即使是汇编, 不同指令实现的功能执行效率是不一样的
回复

使用道具 举报

2

主题

63

回帖

69

积分

初级会员

积分
69
发表于 2022-12-30 08:53:12 | 显示全部楼层
学无静止,感谢分享  
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2022-12-30 09:06:16 | 显示全部楼层
tcs_stm32 发表于 2022-12-29 17:21
如果说某个算法达到极致的运行速度, 是不是不同的芯片要针对指令做相应的优化, 即使是汇编, 不同指令实现的 ...

楼主位主要是C的优化。

汇编的话,移植麻烦,不同编译环境,兼容不行。
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2023-1-4 08:52:18 | 显示全部楼层
收藏了,不错啊
回复

使用道具 举报

8

主题

21

回帖

45

积分

新手上路

积分
45
发表于 2023-1-6 11:43:16 | 显示全部楼层
mark下,谢谢大佬
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
发表于 2023-1-6 15:05:48 | 显示全部楼层
谢谢大佬给抄作业
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-1-8 21:23:05 | 显示全部楼层
感谢大佬分享
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-1-9 20:11:44 | 显示全部楼层
感谢,感谢,感谢。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
发表于 2023-3-25 21:14:32 | 显示全部楼层
这个是2^n次方的FFT,有没有合数的FFT的算法,例如1000个点
回复

使用道具 举报

56

主题

905

回帖

1073

积分

至尊会员

积分
1073
发表于 2023-3-25 22:41:36 | 显示全部楼层
请帮我用c写一个合数的FFT的算法,例如1000个点
已发送电子邮件. 请帮我用c写一个合数的FFT的算法,例如1000个点
正在搜索: c语言合数fft

正在搜索: c语言合数fft

正在搜索: c语言合数fft

正在搜索: c语言合数fft

正在为你生成答案…

正在为你生成答案…

好的,下面是一个C语言实现的合数FFT算法的例子,可以参考一下:1

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846

typedef struct {
    double real;
    double imag;
} complex;

complex add(complex a, complex b) {
    complex c;
    c.real = a.real + b.real;
    c.imag = a.imag + b.imag;
    return c;
}

complex sub(complex a, complex b) {
    complex c;
    c.real = a.real - b.real;
    c.imag = a.imag - b.imag;
    return c;
}

complex mul(complex a, complex b) {
    complex c;
    c.real = a.real * b.real - a.imag * b.imag;
    c.imag = a.real * b.imag + a.imag * b.real;
    return c;
}

void fft(int n, complex *x, complex *y) {
    if (n == 1) {
        y[0] = x[0];
        return;
    }
    int i, j, k;
    complex t1, t2, w1, wn;
    wn.real = cos(2 * PI / n);
    wn.imag = sin(2 * PI / n);
    complex *x1 = (complex *) malloc(n / 2 * sizeof(complex));
    complex *y1 = (complex *) malloc(n / 2 * sizeof(complex));
    complex *x2 = (complex *) malloc(n / 2 * sizeof(complex));
    complex *y2 = (complex *) malloc(n / 2 * sizeof(complex));
    for (i = 0; i < n / 2; i++) {
        x1[i] = x[2 * i];
        x2[i] = x[2 * i + 1];
    }
    fft(n / 2, x1, y1);
    fft(n / 2, x2, y2);
    for (k = 0; k < n / 2; k++) {
        t1 = mul(y2[k], wn);
        t2 = add(y1[k], t1);
        t1 = sub(y1[k], t1);
        y[k] = add(x1[k], t1);
        y[k + n / 2] = add(x1[k], t2);
        wn = mul(wn, w1);
    }
}

int main() {
    int n = 1000; // 点数
    int i;
    double f[n];
    for (i = 0; i < n; i++) {
        f[i] = sin(20.0 * PI * i / n) + sin(40.0 * PI * i / n);
        printf("%lf\n", f[i]);
    }
    complex x[n], y[n];
    for (i = 0; i < n; i++) {
        x[i].real = f[i];
        x[i].imag = 0.0;
        y[i].real = 0.0;
        y[i].imag = 0.0;
    }
    fft(n, x, y);
}
这个例子中,我们定义了一个名为fft的函数,它接受三个参数:点数n,输入数组x和输出数组y。函数内部使用了递归的方式实现了FFT算法。在主函数中,我们定义了一个长度为1000的数组f,并将其初始化为两个正弦波的和。然后我们将这个数组转换成复数形式,并调用fft函数进行FFT变换。

希望这个例子能够帮到你。如果你有任何问题,请随时问我。
回复

使用道具 举报

73

主题

1200

回帖

1419

积分

至尊会员

积分
1419
发表于 2023-3-26 17:33:50 来自手机 | 显示全部楼层
谢谢分享
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
发表于 2023-3-28 21:24:05 | 显示全部楼层
roguebear 发表于 2023-3-25 22:41
请帮我用c写一个合数的FFT的算法,例如1000个点
已发送电子邮件. 请帮我用c写一个合数的FFT的算法,例如10 ...

哈哈哈,这个是递归的,有不递归的吗?chatGPT
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 04:19 , Processed in 0.258348 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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