Cómo MCU genera ondas sinusoidales periódicas

1. Introducción

En algunos escenarios, es necesario usar periféricos como IIS del microcontrolador para reproducir datos de audio de onda sinusoidal. Este artículo presenta un "método estúpido" para generar datos de punto fijo de onda sinusoidal de frecuencia fija y amplitud fija, registrar y resumir para aprender y usar.

Introducción en dos pasos

总体步骤概述:
1,使用Audition生成制定波形,并转成pcm格式;
2,写个main函数将所需要的数据读取并打印,然后运行重定向到txt中;
3,将txt中的数据复制到IIS的播放buffer中进行播放即可;

Este artículo utiliza una señal sinusoidal con una frecuencia de muestreo de 48K, una amplitud de -6db y una frecuencia de 1KHz como ejemplo.

2.1 Use Audition para generar la forma de onda especificada y convertirla al formato pcm

Abra Audition, genere un tono:
inserte la descripción de la imagen aquí
cree un nuevo archivo de audio, haga clic en Aceptar:
inserte la descripción de la imagen aquí
establezca la frecuencia y la amplitud de la señal de onda. Inicio:
inserte la descripción de la imagen aquí
establezca la frecuencia y la amplitud del final de la señal de onda:
inserte la descripción de la imagen aquí
haga clic en "Aceptar". listo:
inserte la descripción de la imagen aquí
use la tecla de acceso directo de audición "Alt+Z" para ver la frecuencia de la señal de forma de onda generada, haga clic en "Escanear selección" para ver que la frecuencia de los canales izquierdo y derecho es de 1 KHz: para convertir los datos de punto flotante actuales en datos
inserte la descripción de la imagen aquí
fijos -punto de datos, utilice la tecla de método abreviado "Ctrl + S", guarde el archivo en formato .pcm y guárdelo en la ruta especificada:
inserte la descripción de la imagen aquí

Hasta ahora, nuestros archivos fuente de audio han sido generados y preparados.

2. Escriba una función principal para leer e imprimir los datos requeridos y luego redirigirlo a txt

El código de función principal es el siguiente:
aquí IN_32BITPCM_FILE usa el archivo pcm recién generado;
DATA_SAMPLE_LEN se establece en 96, porque el período de frecuencia de 1KHz es 1ms, el número de puntos de muestreo de 48K de frecuencia de muestreo es 1ms es 48, y porque es estéreo, así que lea aquí Tome 96 puntos de muestreo.

#include <stdio.h>

#define IN_32BITPCM_FILE "-6db_1K_48KSr.pcm"
#define READ_DATA_SAMPLE_LEN    96

int main()
{
    
    
	int ret = -1;
	FILE *fp = NULL;
	int buffer[READ_DATA_SAMPLE_LEN] = {
    
    0};

	fp = fopen(IN_32BITPCM_FILE,"rb");
	if(fp == NULL) {
    
    
		printf("%s: open file failed \n",__func__);
		return -1;
	}

	fseek(fp,0,SEEK_SET);
	ret = fread(buffer,sizeof(char),READ_DATA_SAMPLE_LEN*sizeof(buffer[0]),fp);
	if(ret <=0 ) {
    
    
		printf("%s: ERROR:read file data failed \n",__func__);
		fclose(fp);
		return -1;
	}

	for(int i=0; i< READ_DATA_SAMPLE_LEN; i++){
    
    
		printf("0x%08X, ", buffer[i]);
		if(((i+1)%8) == 0){
    
    
			printf("\n");
		}
	}
	fclose(fp);

	return ret;
}

Abra MINGW64 para compilar la función principal en este momento y genere un archivo .exe de manera predeterminada:
inserte la descripción de la imagen aquí
ejecute un archivo .exe y redirija el resultado de la impresión a test.txt:
inserte la descripción de la imagen aquí
abra test.txt para ver los datos de punto fijo de onda sinusoidal generados y encuentre el datos que queremos Ya perfectamente ordenados:
inserte la descripción de la imagen aquí

2.3 A continuación, copie los datos en la matriz especificada

Observaciones: para hacer coincidir los datos generados con el búfer de la reproducción de audio, aquí puede copiar algunas copias más de los datos del ciclo y luego hacer un bucle para obtener los datos de la matriz que almacena los datos que generan el ciclo completo y copiar a la matriz de búfer de reproducción de audio.

tres, resumen

Este artículo presenta principalmente un método estúpido para generar ondas sinusoidales de datos de punto fijo como referencia. El seguimiento presentará cómo usar el algoritmo CORDIC para generar formas de onda sinusoidales de varias frecuencias, amplitudes y frecuencias de muestreo. Bienvenido a discutir e intercambiar ~

Supongo que te gusta

Origin blog.csdn.net/xuxu_123_/article/details/131317829
Recomendado
Clasificación