Forum: Mikrocontroller und Digitale Elektronik Samplerate erhöhen bzw verringern, aber wie?


von Semi M. (semi_m)


Lesenswert?

Hallo liebes Mikrocontroller Team!
Ich bin Student an einer Uni und ich will als Übung für zuhause mithilfe
eines SMT32 Programmes von einer Hardware eine Stimmaufnahme von mir
verlangsamen und schneller machen!

Die Frage ist , wie  bzw wo muss ich die Sample Rate erhöhen bzw 
verringern um das zu erreichen?
ich habe schon überall rumgespielt aber es is noch nix gutes 
rausgekommen.
A
Villeicht habt ihr eine idee!

Ich danke schön einmal im vorhinein!

hier ist noch der code:
1
#include "stm32_init.h"
2
3
void SPI2_IRQHandler()
4
{
5
  int16_t left_out_sample = 0;
6
  int16_t right_out_sample = 0;
7
  int16_t left_in_sample = 0;
8
  int16_t right_in_sample = 0;
9
10
  GPIO_ToggleBits(GPIOD, GPIO_Pin_15);
11
12
  if (SPI_I2S_GetFlagStatus(I2Sx, I2S_FLAG_CHSIDE) == SET)
13
  {
14
    left_in_sample = SPI_I2S_ReceiveData(I2Sx);
15
    left_out_sample = left_in_sample;
16
    while (SPI_I2S_GetFlagStatus(I2Sxext, SPI_I2S_FLAG_TXE ) != SET){}
17
    SPI_I2S_SendData(I2Sxext, left_out_sample);
18
19
  }
20
  else
21
  {
22
    right_in_sample = SPI_I2S_ReceiveData(I2Sx);
23
    right_out_sample = right_in_sample;
24
    while (SPI_I2S_GetFlagStatus(I2Sxext, SPI_I2S_FLAG_TXE ) != SET){}
25
    SPI_I2S_SendData(I2Sxext, right_out_sample);
26
  }
27
}
28
29
int main(void)
30
{
31
  stm32_wm_init(FS_48000_HZ, WM_DMIC_IN, IO_METHOD_INTR);
32
  while(1){}
33
}
PS: ich programmiere mit Keil uvision 5

Liebe grüße!

von Teo D. (teoderix)


Lesenswert?

Eine Endlosschleife wartet auf einen Interrupt, wo könnte man da wohl 
ansetzen?
Wo das Ereignis (der Interrupt) her kommt []
Da wo es hin geht []

von Sven B. (scummos)


Lesenswert?

Ich finde du verrätst sehr wenig über das System, was gibt denn den Ton 
wieder? Ein Gerät am I2S-Bus, wie's aussieht ...? Ich denke dieses Gerät 
wäre für die Fragestellung interessant.

Du kannst versuchen den Bustakt niedriger zu machen, aber keine Ahnung 
ob das was bewirkt, vielleicht gibt das auch nur Aussetzer ;)

von Semi M. (semi_m)


Lesenswert?

Oh
Das klingt ja schon einmal gut:)

Mit einem Interrupt kann ich die Ausgabe ja langsamer machen, durch was 
mach ich die Ausgabe jedoch schneller?:)

von Semi M. (semi_m)


Lesenswert?

Oh stimmt.. also ich fahre einfach mit einem auf Kabel vom i2s Bus zum 
PC
Ich habe auf diesem Board ein Line in und Line Out Stecker und fahr da 
mit dem Line Out zum PC und der PC ist meine Ausgabe :)
Also das mit dem Bustakt hab ich auch schon probiert
Egal was für eine Zahl ich da hinschreibe, es passiert gar nichts :(

von Markus (Gast)


Lesenswert?

Welches Board hast Du?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Semi M. schrieb:
> hier ist noch der code:
Hier ist noch die Bedieungsanleitung zum Einfügen von C-Code. Die steht 
über jeder Texteingabebox unter "erst lesen, dann posten!"...

von Semi M. (semi_m)


Lesenswert?

Also da steht stm32f4 discovery !

Danke für die Hilfe!

von Semi M. (semi_m)


Lesenswert?

Oh tut mir leid...
Dachte das der Code noch als "kurz" durchgeht!

Tut mir leid !

von Peter D. (peda)


Lesenswert?

Semi M. schrieb:
> left_out_sample = left_in_sample;

Du machst ja nichts mit den Daten, also kann sich auch die 
Geschwindigkeit nicht ändern.
Du mußt die Daten in einen Puffer schreiben und dann mit anderer 
Geschwindigkeit wieder ausgeben. Dabei ändert sich auch die Tonhöhe 
entsprechend.

von Pandur S. (jetztnicht)


Lesenswert?

Mit einer anderen Geschwindigkeit ausgeben bedeutet zB die Daten 
interpolieren und mit der selben Geschindigkeit augeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.