Kycklingkvitter från uC?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Kycklingkvitter från uC?

Inlägg av bearing »

Försöker skapa kycklingkvitter med en liten uC. Tycker att det borde gå att hitta mönster i ljudet som gör att man inte behöver spara ett en hel "wav-fil" i flash (får antagligen inte plats) utan kan generera ljudet genom kod.

Hittade en video på nyfödd kyckling på youtube, och spelade in ljudet. Isolerade ett pip i chirp_16bit_44khz.wav. Det mesta ljudet verkar finnas inom 3000-12000 Hz.

http://dl.dropbox.com/u/770240/kyckling ... _44khz.wav
http://dl.dropbox.com/u/770240/kyckling ... _44khz.wav

Har tittat på ljudvågorna i Audacity, men ser inget mönster. Tror att man kan komma närmare lösningen genom att göra någon sorts frekvensanalys, men jag vet inte hur man gör.

Har ni några idéer?
hatten
Inlägg: 94
Blev medlem: 9 maj 2008, 22:16:23
Ort: Uppsala

Re: Kycklingkvitter från uC?

Inlägg av hatten »

Matlab är den samplade signalens bästa vän! Här kommer tolv rader kod som transformerar ljudklippen till frekvensdomänen.

Kod: Markera allt

filenames = {'chirps_16bit_44khz', 'chirp_16bit_44khz'};
for i=1:2
    [data, fs] = wavread(filenames{i});   % importerar
    nfft = 2^(nextpow2(length(data))-1);  % justerar datalängden
    Y{i} = fft(data,nfft);                % transformerar
    Y{i} = Y{i}/max(Y{i});                % normaliserar
    f{i} = fs/2*linspace(0,1,nfft/2);     % div plotgrejs.. 
    subplot(2,1,i), plot(f{i},abs(Y{i}(1:nfft/2)));
    xlim([0 10e3]); 
    title(filenames(i));
end
xlabel('Frequency (Hz)');
Vilket i sin tur producerar denna bild.

EDIT; Upptäckte just att Matlab formaterade titlarna lite lustigt. Den övre plotten visar alltså frekvensspektrat för det längre klippet, där även mänskligt tal var med, och den undre plotten svarar mot det korta klippet som bara innehöll ett pip.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Kycklingkvitter från uC?

Inlägg av E85 »

Det går att titta på spectrogram i Audacity om du klickar på namnet bredvid krysset uppe till vänster (track pop-down menu) på spåret och väljer Spectrum.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Kycklingkvitter från uC?

Inlägg av bearing »

Tack för hjälpen, Matlab-funktionerna verkar intressanta! Tyvärr har jag inte tillgång till Matlab.
Det jag skulle vilja göra är att dela upp pipet i typ 100 delar, och sedan hitta frekvenstoppen på varje del. Då skulle jag kunna få en sorts frekvens över tid-kurva.

Jag provade nu att göra den analysen manuellt i Audacity genom att markera korta delar av chirp_16bit_44khz.wav, och sedan köra FFT på den, successivt genom hela filen.

Fick fram att ljudet består av tre faser:
1. Ramp 4,5 kHz till 5 kHz i 15 ms
2. 5kHz i 100ms
3. Ramp 5kHz ner till 3 kHz i 50 ms

Provade att programmera en sån sekvens med fyrkantvåg i en PIC. Låter ganska risigt. Men ljudet kan nog accepteras som kycklingkvitter om högtalaren placeras i något som liknar en kyckling.

Ska försöka fixa så att även volymdynamiken ingår i sekvensen. Det kommer nog ge lite bättre resultat.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Kycklingkvitter från uC?

Inlägg av JimmyAndersson »

Fyrkantvågen har lite för "perfekta" övertoner, så det blir lite stelt ljud.
Dista den lite eller kör med triangelvåg så kan det bli bättre.

Sånt här kvitter gör man enklast genom att börja med en hög ton (hög frekvens) som man sedan sänker linjärt under hela tiden som pipet pågår (t.ex 1/5 sekund). Snyggast blir det om man även har ett resonansfilter (eller åtminstone högpassfilter) som också sänks frekvensmässigt under samma tid, men det är överkurs. :)

För att öka realismen så kan man variera start-frekvensen på varje pip, men det får inte ändras för mycket på en gång.
Volymen går förstås också att ändra. Den kan man isåfall ändra ganska kraftigt (men långsamt) från pip till pip.

Hur man fixar det med kod vet jag inte såhär på rak arm. Jag bara hör beståndsdelarna i ljud, jag ser ingen kod. :D
(Däremot har jag en gång gjort fågelkvitter med 3st 741-kretsar.)


Berätta gärna hur det går och lägg upp ljudklipp om du vill.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Kycklingkvitter från uC?

Inlägg av bearing »

Aha! jag provade med ton på 5 kHz som sänktes linjärt ner till 3 kHz under 100ms, och det låter riktigt fågellikt. Verkar som att den nedåtgående rampen är det viktigaste för att det ska låta fågellikt. Kycklingpipet innehåller även en fast ton just innan rampen.

Det här är del av årets påskpyssel, där en PIC ska driva en liten högtalare direkt via ett motstånd. Har inte möjlighet att dista ljudet eller något sånt. Får klara mig med fyrkantvågen.

Men nu är jag ganska nöjd!
Med både någorlunda lik frekvensgång och "envelope" (tror jag det kallas, alltså variationen av amplituden/volymen under pipet) låter det ganska likt. Det som saknas är de "krispigaste" komponenterna i ljudet, vilket hörs om man jämför med inspelade kycklingljudet som länkas ovan.

http://dl.dropbox.com/u/770240/kyckling/result.wav

Recept:
1. Ramp 4,5 kHz till 5 kHz i 50 cykler 50% volym
2. 5kHz i 250 cykler 50% volym
3. Ramp 5kHz ner till 3 kHz i 250 cykler 100% volym
4. Tyst ca ½ sekund

(Det första steget kan man nog hoppa över)

Kan publicera koden senare när jag provat mer.
Nerre
Inlägg: 27257
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Kycklingkvitter från uC?

Inlägg av Nerre »

Om frekvensområdet är någorlunda smalt (och det verkar det ju vara?) så borde du ju kunna lågpassfiltrera relativt enkelt med kanske bara en konding parallellt med högtalaren? Då får du bort en del av övertonerna.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Kycklingkvitter från uC?

Inlägg av E85 »

Varför kollade du inte på spectrogrammet då som jag tipsade om? Syns väldigt tydligt i det.

Bild
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Kycklingkvitter från uC?

Inlägg av bearing »

Därför att du inte berättade var i programmet man får fram det. Jag trodde du syftade på analyze->plot spectrogram, vilket jag använde genom att markera bit för bit genom hela klippet. Nu hittade jag spectrogrammet du syftade på, och det verkar ju vara klockrent för det här. Fast mitt spectrogram ser inte ut som din bild. Skalan går bara till 7kHz, och har inte några delsteg. Hur ändrar jag det?
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Kycklingkvitter från uC?

Inlägg av E85 »

Hmm, ja lite dåligt förklarat kanske men jag sa ju var man hittade det. :vissla:
Jag har inte ändrat några andra inställningar så jag vet inte riktigt vad det kan bero på.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Kycklingkvitter från uC?

Inlägg av bearing »

Nu efteråt verkar din beskrivning om var min hittar spektrogramet bra, så jag förstår inte varför jag inte förstod direkt.

Vilket version har du?
1.2.6 här

Under edit->preferences->spectrograms kunde jag knappa in 20000kHz maxfrekvens, men där fanns inga inställningar för delstegen.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Kycklingkvitter från uC?

Inlägg av E85 »

Jag har version 1.3.11-beta (rekommenderas framför 1.2 stable för Win7/Vista på deras hemsida). Såg den inställningen också men min stod på max 8000Hz så vet inte vad den inställningen gör riktigt.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Kycklingkvitter från uC?

Inlägg av bearing »

La in 1.3.11 beta nu och fick delstegen. Fanns mer inställningar i preferences också.
Användarvisningsbild
wombat
Inlägg: 721
Blev medlem: 6 november 2006, 16:39:08
Ort: Stockholm

Re: Kycklingkvitter från uC?

Inlägg av wombat »

Superbra! :tumupp:

Visade sambon tråden.
Hennes kommentar:
-"Nördar!" :D
Men hon köpte ljudet rakt av.
Spelade det först.
-"Vad är det där för fågel?" :D

Är intresserad av att se koden.
Håller själv på med ljudalstring från PIC 10F200.
Mest melodispel än så länge, men det vore roligt
att göra mera komplexa ljud.
Lite meckigt dock i och med att jag kör ljudalstringen
parallellt med pwm till 4 lysdiodgrupper. Skall funka,
dock inte just nu. :doh:

/W

EDIT>Ehhh, receptet räcker ju insåg jag precis. :roll: Mn rol å se kodn ennå! :D
Gimbal
Inlägg: 8687
Blev medlem: 20 april 2005, 15:43:53

Re: Kycklingkvitter från uC?

Inlägg av Gimbal »

:tumupp: det lät ju riktigt bra.
Skriv svar