kopia lustrzana https://github.com/AlexFWulff/awulff-pico-playground
Floating-point code
rodzic
e96c7b7417
commit
6289393253
|
@ -0,0 +1 @@
|
||||||
|
alex@Alexs-MBP.home.44315
|
|
@ -14,15 +14,15 @@
|
||||||
// 0 = 500,000 Hz
|
// 0 = 500,000 Hz
|
||||||
// 960 = 50,000 Hz
|
// 960 = 50,000 Hz
|
||||||
// 9600 = 5,000 Hz
|
// 9600 = 5,000 Hz
|
||||||
#define CLOCK_DIV 9600
|
#define CLOCK_DIV 12000
|
||||||
|
|
||||||
// Channel 0 is GPIO26
|
// Channel 0 is GPIO26
|
||||||
#define CAPTURE_CHANNEL 0
|
#define CAPTURE_CHANNEL 0
|
||||||
#define LED_PIN 25
|
#define LED_PIN 25
|
||||||
#define NSAMP 20000
|
#define NSAMP 10000
|
||||||
|
|
||||||
uint16_t capture_buf[NSAMP];
|
uint16_t capture_buf[NSAMP];
|
||||||
uint16_t sending_buf[NSAMP];
|
float sending_buf[NSAMP];
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
stdio_init_all();
|
stdio_init_all();
|
||||||
|
@ -77,16 +77,26 @@ int main() {
|
||||||
gpio_put(LED_PIN, 1);
|
gpio_put(LED_PIN, 1);
|
||||||
adc_run(true);
|
adc_run(true);
|
||||||
|
|
||||||
// first transmission will be garbage since we haven't filled the buffer yet
|
// first transmission will be garbage since we haven't filled buf
|
||||||
std::string encoded =
|
std::string encoded =
|
||||||
base64_encode((unsigned char const *)sending_buf, NSAMP*2);
|
base64_encode((unsigned char const *)sending_buf, NSAMP*4);
|
||||||
|
|
||||||
printf("%s", encoded.c_str());
|
printf("%s", encoded.c_str());
|
||||||
|
|
||||||
gpio_put(LED_PIN, 0);
|
gpio_put(LED_PIN, 0);
|
||||||
|
|
||||||
dma_channel_wait_for_finish_blocking(dma_chan);
|
dma_channel_wait_for_finish_blocking(dma_chan);
|
||||||
|
|
||||||
|
uint16_t min = 32768;
|
||||||
memcpy(sending_buf, capture_buf, NSAMP*2);
|
uint16_t max = 0;
|
||||||
|
|
||||||
|
for (uint32_t i=0; i<NSAMP; i++) {
|
||||||
|
if (capture_buf[i] > max) max = capture_buf[i];
|
||||||
|
if (capture_buf[i] < min) min = capture_buf[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint32_t i=0; i<NSAMP; i++) {
|
||||||
|
features[i] = ((float)capture_buf[i]-(float)min)/((float)max-(float)min)*2-1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,8 @@ import numpy as np
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
infile = "/Users/alex/Desktop/pico/other-3"
|
infile = "/Users/alex/Desktop/4khz/extinguish"
|
||||||
outfile = "/Users/alex/Desktop/pico/other.wav"
|
outfile = "/Users/alex/Desktop/4khz/extinguish.wav"
|
||||||
|
|
||||||
f = open(infile, "r")
|
f = open(infile, "r")
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ if __name__=="__main__":
|
||||||
audio = AudioSegment(
|
audio = AudioSegment(
|
||||||
data.tobytes(),
|
data.tobytes(),
|
||||||
sample_width=2,
|
sample_width=2,
|
||||||
frame_rate=5000,
|
frame_rate=4000,
|
||||||
channels=1
|
channels=1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
from pydub import AudioSegment
|
||||||
|
import scipy.io.wavfile
|
||||||
|
import numpy as np
|
||||||
|
import base64
|
||||||
|
import io
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
if __name__=="__main__":
|
||||||
|
infile = "/Users/alex/Desktop/float-test/noise"
|
||||||
|
outfile = "/Users/alex/Desktop/float-test/noise.wav"
|
||||||
|
|
||||||
|
f = open(infile, "r")
|
||||||
|
|
||||||
|
byte_data = bytearray()
|
||||||
|
vals = f.read(1000)
|
||||||
|
# Reading all at once didn't work for some reason
|
||||||
|
while vals:
|
||||||
|
byte_data.extend(base64.b64decode(vals))
|
||||||
|
vals = f.read(1000)
|
||||||
|
if len(vals) != 1000: break
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
# Enforce little endian
|
||||||
|
dt = np.dtype(np.float32)
|
||||||
|
dt = dt.newbyteorder('<')
|
||||||
|
|
||||||
|
data = np.zeros(int(len(byte_data)/4), dtype=dt)
|
||||||
|
num_idx = 0
|
||||||
|
byte_idx = 0
|
||||||
|
while byte_idx < len(byte_data)-4:
|
||||||
|
num = np.frombuffer(byte_data[byte_idx:byte_idx+4], dtype=dt)
|
||||||
|
if (num > 1 or num < -1):
|
||||||
|
print("Skipped one")
|
||||||
|
byte_idx = byte_idx + 3
|
||||||
|
else:
|
||||||
|
data[num_idx] = num[0]
|
||||||
|
num_idx = num_idx+1
|
||||||
|
byte_idx = byte_idx + 4
|
||||||
|
|
||||||
|
#plt.plot(data)
|
||||||
|
#plt.show()
|
||||||
|
|
||||||
|
wav_io = io.BytesIO()
|
||||||
|
scipy.io.wavfile.write(wav_io, 4000, data)
|
||||||
|
wav_io.seek(0)
|
||||||
|
sound = AudioSegment.from_wav(wav_io)
|
||||||
|
|
||||||
|
sound.export(outfile, format="wav")
|
Ładowanie…
Reference in New Issue