c语言实现fsk信号调制的代码
时间: 2023-09-19 18:12:12 浏览: 135
以下是一个简单的c语言程序,用于实现FSK信号的调制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358979323846
// 信号的采样频率
#define SAMPLE_RATE 44100
// 两个频率的差异
#define DELTA_FREQ 500
// 两个频率
#define FREQ_0 5000
#define FREQ_1 5500
// 信号的时间长度(秒)
#define SIGNAL_DURATION 0.5
// 信号数组的长度
#define SIGNAL_LENGTH (int)(SIGNAL_DURATION * SAMPLE_RATE)
// 将波形写入到文件
void save_signal_to_file(const char* file_name, double *signal, int length)
{
FILE *fp;
fp = fopen(file_name, "wb");
fwrite(signal, sizeof(double), length, fp);
fclose(fp);
}
int main(void)
{
int i, j;
double signal[SIGNAL_LENGTH];
double t;
for (i = 0; i < SIGNAL_LENGTH; i++) {
t = (double)i / SAMPLE_RATE;
if (i % (int)(SAMPLE_RATE / (2 * DELTA_FREQ)) == 0) {
// 如果 t 是两个频率的半个周期,则在两个频率之间切换
if ((i / (int)(SAMPLE_RATE / (2 * DELTA_FREQ))) % 2 == 0) {
signal[i] = sin(2 * PI * FREQ_0 * t);
} else {
signal[i] = sin(2 * PI * FREQ_1 * t);
}
} else {
signal[i] = 0;
}
}
save_signal_to_file("fsk_signal.raw", signal, SIGNAL_LENGTH);
return 0;
}
```
这个程序生成一个 FSK 信号文件 fsksignal.raw,信号时长为 0.5 秒,采样率为 44100 Hz,包含两个频率,分别为 5000 Hz 和 5500 Hz,频率差为 500 Hz。在程序中,先计算了信号数组的长度 SIGNAL_LENGTH,然后生成信号。在每个 t 是两个频率的半个周期的时候,信号在两个频率之间切换,以此产生 FSK 信号。最后,将波形写入文件。
阅读全文