Pagina 1 di 5

Matlab esercizio

Inviato: 23 giu 2012, 17:41
da pixx87
Ciao
avrei un problema su questo quesito di matlab..
Si scriva e si commenti un programma matlab che esegua le seguenti operazioni:

1) Catturi un segnale vocale (frequenza di campionamento 16 kHz, 16 bit per campione) (durata 20 secondi)
2) Lo segmenti in blocchi di 10 ms

3) Realizzi la convoluzione a blocchi con un filtro passabasso con frequenza di taglio di 4 kHz (il candidato progetti il filtro in matlab secondo una tecnica a lui nota).

Re: Matlab esercizio

Inviato: 23 giu 2012, 17:48
da dimaios
Foto Utentepixx87, tu come hai pensato di risolverlo ?
Non ne hai proprio idea oppure hai qualcosa da proporre per iniziare ?

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:01
da pixx87
si certo che ho idee!!
io farei così..
definisco prima la mia Fs
fs= 16000;
poi genero un segnale che è un rumore bianco a banda larga
quindi..
lenT=5;
y=randn (lenT*Fs,1);
poi introdurrei la finestra di kaiser

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:04
da dimaios
Prima di tutto leggi bene il testo.
Il punto uno richiede di campionare un segnale da un device fisico non di generarsi un segnale virtuale all'interno del workspace Matlab.

Inizio io con il punto [1].

Il primo punto è facilmente risolvibile con il Data Acquisition Toolbox di Matlab.
Se invece non ce l'hai a disposizione il problema è non banalmente risolvibile.

Supponiamo di averlo a disposizione.
Il codice dovrebbe essere qualcosa del tipo :

Codice: Seleziona tutto

AI = analoginput('winsound'); % Creiamo il device utilizzando come ingresso la scheda audio con driver di windows

addchannel(AI, 1);   % Creiamo un canale sul device. Un ingresso MONO per la voce è sufficiente
Fs = 16000;             % Frequenza di campionamento 16 kHz
set (AI, 'SampleRate', Fs) % Impostiamola sul device
duration = 20;           % Periodo di acquisizione
set(AI, 'SamplesPerTrigger', duration*Fs); % Impostiamo il numero di campioni

start(AI);  % Esecuzione sincrona ( blocccante )
data = getdata(AI);  % Preleviamo i dati nel buffer data
delete(AI) % Distruggiamo l'oggetto di acquisizione in quanto le operazioni di campionamento sono terminate


Re: Matlab esercizio

Inviato: 23 giu 2012, 18:10
da pixx87
non potrei scrivere allora
filename=' il mio segnale audio.wav'
[Y,Fs,nbit]=wavread (filename);

Fs=16000;
Lsig =length(y);
T1= (0: 1\Fs:(Lsig*1\Fs)-1\Fs):
plot (Y,T1);
NO?? ;(

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:14
da dimaios
No, perché il verbo CATTURARE indica che non devi caricare un file da disco ma ACQUISIRE fisicamente il segnale da un device.

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:18
da pixx87
ok.. :(

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:22
da pixx87
Scusa ma quindi non posso proprio
usare Y= Wavrecord(Ncampioni, fs, 'int16')
fs= 16000;
t1 = (0: 1\fs:20-1\fs);
y1= y (0: length(t1));
plot (y1, t1);
dove per Ncampioni intendo 20.fs
???

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:31
da dimaios
Ohhhh :ok: bene. Finalmente una buona idea.

Si. Si può usare ma ha due problemi.
[1] E' una funzione che diventerà obsoleta per cui è meglio utilizzare recorder = audiorecorder(Fs,nBits,nChannels)

[2] Non ti da la possibilità di scegliere il device da cui campionare il segnale come il Data Acquisition Toolbox

Ad ogni modo posso accettare la tua idea come valida perché il testo non impone vincoli.
In questi casi mi tengo "largo" e lascio aperte tutte le possibilità con una scelta più generale ma prendiamo in considerazione la tua ipotesi e andiamo avanti.

Per cortesia leggi bene il testo del problema. Ti faccio alcune osservazioni rispetto ai post precedenti.

Devi assolutamente leggere bene il testo.

pixx87 ha scritto:poi genero un segnale che è un rumore bianco a banda larga


Il rumore bianco non è un segnale vocale. Come ti salta in mente di generarlo quando ti chiedono un'altra cosa ?
Ascolta il rumore bianco qui per farti un'idea di cosa stiamo parlando.


pixx87 ha scritto:lenT=5;
y=randn (lenT*Fs,1);


Non erano 20 i secondi di campionamento ? perché sono diventati 5 ?

pixx87 ha scritto:poi introdurrei la finestra di kaiser


kaiser si scrive Kaiser.
E perché proprio questa ?
Hamming,Hann,Lanczos,Bartlett,Gauss,Blackman,Nuttall,Harris ....ecc....ecc.... sono brutti e cattivi ?
Con quale criterio decidi di utilizzare una finestratura anzichè un'altra e poi perché ?
Per realizzare un filtro passa basso devi necessariamente utilizzare una di queste finestre ?

Re: Matlab esercizio

Inviato: 23 giu 2012, 18:36
da pixx87
Si hai ragione..
Vorrei utilizzare utilizzare Kaiser, o Hamming perché nel mio corso ho fatto solo queste.