生成一个50hz的正弦表格
时间: 2024-05-04 16:20:24 浏览: 12
以下是生成50Hz正弦波的Python代码,可以生成正弦波表格并将其保存为CSV文件:
```python
import math
import csv
# 设置采样率和采样时间
sample_rate = 44100 # 采样率
duration = 1 # 采样时间
# 计算采样点数量和采样间隔
num_samples = int(sample_rate * duration)
sample_interval = 1.0 / sample_rate
# 生成正弦波
samples = []
for i in range(num_samples):
sample = math.sin(2 * math.pi * 50 * i * sample_interval)
samples.append(sample)
# 将数据保存为CSV文件
with open('sine_wave.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['Sample', 'Value'])
for i in range(num_samples):
writer.writerow([i, samples[i]])
```
执行后,将生成一个名为`sine_wave.csv`的文件,其中包含一列采样点序号和一列正弦波的采样值。
相关问题
stm32 生成一个50hz的正弦表格
生成一个50Hz的正弦表可以使用STM32的DAC(数字模拟转换器)模块,具体步骤如下:
1. 定义一个长度为N的数组作为正弦表,N的大小可以根据需要进行调整。
```c
#define N 128
uint16_t sin_table[N];
```
2. 在主函数中初始化正弦表,可以使用以下代码:
```c
for (int i = 0; i < N; i++) {
sin_table[i] = (sin(2 * PI * i / N) + 1) * 2048;
}
```
这段代码使用标准库函数sin()计算正弦值,然后将其映射到0-4095的DAC输出范围,最后将其转换为16位无符号整数。
3. 配置DAC模块,设置输出频率为50Hz,并将正弦表中的值输出到DAC:
```c
HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
while (1) {
for (int i = 0; i < N; i++) {
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sin_table[i]);
HAL_Delay(20); // 延时20ms,控制输出频率为50Hz
}
}
```
这段代码使用HAL库函数配置DAC模块,并在无限循环中不断输出正弦表中的值,通过控制延时时间来控制输出频率为50Hz。
需要注意的是,上述代码只是一个简单的示例,实际应用中还需要考虑DAC输出电压的范围、输出信号的放大和滤波等问题。
stm32生成一个50hz的正弦波表格
可以使用以下代码生成一个50Hz的正弦波表格:
```c
#include <math.h>
#define TABLE_SIZE 100 // 正弦波表格长度
#define SAMPLING_FREQ 1000 // 采样率
float sin_table[TABLE_SIZE]; // 正弦波表格
void generate_sin_table(void) {
for (int i = 0; i < TABLE_SIZE; i++) {
float angle = 2 * M_PI * i / TABLE_SIZE; // 计算角度
sin_table[i] = sin(angle); // 计算正弦值
}
}
int main(void) {
generate_sin_table(); // 生成正弦波表格
while (1) {
for (int i = 0; i < TABLE_SIZE; i++) {
float t = 1.0 / SAMPLING_FREQ; // 计算采样周期
float sin_val = sin_table[i]; // 从正弦波表格中读取正弦值
// 将正弦波表格中的正弦值输出到 DAC 或 PWM 中
// ...
}
}
return 0;
}
```
需要注意的是,生成的正弦波表格长度应该是一个固定的值,并且需要根据实际需求进行调整。同时,生成正弦波表格的代码只需要在初始化时运行一次即可,之后可以重复使用该表格。在实际应用中,需要根据具体使用情况将正弦波输出到 DAC 或 PWM 中。