Tag Archive | linie

Ecou cu linie de intarziere in CodeWarrior

Avem nevoie de un program care sa ne realizeze un ecou de 0.3 secunde cu o linie de intarziere (cu o structura nerecursiva) proiectata ca in imaginea de mai jos. Lungimea acestei linii depinde de frecventa de esantionare a semnalului audio initial.
delay
Vom folosi semnalul audio speech.wav, pe care il puteti auzi aici.

Codul in Matlab arata asa:

[x,Fs,Nbit]=wavread(‘speech.wav’); //citim datele in vectorul x, cu frecventa de esantionare Fs
L=length(x) //lungimea vectorului – aici este 110033 esantioane
Fs //aici se foloseste o frecventa de 22050Hz
M=0.3*Fs%lungimea liniei de intarziere //daca Fs esantioane reprezinta o secunda, atunci 0.3 sec –> 0.3*Fs esantioane
fid=fopen(‘..\x.dat’,’w’,’b’);
fwrite(fid,x.*2^15,’int16′);
fclose(fid);

display(‘APASA O TASTA’); //acum rulam codul in CodeWarrior
pause

fid=fopen(‘..\y.dat’,’r’,’b’);
y=fread(fid,L,’int16′);
fclose(fid);
y=y/(2^15); //citim vectorul returnat de CodeWarrior
sound([x y],Fs) //si ascultam semnalul de intrare suprapus cu cel intarziat

Codul in CodeWarrior:

#include <prototype.h>
#include <stdio.h>
#define DataBlockSize 160 /* size of data block to process */
#define N 6615 /* buffer length – lungimea liniei de intarziere */ //atat a dat 0.3*Fs=0.3*22050
int main()
{
Word16 x[DataBlockSize],y[DataBlockSize],delay[N],w1,w2; //delay este vectorul in care tinem minte esantioanele avute la intrare cu 0.3 secunde inainte de cel actual
Continue reading