DAC 로 사인 파 생 성
2744 단어 c
MCU: C8051F330, Fmax: 23KHz
#include <stdio.h>
#include <stdlib.h>
unsigned char sine_table[8] = { 0x80, 0xDA, 0xFF, 0xDA, 0x80, 0x25, 0x00, 0x25 }; /* 8KSPS, 0dB */
// unsigned char sine_table[8] = { 0x80, 0xAD, 0xC0, 0xAD, 0x80, 0x52, 0x3F, 0x52 }; /* 8KSPS, -6dB */
unsigned char *waveform_data = &sine_table[0];
/* for generate 1KHz sine wave, call it per 125us */
unsigned char waveform_output(void)
{
unsigned char dac_value;
dac_value = *waveform_data++;
if (waveform_data >= &sine_table[8])
{
waveform_data = &sine_table[0];
}
return dac_value;
}
int main()
{
int i;
for (i = 0; i < 16; i++)
{
printf("%02X
", waveform_output());
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
unsigned char *sine_table = NULL;
float db2liner(float dB)
{
return pow(10, dB / 20);
}
float liner2db(float liner)
{
return (20 * log10(liner));
}
int waveform_generate(int freq, int sps, float dB)
{
int i;
int table_length;
float A;
float value;
table_length = sps / freq;
sine_table = (unsigned char *)malloc(table_length);
memset(sine_table, 0, table_length);
A = db2liner(dB);
for( i = 0; i < table_length; i++)
{
value = A * sin(2 * M_PI * i * freq / sps);
if (value < 1.0)
{
sine_table[i] = (256 / 2) + value * (256 / 2); /* add DC offset */
}
else
{
sine_table[i] = 256 - 1;
}
}
return table_length;
}
int main()
{
int i, table_length;
/* generate 1000Hz sine wave, sample rate: 8000Hz, gain: -6dB */
table_length = waveform_generate(1000, 8000, -6);
printf("unsigned char sine_table[%d] = { ", table_length);
for (i = 0; i < table_length; i++)
{
printf((i != table_length - 1) ? "0x%02X, " : "0x%02X ", sine_table[i]);
}
printf("};
");
free(sine_table);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.