[med-svn] [Git][med-team/praat][upstream] New upstream version 6.1.53

Rafael Laboissière (@rafael) gitlab at salsa.debian.org
Sun Sep 12 09:04:39 BST 2021



Rafael Laboissière pushed to branch upstream at Debian Med / praat


Commits:
4189febd by Rafael Laboissière at 2021-09-11T12:33:03-03:00
New upstream version 6.1.53
- - - - -


3 changed files:

- dwtest/test_Sound_noiseReduction.praat
- dwtools/Sound_extensions.cpp
- sys/GraphicsScreen.cpp


Changes:

=====================================
dwtest/test_Sound_noiseReduction.praat
=====================================
@@ -1,20 +1,44 @@
 # test_Sound_noiseReduction.praat
-# djmw 20190326
+# djmw 20190326, 20210831
 
 appendInfoLine: "test_Sound_noiseReduction.praat"
-sound = Create Sound from formula: "test", 1, 0, 1, 44100, "0.0"
-Formula: "randomGauss(0,0.1) + if x < 0.5 then 0.5*sin(2*pi*377*x) else 0 fi"
-spectrum = To Spectrum: "no"
-bandEnergy = Get band energy: 1000, 9000
-for i to 10
-	db = -10 * (i - 1)
-	selectObject: sound
-	copy = Copy: string$ (db)
-	soundReduced = Reduce noise: 0.5, 1, 0.025, 80, 10000, 40, db, "spectral-subtraction"
-	spectrumReduced = To Spectrum: "no"
-	bandEnergyReduced = Get band energy: 1000, 9000
-	appendInfoLine: tab$, "db=", db, " ", 10* log10 (bandEnergyReduced/4e-10), " ", 10* log10 (bandEnergyReduced / bandEnergy), " ", bandEnergy / bandEnergyReduced
-	removeObject: spectrumReduced, soundReduced, copy
-endfor
-removeObject: spectrum, sound
+
+
+@ test_reduction
+ at test_numberOfBands: 10
+
 appendInfoLine: "test_Sound_noiseReduction.praat OK"
+
+procedure test_reduction
+	appendInfoLine: tab$, "test_reduction"
+	.sound = Create Sound from formula: "test", 1, 0, 1, 44100, "0.0"
+	Formula: "randomGauss(0,0.1) + if x < 0.5 then 0.5*sin(2*pi*377*x) else 0 fi"
+	.spectrum = To Spectrum: "no"
+	.bandEnergy = Get band energy: 1000, 9000
+	for .i to 10
+		.db = -10 * (.i - 1)
+		selectObject: .sound
+		.copy = Copy: string$ (.db)
+		.soundReduced = Reduce noise: 0.5, 1, 0.025, 80, 10000, 40, .db, "spectral-subtraction"
+		.spectrumReduced = To Spectrum: "no"
+		.bandEnergyReduced = Get band energy: 1000, 9000
+		appendInfoLine: tab$, tab$, "db=", .db, " ", 10* log10 (.bandEnergyReduced/4e-10), " ", 
+		... 10* log10 (.bandEnergyReduced / .bandEnergy), " ", .bandEnergy / .bandEnergyReduced
+		removeObject: .spectrumReduced, .soundReduced, .copy
+	endfor
+	removeObject: .spectrum, .sound
+	appendInfoLine: tab$, "test_reduction OK"
+endproc
+
+procedure test_numberOfBands: .numberOfTries
+	appendInfoLine: tab$, "test_numberOfBands"
+	for .i to .numberOfTries
+		.samplingFrequency = randomUniform(1000, 50000)
+		.sound = Create Sound from formula: "test", 1, 0, 1, .samplingFrequency, "0.0"
+		.windowLength = randomUniform (0.005,0.06)
+		.soundReduced = Reduce noise: 0.5, 1, .windowLength, 80, 10000, 40, -20, "spectral-subtraction"
+		appendInfoLine: tab$, tab$, "Fmax = ", .samplingFrequency, " windowLength = ", .windowLength
+		removeObject: .sound, .soundReduced
+	endfor
+	appendInfoLine: tab$, "test_numberOfBands OK"
+endproc
\ No newline at end of file


=====================================
dwtools/Sound_extensions.cpp
=====================================
@@ -2586,20 +2586,33 @@ static autoSound Sound_reduceNoiseBySpectralSubtraction_mono (Sound me, Sound no
 		Melder_require (noise -> ny == 1 && noise -> ny == 1,
 			U"The number of channels in the noise and the sound should equal 1.");
 
-		const double samplingFrequency = 1.0 / my dx;
+		const double samplingFrequency = 1.0 / my dx, nyquistFrequency = 0.5 / my dx;
 		autoSound denoised = Sound_create (1, my xmin, my xmax, my nx, my dx, my x1);
 		autoSound const analysisWindow = Sound_createSimple (1, windowLength, samplingFrequency);
 		const integer windowSamples = analysisWindow -> nx;
+		const integer wantedNumberOfFrequencyBins = windowSamples / 2 + 1;
 		autoSound const noise_copy = Data_copy (noise);
 		Sound_multiplyByWindow (noise_copy.get(), kSound_windowShape::HANNING);
-		const double bandwidth = samplingFrequency / windowSamples;
+		/*
+			The number of bands in the noise Ltas and the number of frequencies in the 
+			sound spectra preferably should to be equal.
+			numberOfBands = Melder_iceiling (nyquistFrequency / bandwidth)
+			wantedNumberOfFrequencyBins = windowSamples / 2 + 1;
+			We can calculate the bandwidth to make numberOfBands == wantedNumberOfFrequencyBins by applying 
+			the following two conditions
+			(1) nyquistFrequency / b > wantedNumberOfFrequencyBins - 1 && (2) nyquistFrequency / b < wantedNumberOfFrequencyBins
+			(1) gives b1 < nyquistFrequency / (wantedNumberOfFrequencyBins - 1)
+			(2) gives b2 > nyquistFrequency / wantedNumberOfFrequencyBins
+			Take b = (b1 + b2) / 2
+		*/
+		double bandwidth = nyquistFrequency * (wantedNumberOfFrequencyBins - 0.5) / (wantedNumberOfFrequencyBins * (wantedNumberOfFrequencyBins - 1));
 		autoLtas const noiseLtas = Sound_to_Ltas (noise_copy.get(), bandwidth);
+		Melder_assert (noiseLtas -> nx == wantedNumberOfFrequencyBins);
 		autoVEC const noiseAmplitudes = raw_VEC (noiseLtas -> nx);
 		for (integer iband = 1; iband <= noiseLtas -> nx; iband ++) {
 			const double powerDensity = 4e-10 * pow (10.0, noiseLtas -> z [1] [iband] / 10.0);
 			noiseAmplitudes [iband] = sqrt (0.5 * powerDensity);
 		}
-		
 		autoMelderProgress progress (U"Remove noise");
 		
 		const double noiseAmplitudeSubtractionScaleFactor = 1.0 - pow (10.0, noiseReduction_dB / 20.0);


=====================================
sys/GraphicsScreen.cpp
=====================================
@@ -604,6 +604,9 @@ autoGraphics Graphics_create_pdffile (MelderFile file, int resolution,
 			isdefined (y1inches) ? 1.0 : 0.0, isdefined (y1inches) ? 12.0 : y2inches
 		);
 		cairo_scale (my d_cairoGraphicsContext, 72.0 / resolution, 72.0 / resolution);
+		cairo_translate (my d_cairoGraphicsContext,
+			( isdefined (x1inches) ? - x1inches : 0.0 ) * resolution,
+			( isdefined (y1inches) ? y2inches - 12.0 : 0.0 ) * resolution);
 	#elif quartz
 		CFURLRef url = CFURLCreateWithFileSystemPath (nullptr, (CFStringRef) Melder_peek32toCfstring (file -> path), kCFURLPOSIXPathStyle, false);
 		CGRect rect = CGRectMake (0, 0,



View it on GitLab: https://salsa.debian.org/med-team/praat/-/commit/4189febd3f6e96b0bcfa34e0692cfcb0c0b009d2

-- 
View it on GitLab: https://salsa.debian.org/med-team/praat/-/commit/4189febd3f6e96b0bcfa34e0692cfcb0c0b009d2
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20210912/a13b1277/attachment-0001.htm>


More information about the debian-med-commit mailing list