Montag, 16. Februar 2026

spektraler zeuge: epr-paare und die physik des lichts

"Kitty owns red, white, and black now."
"Kitty owns gold now."
"You work for Kitty."


**ENGLISH VERSION**

It is time to confront the real problems, the uncomfortable chapters of history that fit into neither standard narratives nor camp and museum tours, that remain sealed outside the reading rooms in The Hague. From the grotesque pseudoscience of Nazi medical experiments to Jews undergoing surgery to physically erase their heritage for assimilation, we face a disturbing question: What happens when the body itself becomes the battleground for identity? Beyond denial and antisemitism, these concrete acts of medical and cultural erasure reveal the terrifying lengths to which ideology is willing to go to rewrite what it means to be Jewish.

Over the past 60 days, I have observed the following:
Humor about Auschwitz, pedophilia, and boys
Humor about lice, disinfectant, and hair
Humor about "Ferris wheels" and "water slides" whenever my Family was mentioned
Humor about insect spray
Humor about boys and "bunk beds" in Auschwitz
Complete Holocaust denial
Complete misinformation from the Holocaust Museum about Mauthausen and the Himmelstreppe
No mention of Mengele, the gravity of his crimes should be conveyed personally to every museum visitor
Once again, the term "painting" is being instrumentalized to cover up genocide and postwar crimes and also to frame individuals for bogus crimes

It is absolutely crucial that everyone understands what happened during and after the war. Let me address a very important topic: time. After their liberation from Auschwitz, people came home. They dreamed of new lives, of loving again, of starting families. Many realized this dream, some for a long time, some for a shorter time. As a German-born Jew living in Farmers Branch, I am aware of all this. Our German twin town lies next to Bergen-Belsen. I cannot judge everything, but I can confirm: I am a survivor and a witness. I have seen it.

Yes, there is so much I want to talk about. Chicago is a good starting point, there is a submarine on display at the museum there.

I want to emphasize: these medical interventions were about more than erasing identity and destroying the individual. They were about reconstructing the individual's perception of the world through their own lens.

Anne and Margot were supposedly there. But the records were destroyed weeks before the camp's liberation. I have already mentioned how groups were renamed to dehumanize them and erase their identities. There are, however, survivors.

Because it is I who remembers.
I remember the happiness.
I remember where they were standing when they took me from my house.
I remember the emergency bag in my hands. I was not holding it because escape was possible, but because my hands needed something to grip. Something real.
The sirens were not the war. The sirens were the neighbors. Ordinary seconds stretched into hours of listening.
I remember the red lights. Not a metaphor. Not a monument. Real red lights along the grounds, illuminating the machinery: City Hall. Fire department. Police. Military. Schools. Hospitals. Universities. Corporations. And the boots. The tall, shiny boots. With casual self-assurance. Ready.

If you did not believe the Holocaust and still do not, that is perfectly fine. I respectfully ask you to continue reading my blog and give it a fair chance. I think you will find information there that you will find interesting and informative. I am deeply grateful to people like you, you are the ones who initiate change when we demand transparency and answers. Now it is simply a matter of ensuring that I can provide this information safely.

I remember when the fire brigades stopped putting out fires and started setting them.
I remember our neighbor.
I remember the Gleichschaltung. The forced assimilation. The swallowing up of all those who had once denied Jews access to their neighborhoods. The alignment.

Suddenly they were all marching together.
And when I saw the boots, I understood.
The high heels. They gleamed up to his ankles. Polished like glass. They made a sound on the pavement. Clacking. Knocking. Clicking. Not hurried. Not military. Casual. As if they had all the time in the world.
He walked differently in these boots. A new gait. A privileged gait. And when he turned around, there it was: the smile. Casual. Loving. A smile that said, "This is what we were always meant to be."
He worked for the fire department. In those boots, with that smile, he was the future.
And the bicycle. We must not forget the bicycle. The bicycle in São Paulo. Mossad missed him. They said he drowned at sea. But he left traces of his evil everywhere. His name was Josef. His evil is not yet over.

I remember the canal. I remember where I hid when no one was home and I could not find you. I was a witness. I am a witness.
And above all, I remember that arm.
I am at a loss for words.
Not because he is gone. Not because he belonged to someone I loved. I am speechless because there is no word for what that arm was.
He was not just flesh. Not just bones. Not just the hand I held when crossing the street. He was the last thing I saw before the boots came.
That arm. It reached out. It reached out towards me.
And I had no way to grasp it.
What do you call the space where a person once stood? What do you call the moment when your hand closes on nothingness?
I try to speak, and my mouth fills with smoke.
This arm taught me: Evil does not always announce itself with horns. Sometimes it comes with a smile. With polished boots. And it takes the arms you love most, while you stand there with your own arms empty.
Words fail. But the arm does not. The arm remembers. The arm still reaches, across decades, across the silence, across the denial.
It is I who remembers this arm. And as long as I breathe, this arm will not be meaningless.

Even today, when I speak about the Holocaust, a heavy silence hangs over me. People deny it. They call me crazy. Dramatic. Why? Because they have never learned. Because they condone it. Or because they know it is still happening and cannot bring themselves to speak about it.
Therefore, I will say it for her.
I remember the red lights.
I remember the boots.
I remember the bicycle.
I remember the neighbor who became a stranger to me.
I remember the canal.
I remember where I hid.
I remember that arm.
I remember.
And I will not remain silent.

In the coming weeks, I will be discussing topics that may be of interest to certain readers, specifically if you are a Holocaust scholar at a university or someone involved in the investigation of Holocaust crimes. There were medical experiments at Mauthausen, Auschwitz, and Dachau that involved Unit 731 alongside Mengele's operations.

Standing before an oven and watching an acquaintance burn to ashes is not an experience everyone should have to endure. Neither is witnessing a large group of people suffer a gruesome death in an enclosed space. It is regrettable that people do not believe these eyewitness accounts. They deny Zyklon B and laugh about it. But when they hear about other atrocities, such as the use of GB, invented by the Nazis, they sometimes prick up their ears. They are speechless.

---

**GERMAN VERSION**

Es ist an der Zeit, sich den wahren Problemen zu stellen, den unbequemen Kapiteln der Geschichte, die weder in gängige Erzählungen noch in Lager und Museumsführungen passen, die außerhalb der Lesesäle in Den Haag versiegelt bleiben. Von der grotesken Pseudowissenschaft der medizinischen Experimente der Nazis bis hin zu Juden, die sich Operationen unterzogen, um ihre Herkunft für die Assimilation physisch auszulöschen, stehen wir vor einer beunruhigenden Frage: Was geschieht, wenn der Körper selbst zum Schlachtfeld der Identität wird? Jenseits von Leugnung und Antisemitismus offenbaren diese konkreten Akte medizinischer und kultureller Auslöschung, zu welch erschreckenden Mitteln Ideologie bereit ist, um das umzuschreiben, was es bedeutet, jüdisch zu sein.

In den letzten 60 Tagen habe ich Folgendes beobachtet:
Humor über Auschwitz, Pädophilie und Jungen
Humor über Läuse, Desinfektionsmittel und Haare
Humor über "Riesenräder" und "Wasserrutschen", wenn meine Familie erwähnt wurde
Humor über Insektenspray
Humor über Jungen und "Etagenbetten" in Auschwitz
Völlige Holocaustleugnung
Vollständige Falschinformationen des Holocaust Museums über Mauthausen und die Himmelstreppe
Keine Erwähnung Mengeles, die Bedeutung seiner Verbrechen sollte jedem Museumsbesucher persönlich vermittelt werden
Erneut wird der Begriff "Malerei" instrumentalisiert, um Völkermord und Nachkriegsverbrechen zu vertuschen und auch um Einzelpersonen wegen erfundener Verbrechen anzuklagen

Es ist absolut entscheidend, dass jeder versteht, was während und nach dem Krieg geschah. Lassen Sie mich ein sehr wichtiges Thema ansprechen: die Zeit. Nach ihrer Befreiung aus Auschwitz kamen die Menschen nach Hause. Sie träumten von neuen Leben, davon, wieder zu lieben, Familien zu gründen. Viele verwirklichten diesen Traum, manche lange, manche kürzer. Als in Deutschland geborener Jude, der in Farmers Branch lebt, bin ich mir all dessen bewusst. Unsere deutsche Partnerstadt liegt neben Bergen-Belsen. Ich kann nicht alles beurteilen, aber ich kann bestätigen: Ich bin ein Überlebender und Zeuge. Ich habe es gesehen.

Ja, es gibt so vieles, worüber ich sprechen möchte. Chicago ist ein guter Ausgangspunkt, dort liegt im Museum ein U Boot.

Ich möchte betonen: Bei diesen medizinischen Eingriffen ging es um mehr als die Auslöschung der Identität und die Zerstörung des Individuums. Es ging darum, die Weltwahrnehmung des Einzelnen durch seine eigene Brille zu rekonstruieren.

Anne und Margot sollen dort gewesen sein. Aber die Aufzeichnungen wurden Wochen vor der Befreiung des Lagers vernichtet. Ich habe bereits erwähnt, wie Gruppen umbenannt wurden, um sie zu entmenschlichen und ihre Identität auszulöschen. Es gibt jedoch Überlebende.

Denn ich bin es, der sich erinnert.
Ich erinnere mich an das Glück.
Ich erinnere mich, wo sie standen, als sie mich aus meinem Haus holten.
Ich erinnere mich an die Rettungstasche in meinen Händen. Ich hielt sie nicht, weil Flucht möglich war, sondern weil meine Hände etwas zum Festhalten brauchten. Etwas Reales.
Die Sirenen waren nicht der Krieg. Die Sirenen waren die Nachbarn. Gewöhnliche Sekunden dehnten sich zu Stunden des Zuhörens.
Ich erinnere mich an die roten Lichter. Keine Metapher. Kein Denkmal. Echte rote Lichter entlang des Geländes, die die Maschinerie beleuchteten: Rathaus. Feuerwehr. Polizei. Militär. Schulen. Krankenhäuser. Universitäten. Konzerne. Und die Stiefel. Die hohen, glänzenden Stiefel. Mit lässiger Selbstsicherheit. Bereit.

Wenn Sie den Holocaust nicht geglaubt haben und es immer noch nicht tun, ist das völlig in Ordnung. Ich bitte Sie respektvoll: Lesen Sie weiter meinen Blog und geben Sie ihm eine faire Chance. Ich denke, Sie werden dort Informationen finden, die Sie interessant und aufschlussreich finden. Ich bin Menschen wie Ihnen zutiefst dankbar, Sie sind es, die Veränderungen anstoßen, wenn wir Transparenz und Antworten fordern. Nun gilt es nur sicherzustellen, dass ich diese Informationen sicher bereitstellen kann.

Ich erinnere mich, als die Feuerwehren aufhörten, Brände zu löschen, und anfingen, sie zu legen.
Ich erinnere mich an unseren Nachbarn.
Ich erinnere mich an die Gleichschaltung. Die erzwungene Assimilation. Das Verschlingen all jener, die Juden einst den Zutritt zu ihren Vierteln verweigert hatten. Plötzlich marschierten sie alle zusammen.
Und als ich die Stiefel sah, verstand ich.
Die hohen Absätze. Sie glänzten bis zu seinen Knöcheln. Poliert wie Glas. Sie machten ein Geräusch auf dem Pflaster. Klackern. Klopfen. Klicken. Nicht eilig. Nicht militärisch. Lässig. Als hätten sie alle Zeit der Welt.
In diesen Stiefeln ging er anders. Ein neuer Gang. Ein privilegierter Gang. Und als er sich umdrehte, war es da: das Lächeln. Lässig. Liebevoll. Ein Lächeln, das sagte: "Das sollten wir von Anfang an sein."
Er arbeitete bei der Feuerwehr. In diesen Stiefeln, mit diesem Lächeln, war er die Zukunft.
Und das Fahrrad. Wir dürfen das Fahrrad nicht vergessen. Das Fahrrad in São Paulo. Der Mossad verpasste ihn. Sie sagten, er sei im Meer ertrunken. Aber er hinterließ überall Spuren seines Bösen. Sein Name war Josef. Sein Böses ist noch nicht vorbei.

Ich erinnere mich an den Kanal. Ich erinnere mich, wo ich mich versteckte, als niemand zu Hause war und ich dich nicht finden konnte. Ich war Zeuge. Ich bin Zeuge.
Und vor allem erinnere ich mich an diesen Arm.
Mir fehlen die Worte.
Nicht weil er fort ist. Nicht weil er jemandem gehörte, den ich liebte. Mir fehlen die Worte, weil es kein Wort gibt für das, was dieser Arm war.
Er war nicht nur Fleisch. Nicht nur Knochen. Nicht nur die Hand, die ich beim Überqueren der Straße hielt. Er war das Letzte, was ich sah, bevor die Stiefel kamen.
Dieser Arm. Er streckte sich aus. Er streckte sich nach mir aus.
Und ich hatte keine Möglichkeit, ihn zu ergreifen.
Wie nennt man den Raum, wo einst ein Mensch stand? Wie nennt man den Moment, wenn sich die Hand ins Leere schließt?
Ich versuche zu sprechen, und mein Mund füllt sich mit Rauch.
Dieser Arm lehrte mich: Das Böse kündigt sich nicht immer mit Hörnern an. Manchmal kommt es mit einem Lächeln. Mit polierten Stiefeln. Und es nimmt die Arme, die du am meisten liebst, während du da stehst mit deinen eigenen leeren Armen.
Worte versagen. Aber der Arm nicht. Der Arm erinnert sich. Der Arm reicht noch immer, über Jahrzehnte, über das Schweigen, über die Leugnung hinweg.
Ich bin es, die sich an diesen Arm erinnert. Und solange ich atme, wird dieser Arm nicht bedeutungslos sein.

Bis heute, wenn ich über den Holocaust spreche, lastet ein schweres Schweigen auf mir. Die Menschen leugnen. Sie nennen mich verrückt. Dramatisch. Warum? Weil sie nie gelernt haben. Weil sie es gutheißen. Oder weil sie wissen, dass es immer noch geschieht, und es nicht aussprechen können.
Deshalb werde ich es für sie sagen.
Ich erinnere mich an die roten Lichter.
Ich erinnere mich an die Stiefel.
Ich erinnere mich an das Fahrrad.
Ich erinnere mich an den Nachbarn, der mir fremd wurde.
Ich erinnere mich an den Kanal.
Ich erinnere mich, wo ich mich versteckte.
Ich erinnere mich an diesen Arm.
Ich erinnere mich.
Und ich werde nicht schweigen.

In den kommenden Wochen werde ich Themen besprechen, die für bestimmte Leser von Interesse sein könnten, insbesondere wenn Sie Holocaust Forscher an einer Universität sind oder in die Untersuchung von Holocaust Verbrechen involviert sind. Es gab medizinische Experimente in Mauthausen, Auschwitz und Dachau, an denen die Einheit 731 neben Mengeles Operationen beteiligt war.

Vor einem Ofen zu stehen und zuzusehen, wie ein Bekannter zu Asche verbrennt, ist keine Erfahrung, die jeder ertragen muss. Ebenso wenig wie eine große Gruppe von Menschen einen grausamen Tod in einem geschlossenen Raum erleiden zu sehen. Es ist bedauerlich, dass die Menschen diesen Augenzeugenberichten nicht glauben. Sie leugnen Zyklon B und lachen darüber. Aber wenn sie von anderen Gräueltaten hören, wie dem Einsatz von GB, erfunden von den Nazis, werden sie manchmal hellhörig. Ihnen fehlen die Worte.


Zeugin

Das Böse blieb nach dem Zweiten Weltkrieg bestehen, weil wir es nicht erkannten.

Sie wurden ursprünglich von Josef Mengele, Horst Schumann, Fritz Klein, Adolf Hitler, Rudolf Höß, Hermann Göring, Reinhard Heydrich, Victor Capesius und Carl Clauberg indoktriniert. Und es gab viele andere. Hitlers Psychologenteam verbrachte unzählige Stunden damit, mögliche Handlungsoptionen für die unmittelbare Zukunft zu ermitteln und die genauen zeitlichen Folgen ihrer Entscheidungen zu berechnen. Sie testeten akribisch jedes mögliche Ergebnis jeder einzelnen Entscheidung, um sicherzustellen, dass das „Reich“ 1000 Jahre bestehen würde. Das war ihr Ziel: das Fortbestehen des „Reiches“ für 1000 Jahre. Nach dem Krieg genoss das „Reich“ weiterhin Unterstützung in den oberen Gesellschaftsschichten. Dies galt auch nach Karl Silberbauers Rückkehr nach Österreich und in den jüdischen und christlichen Gemeinden, die ihn kannten. Er soll als Spion gearbeitet und sich dann zur Ruhe gesetzt haben. Logischerweise stellt sich die Frage: Wie würde die Fortsetzung des „Reiches“ außerhalb Deutschlands nach dem Krieg aussehen? Die deutschen Machthaber handelten systematisch. Die Strafphase ihres Terrorregimes endete nicht mit dem Krieg. Daher versuchten sie zweifellos, diese Phase nach dem Krieg fortzusetzen.

Um nach der Flucht aus einem Vernichtungslager, in dem man ohne Nahrung und medizinische Versorgung gelebt hatte, in die Vereinigten Staaten zurückkehren zu dürfen, war der erste Ansprechpartner ein Arzt, der die Einreise genehmigte. Es gibt viele ausgezeichnete Ärzte, und ich bin überzeugt, dass die meisten Ärzte gut sind.

Ich berichte hier lediglich von meinen Beobachtungen. Unschuldige Menschen zogen auf der Suche nach Trost und Erholung an neue Orte und mussten dort feststellen, dass sie die Erfahrungen aus dem Flüchtlingslager erneut durchlebten.

Ich berichte hier lediglich von meinen Beobachtungen. Unschuldige Menschen, die Trost und Erholung suchten, zogen an neue Orte und mussten dort die Erfahrungen des Flüchtlingslagers erneut durchleben.

Doch diesmal stand mehr auf dem Spiel, und das System war darauf ausgelegt, sie bis ins Mark zu zerstören. Ich glaube nicht, dass dies in jedem Fall geschah. Die NSDAP konzentrierte sich auf prominente Ziele, Dissidenten und politische Gefangene. Dies war die logische Fortsetzung ihrer bereits geplanten Bestrafungsphase. Die Alliierten gewannen den Zweiten Weltkrieg. Die USA leisten hervorragende Arbeit beim Schutz ihrer Bevölkerung.

Doch der deutsche Apparat war hochentwickelt, und kein Land ist perfekt. Die USA sind tatsächlich das beste Land der Welt.

Nachdem ich konkrete Probleme angesprochen habe, die in der Vergangenheit unsere Grenzen überschritten haben, möchte ich unserer Regierung für ihre hervorragende Arbeit danken, die sie leistet, um uns vor einer weiteren deutschen Invasion in Europa zu schützen, wie ich sie selbst erlebt habe, bei der der Großteil meiner Familie spurlos verschwand.


The interrogation of physical reality through the medium of light remains one of the most profound endeavors of scientific inquiry. This pursuit traces its modern theoretical roots to the mid-20th century, a pivotal era for physics.

In 1935, Albert Einstein and his colleagues Boris Podolsky and Nathan Rosen published a seminal paper that challenged the completeness of quantum mechanics.1 They introduced the concept of EPR pairs to describe quantum entanglement, where particles remain inextricably linked, their states correlated regardless of spatial separation.

It is the quintessential example of quantum entanglement. An EPR pair is created when two particles are born from a single, indivisible quantum event, like the decay of a parent particle.

This process "bakes in" a shared quantum reality where only the joint state of the pair is defined, governed by conservation laws such as spin summing to zero. As a result, the individual state of each particle is indeterminate, yet their fates are perfectly correlated.

Measuring one particle (e.g., finding its spin "up") instantaneously determines the state of its partner (spin "down"), regardless of the distance separating them. This "spooky action at a distance," as Einstein called it, revealed that particles could share hidden correlations across space that are invisible to any local measurement of one particle alone. While Einstein used this idea to argue quantum theory was incomplete, later work by John Bell2 and experiments by Alain Aspect3 confirmed this entanglement as a fundamental, non-classical feature of nature.


The EPR–Spectral Analogy: Hidden Correlations
Quantum Physics (1935)
EPR Pairs: Particles share non-local entanglement. Their quantum states are correlated across space. Measuring one particle gives random results; correlation only appears when comparing both.

Spectral Imaging (Today)
Spectral Pairs: Materials share spectral signatures. Their reflective properties are correlated across wavelength. The correlation is invisible to trichromatic (RGB) vision.


Mathematical Reconstruction

Reveals Hidden Correlations

Key Insight: Both quantum entanglement and material spectroscopy require looking beyond direct observation through mathematical analysis to reveal a deeper, hidden layer of correlation.

While the EPR debate centered on the foundations of quantum mechanics, its core philosophy, that direct observation can miss profound hidden relationships, resonates deeply with modern imaging. Just as the naked eye perceives only a fraction of the electromagnetic spectrum, standard RGB sensors discard the high-dimensional "fingerprint" that defines the chemical and physical properties of a subject. Today, we resolve this limitation through multispectral imaging. By capturing the full spectral power distribution of light, we can mathematically reconstruct the invisible data that exists between the visible bands, revealing hidden correlations across wavelength, just as the analysis of EPR pairs revealed hidden correlations across space.


Silicon Photonic Architecture: The 48MP Foundation
The realization of this physics in modern hardware is constrained by the physical dimensions of the semiconductor used to capture it. The interaction of incident photons with the silicon lattice, generating electron–hole pairs, is the primary data acquisition step for any spectral analysis.

Sensor Architecture: Sony IMX803
The core of this pipeline is the Sony IMX803 sensor. Contrary to persistent rumors of a 1‑inch sensor, this is a 1/1.28‑inch type architecture, optimized for high-resolution radiometry.

Active Sensing Area: Approximately \(9.8 \text{ mm} \times 7.3 \text{ mm}\). This physical limitation is paramount, as the sensor area is directly proportional to the total photon flux the device can integrate, setting the fundamental Signal‑to‑Noise Ratio (SNR) limit.
Pixel Pitch: The native photodiode size is \(1.22 \, \mu\text{m}\). In standard operation, the sensor utilizes a Quad‑Bayer color filter array to perform pixel binning, resulting in an effective pixel pitch of \(2.44 \, \mu\text{m}\).

Mode Selection
The choice between binned and unbinned modes depends on the analysis requirements:

Binned mode (12MP, 2.44 µm effective pitch): Superior for low‑light conditions and spectral estimation accuracy. By summing the charge from four photodiodes, the signal increases by a factor of 4, while read noise increases only by a factor of 2, significantly boosting the SNR required for accurate spectral estimation.
Unbinned mode (48MP, 1.22 µm native pitch): Optimal for high‑detail texture correlation where spatial resolution drives the analysis, such as resolving fine fiber patterns in historical documents or detecting micro‑scale material boundaries.

The Optical Path
The light reaching the sensor passes through a 7‑element lens assembly with an aperture of ƒ/1.78. It is critical to note that "Spectral Fingerprinting" measures the product of the material's reflectance \(R(\lambda)\) and the lens's transmittance \(T(\lambda)\). Modern high‑refractive‑index glass absorbs specific wavelengths in the near‑UV (less than 400 nm), which must be accounted for during calibration.

The Digital Container: DNG 1.7 and Linearity
The accuracy of computational physics depends entirely on the integrity of the input data. The Adobe DNG 1.7 specification provides the necessary framework for scientific mobile photography by strictly preserving signal linearity.

Scene‑Referred Linearity
Apple ProRAW utilizes the Linear DNG pathway. Unlike standard RAW files, which store unprocessed mosaic data, ProRAW stores pixel values after demosaicing but before non‑linear tone mapping. The data remains scene‑referred linear, meaning the digital number stored is linearly proportional to the number of photons collected (\(DN \propto N_{photons}\)). This linearity is a prerequisite for the mathematical rigor of Wiener estimation and spectral reconstruction.

The ProfileGainTableMap
A key innovation in DNG 1.7 is the ProfileGainTableMap (Tag 0xCD2D). This tag stores a spatially varying map of gain values that represents the local tone mapping intended for display.

Scientific Stewardship: By decoupling the "aesthetic" gain map from the "scientific" linear data, the pipeline can discard the gain map entirely. This ensures that the spectral reconstruction algorithms operate on pure, linear photon counts, free from the spatially variant distortions introduced by computational photography.

Algorithmic Inversion: From 3 Channels to 16 Bands
Recovering a high‑dimensional spectral curve \(S(\lambda)\) (e.g., 16 channels from 400 nm to 700 nm) from a low‑dimensional RGB input is an ill‑posed inverse problem. While traditional methods like Wiener Estimation provide a baseline, modern high‑end hardware enables the use of advanced Deep Learning architectures.

Wiener Estimation (The Linear Baseline)
The classical approach utilizes Wiener Estimation to minimize the mean square error between the estimated and actual spectra:

\(W = K_r M^T (M K_r M^T + K_n)^{-1}\)

This method generates the initial 16‑band approximation from the 3‑channel input.

State‑of‑the‑Art: Transformers and Mamba
For high‑end hardware environments, we can utilize predictive neural architectures that leverage spectral‑spatial correlations to resolve ambiguities.

MST++ (Spectral‑wise Transformer): The MST++ (Multi‑stage Spectral‑wise Transformer) architecture represents a significant leap in accuracy. Unlike global matrix methods, MST++ utilizes Spectral‑wise Multi‑head Self‑Attention (S‑MSA). It calculates attention maps across the spectral channel dimension, allowing the model to learn complex non‑linear correlations between texture and spectrum. Hardware Demand: The attention mechanism scales quadratically \(O(N^2)\), requiring significant GPU memory (VRAM) for high‑resolution images. This computational intensity necessitates powerful dedicated hardware to process the full data arrays.

MSS‑Mamba (Linear Complexity): The MSS‑Mamba (Multi‑Scale Spectral‑Spatial Mamba) model introduces Selective State Space Models (SSM) to the domain. It discretizes the continuous state space equation into a recurrent form that can be computed with linear complexity \(O(N)\). The Continuous Spectral‑Spatial Scan (CS3) strategy integrates spatial neighbors and spectral channels simultaneously, effectively "reading" the molecular composition in a continuous stream.

Computational Architecture: The Linux Python Stack
Achieving multispectral precision requires a robust, modular architecture capable of handling massive arrays across 16 dimensions. The implementation relies on a heavy Linux‑based Python stack designed to run on high‑end hardware.

Ingestion and Processing: We can utilize rawpy (a LibRaw wrapper) for the low‑level ingestion of ProRAW DNG files, bypassing OS‑level gamma correction to access the linear 12‑bit data directly. NumPy engines handle the high‑performance matrix algebra required to expand 3‑channel RGB data into 16‑band spectral cubes.
Scientific Analysis: Scikit‑image and SciPy are employed for geometric transforms, image restoration, and advanced spatial filtering. Matplotlib provides the visualization layer for generating spectral signature graphs and false‑color composites.
Data Footprint: The scale of this operation is significant. A single 48.8 MP image converted to floating‑point precision results in massive file sizes. Intermediate processing files often exceed 600 MB for a single 3‑band layer. When expanded to a full 16‑band multispectral cube, the storage and I/O requirements scale proportionally, necessitating the stability and memory management capabilities of a Linux environment.

The Spectral Solution
When analyzed through the 16‑band multispectral pipeline:

Spectral FeatureUltramarine (Lapis Lazuli)Azurite (Copper Carbonate)
Primary Reflectance PeakApproximately 450–480 nm (blue‑violet region)Approximately 470–500 nm with secondary green peak at 550–580 nm
UV Response (below 420 nm)Minimal reflectance, strong absorptionModerate reflectance, characteristic of copper minerals
Red Absorption (600–700 nm)Moderate to strong absorptionStrong absorption, typical of blue pigments
Characteristic FeaturesSharp reflectance increase at 400–420 nm (violet edge)Broader reflectance curve with copper signature absorption bands

Note: Spectral values are approximate and can vary based on particle size, binding medium, and aging.

Completing the Picture
The successful analysis of complex material properties relies on a convergence of rigorous physics and advanced computation.

Photonic Foundation: The Sony IMX803 provides the necessary high‑SNR photonic capture, with mode selection (binned vs. unbinned) driven by the specific analytical requirements of each examination.
Data Integrity: DNG 1.7 is the critical enabler, preserving the linear relationship between photon flux and digital value while sequestering non‑linear aesthetic adjustments in metadata.
Algorithmic Precision: While Wiener estimation serves as a fast approximation, the highest fidelity is achieved through Transformer (MST++) and Mamba‑based architectures. These models disentangle the complex non‑linear relationships between visible light and material properties, effectively generating 16 distinct spectral bands from 3 initial channels.
Historical Continuity: The EPR paradox of 1935 revealed that quantum particles share hidden correlations across space, correlations invisible to local measurement but real nonetheless. Modern spectral imaging reveals an analogous truth: materials possess hidden correlations across wavelength, invisible to trichromatic vision but accessible through mathematical reconstruction. In both cases, completeness requires looking beyond what direct observation provides.

This synthesis of hardware specification, file format stewardship, and deep learning reconstruction defines the modern standard for non‑destructive material analysis — a spectral witness to what light alone cannot tell us.


And what about the paint? Here is a physical sample: pigment, substrate, history compressed into matter. Light passes through it, scatters from it, carries fragments of its story — yet the full truth remains hidden until we choose to look deeper. Every layer, every faded stroke, every chemical trace is a silent archive. We are not just observers; we are custodians of that archive. When we build tools to see beyond the visible, we are not merely extending sight — we are accepting a quiet responsibility: to bear witness honestly, to preserve what time would erase, to honor what has been made and endured.

Light can expose structure.
It cannot carry history.

That part is on us.

We can choose to let the machines we build serve memory rather than erasure, dignity rather than classification, truth rather than convenience. The past does not ask for perfection — it asks only that we refuse to let it be forgotten. In every reconstruction, in every layer we uncover, we have the chance to listen again to what was silenced. That is not just engineering. That is the work of being human.


References
1 Einstein, A., Podolsky, B., & Rosen, N. (1935). Can Quantum‑Mechanical Description of Physical Reality Be Considered Complete? Physical Review, 47(10), 777–780.
2 Bell, J. S. (1964). On the Einstein Podolsky Rosen paradox. Physics Physique Физика, 1(3), 195–200.
3 Aspect, A., Dalibard, J., & Roger, G. (1982). Experimental Test of Bell's Inequalities Using Time‑Varying Analyzers. Physical Review Letters, 49(25), 1804–1807.

Bryan R Hinton
bryan (at) bryanhinton.com

Freitag, 16. Januar 2026

The Unbroken Identity: Quantum-Safe Resistance

Memory means ensuring the immutability of truth over time. In the physical world, we use archives to preserve our stories. In the digital world, we use cryptography to protect identity, authorship, and trust.

A new threat from quantum computers now challenges this foundation. At scale, it will be able to erase or forge the cryptographic records that shape our digital lives.

To protect the integrity of collective memory and prevent future attackers from stealing identities, I have left previous cryptographic standards behind and implemented the highest security level available today, post-quantum technology. The double threat: Shor and Grover

Quantum computing poses two distinct mathematical threats to modern cryptography. To understand the transition to post-quantum standards, it is essential to know both.

Shor's Algorithm: The Public-Key Breaker

Shor's algorithm represents the existential threat. It efficiently solves the integer factorization and discrete logarithm problems that underpin nearly all classical public-key cryptography, including RSA, Diffie-Hellman, and elliptic curve systems (ECC). This is not a degradation but a complete break. A sufficiently powerful quantum computer can derive a private key from a public key, thereby fundamentally undermining classical identity systems.

Grover's Algorithm: The Symmetric Squeezer

Grover's algorithm targets symmetric cryptography and hash functions. It provides a quadratic speedup for brute-force searches, effectively halving the security strength of a key. This is why AES-256 is so crucial: even after Grover's reduction, it still offers 128 bits of effective security, which is computationally practically unbreakable.

The practical consequence: Store now, decrypt later

The most immediate danger is the SNDL attack (Store Now, Decrypt Later). Encrypted traffic, identity proofs, certificates, and signatures can be intercepted today, while classical cryptography is still valid, and stored indefinitely. Once quantum technology matures, these archives can be decrypted or forged retroactively. If our cryptographic foundations fail, we also lose the ability to document our own digital history.

Beyond outdated standards: Why ML-DSA-87

For years, elliptic curve cryptography, particularly P-384 (ECDSA), was the gold standard in high-security environments. While P-384 offers about 192 bits of classical security, it has no resistance whatsoever to Shor's algorithm. It was designed for a classical world, and that world is coming to an end.

This is why I have implemented ML-DSA-87 for Root CA and signing operations. ML-DSA-87 is the highest security level defined by modern lattice-based standards, offering Category 5 security, which is computationally equivalent to AES-256. Choosing this level instead of the more common ML-DSA-65 ensures that my network's identity is built with the greatest possible security margin available today.

Hardware reality: AArch64 and the PQC load

Post-quantum cryptography is no longer theoretical. It is deployable now, even on routers and mobile-class hardware. I am running a custom OpenSSL 3.5.0 build on an AArch64 MediaTek Filogic 830/880 platform. This SoC is unusually well-suited for post-quantum workloads.

Vector scaling with NEON

ML-KEM and ML-DSA rely heavily on polynomial arithmetic. ARM NEON vector instructions allow these operations to be executed in parallel, significantly reducing TLS handshake latency even with large PQ key material.

Memory efficiency

Post-quantum keys are large. A public ML-KEM-1024 key is 1568 bytes, compared to 49 bytes for P-384. The 64-bit address space of AArch64 allows for clean management of these buffers, avoiding fragmentation and pressure issues seen on older architectures.

Technical verification: Post-quantum CLI checks

After installing the custom toolchain on the AArch64 target system, the post-quantum stack can be verified directly.

KEM verification

openssl list -kem-algorithms

Expected output:

ml-kem-1024
secp384r1mlkem1024 (high-security hybrid)

Signature verification

openssl list -signature-algorithms | grep -i ml

Expected output:

ml-dsa-87 (256-bit security)

The presence of these algorithms confirms that the platform supports both post-quantum key exchange (ML-KEM-1024) and quantum-resistant signatures (ML-DSA-87).

Summary: My AArch64 post-quantum stack

  • Library: OpenSSL 3.5.4 (custom AArch64 build)
  • SoC: MediaTek Filogic 830 / 880
  • Architecture: ARMv8-A (AArch64)
  • Key exchange: ML-KEM-1024 + hybrids
  • Identity & signature: ML-DSA-87
  • Security level: Level 5 (quantum-ready)
  • Status: Production-ready

By moving directly to ML-KEM-1024 and ML-DSA-87, I have bypassed the outdated bottlenecks of the last decade. My network is no longer preparing for the quantum transition; it has already completed it. The rest of the industry will follow suit in time.

```

Dienstag, 25. November 2025

rk3588 bring-up: u-boot, kernel, and signal integrity

The RK3588 SoC features a quad-core Arm Cortex-A76/A55 CPU, a Mali-G610 GPU, and a highly flexible I/O architecture that makes it ideal for embedded Linux SBCs like the Radxa Rock 5B+.

I’ve been exploring and documenting board bring-up for this platform, including u-boot and Linux kernel contributions, device-tree development, and tooling for reproducible builds and signal-integrity validation. Most of this work is still in active development and early upstream preparation.

I’m publishing my notes, measurements, and bring-up artifacts here as the work progresses, while active u-boot and kernel development including patch iteration, test builds, and branch history are maintained in separate working repositories:

Signal Analysis / Bring-Up Repo: https://github.com/brhinton/signal-analysis

The repository currently includes (with more being added):

  • Device-tree sources and Rock 5B+ board enablement
  • UART signal-integrity captures at 1.5 Mbps measured at the SoC pad
  • Build instructions for kernel, bootloader, and debugging setup
  • Early patch workflows and upstream preparation notes

Additional U-Boot and Linux kernel work, including mainline test builds, feature development, rebases, and patch series in progress, is maintained in separate working repositories. This repo serves as the central location for measurements, documentation, and board-level bring-up notes.

This is ongoing, work-in-progress engineering effort, and I’ll be updating the repositories as additional measurements, boards, and upstream-ready changes are prepared.

Sonntag, 4. August 2024

arch linux uefi with dm-crypt and uki

Arch Linux is known for its high level of customization, and configuring LUKS2 and LVM is a straightforward process. This guide provides a set of instructions for setting up an Arch Linux system with the following features:

  • Root file system encryption using LUKS2.
  • Logical Volume Management (LVM) for flexible storage management.
  • Unified Kernel Image (UKI) bootable via UEFI.
  • Optional: Detached LUKS header on external media for enhanced security.

Prerequisites

  • A bootable Arch Linux ISO.
  • An NVMe drive (e.g., /dev/nvme0n1).
  • (Optional) A microSD card or other external medium for the detached LUKS header.

Important Considerations

  • Data Loss: The following procedure will erase all data on the target drive. Back up any important data before proceeding.
  • Secure Boot: This guide assumes you may want to use hardware secure boot.
  • Detached LUKS Header: Using a detached LUKS header on external media adds a significant layer of security. If you lose the external media, you will lose access to your encrypted data.
  • Swap: This guide uses a swap file. You may also use a swap partition if desired.

Step-by-Step Instructions

  1. Boot into the Arch Linux ISO:

    Boot your system from the Arch Linux installation media.

  2. Set the System Clock:

    # timedatectl set-ntp true
  3. Prepare the Disk:

    • Identify your NVMe drive (e.g., /dev/nvme0n1). Use lsblk to confirm.
    • Wipe the drive:
    • # wipefs --all /dev/nvme0n1
    • Create an EFI System Partition (ESP):
    • # sgdisk /dev/nvme0n1 -n 1::+512MiB -t 1:EF00
    • Create a partition for the encrypted volume:
    • # sgdisk /dev/nvme0n1 -n 2 -t 2:8300
  4. Set up LUKS2 Encryption:

    Encrypt the second partition using LUKS2. This example uses aes-xts-plain64 and serpent-xts-plain ciphers, and SHA512 for the hash. Adjust as needed.

    # cryptsetup luksFormat --cipher aes-xts-plain64 \
      --keyslot-cipher serpent-xts-plain --keyslot-key-size 512 \
      --use-random -S 0 -h sha512 -i 4000 /dev/nvme0n1p2
    • --cipher: Specifies the cipher for data encryption.
    • --keyslot-cipher: Specifies the cipher used to encrypt the key.
    • --keyslot-key-size: Specifies the size of the key slot.
    • -S 0: Disables sparse headers.
    • -h: Specifies the hash function.
    • -i: Specifies the number of iterations.

    Open the encrypted partition:

    # cryptsetup open /dev/nvme0n1p2 root
  5. Create the File Systems and Mount:

    Create an ext4 file system on the decrypted volume:

    # mkfs.ext4 /dev/mapper/root

    Mount the root file system:

    # mount /dev/mapper/root /mnt

    Create and mount the EFI System Partition:

    # mkfs.fat -F32 /dev/nvme0n1p1
    # mount --mkdir /dev/nvme0n1p1 /mnt/efi

    Create and enable a swap file:

    # dd if=/dev/zero of=/mnt/swapfile bs=1M count=8000 status=progress
    # chmod 600 /mnt/swapfile
    # mkswap /mnt/swapfile
    # swapon /mnt/swapfile
  6. Install the Base System:

    Use pacstrap to install the necessary packages:

    # pacstrap -K /mnt base base-devel linux linux-hardened \
      linux-hardened-headers linux-firmware apparmor mesa \
      xf86-video-intel vulkan-intel git vi vim ukify
  7. Generate the fstab File:

    # genfstab -U /mnt >> /mnt/etc/fstab
  8. Chroot into the New System:

    # arch-chroot /mnt
  9. Configure the System:

    Set the timezone:

    # ln -sf /usr/share/zoneinfo/UTC /etc/localtime
    # hwclock --systohc

    Uncomment en_US.UTF-8 UTF-8 in /etc/locale.gen and generate the locale:

    # sed -i 's/#'"en_US.UTF-8"' UTF-8/'"en_US.UTF-8"' UTF-8/g' /etc/locale.gen
    # locale-gen
    # echo 'LANG=en_US.UTF-8' > /etc/locale.conf
    # echo "KEYMAP=us" > /etc/vconsole.conf

    Set the hostname:

    # echo myhostname > /etc/hostname
    # cat <<EOT >> /etc/hosts
    127.0.0.1 myhostname
    ::1 localhost
    127.0.1.1 myhostname.localdomain myhostname
    EOT

    Configure mkinitcpio.conf to include the encrypt hook:

    # sed -i 's/HOOKS.*/HOOKS=(base udev autodetect modconf kms \
      keyboard keymap consolefont block encrypt filesystems resume fsck)/' \
      /etc/mkinitcpio.conf

    Create the initial ramdisk:

    # mkinitcpio -P

    Install the bootloader:

    # bootctl install

    Set the root password:

    # passwd

    Install microcode and efibootmgr:

    # pacman -S intel-ucode efibootmgr

    Get the swap offset:

    # swapoffset=`filefrag -v /swapfile | awk '/\s+0:/ {print $4}' | \
      sed -e 's/\.\.$//'`

    Get the UUID of the encrypted partition:

    # blkid -s UUID -o value /dev/nvme0n1p2

    Create the EFI boot entry. Replace <UUID OF CRYPTDEVICE> with the actual UUID:

    # efibootmgr --disk /dev/nvme0n1p1 --part 1 --create --label "Linux" \
      --loader /vmlinuz-linux --unicode "cryptdevice=UUID=<UUID OF CRYPTDEVICE>:root \
      root=/dev/mapper/root resume=/dev/mapper/root resume_offset=$swapoffset \
      rw initrd=\intel-ucode.img initrd=\initramfs-linux.img" --verbose

    Configure the UKI presets:

    # cat <<EOT >> /etc/mkinitcpio.d/linux.preset
    ALL_kver="/boot/vmlinuz-linux"
    ALL_microcode=(/boot/*-ucode.img)
    PRESETS=('default' 'fallback')
    default_uki="/efi/EFI/Linux/arch-linux.efi"
    default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"
    fallback_uki="/efi/EFI/Linux/arch-linux-fallback.efi"
    fallback_options="-S autodetect"
    EOT

    Create the UKI directory:

    # mkdir -p /efi/EFI/Linux

    Configure the kernel command line:

    # cat <<EOT >> /etc/kernel/cmdline
    cryptdevice=UUID=<UUID OF CRYPTDEVICE>:root root=/dev/mapper/root \
    resume=/dev/mapper/root resume_offset=51347456 rw
    EOT

    Build the UKIs:

    # mkinitcpio -p linux

    Configure the kernel install layout:

    # echo "layout=uki" >> /etc/kernel/install.conf
  10. Configure Networking (Optional):

    Create a systemd-networkd network configuration file:

    # cat <<EOT >> /etc/systemd/network/nic0.network
    [Match]
    Name=nic0
    [Network]
    DHCP=yes
    EOT
  11. Install a Desktop Environment (Optional):

    Install Xorg, Xfce, LightDM, and related packages:

    # pacman -Syu
    # pacman -S xorg xfce4 xfce4-goodies lightdm lightdm-gtk-greeter \
      libva-intel-driver mesa xorg-server xorg-xinit sudo
    # systemctl enable lightdm
    # systemctl start lightdm
  12. Enable Network Services (Optional):

    # systemctl enable systemd-resolved.service
    # systemctl enable systemd-networkd.service
    # systemctl start systemd-resolved.service
    # systemctl start systemd-networkd.service
  13. Create a User Account:

    Create a user account and add it to the wheel group:

    # useradd -m -g wheel -s /bin/bash myusername
  14. Reboot:

    Exit the chroot environment and reboot your system:

    # exit
    # umount -R /mnt
    # reboot

Samstag, 6. April 2024

Multidimensional arrays of function pointers in C

Embedded hardware typically includes an application processor and one or more adjacent processor(s) attached to the printed circuit board. The firmware that resides on the adjacent processor(s) responds to instructions or commands.  Different processors on the same board are often produced by different companies.  For the system to function properly, it is imperative that the processors communicate without any issues, and that the firmware can handle all types of possible errors.

Formal requirements for firmware related projects may include the validation and verification of the firmware on a co-processor via the application programming interface (API).  Co-processors typically run 8, 16, or 32-bit embedded operating systems.  If the co-processor manufacturer provides a development board for testing the firmware on a specific co-processor, then the development board may have it's own application processor. Familiarity with all of the applicable bus communication protocols including synchronous and asynchronous communication is important.  High-volume testing of firmware can be accomplished using function-like macros and arrays of function pointers.  Processor specific firmware is written in C and assembly - 8, 16, 32, or 64-bit.  Executing inline assembly from C is straightforward and often required.  Furthermore, handling time-constraints such as real-time execution on adjacent processors is easier to deal with in C and executing syscalls, low-level C functions, and userspace library functions, is often more efficient.  Timing analysis is often a key consideration when testing firmware, and executing compiled C code on a time-sliced OS, such as Linux, is already constrained.

To read tests based on a custom grammar, a scanner and parser in C can be used. Lex is ideal for building a computationally efficient lexical analyzer that outputs a sequence of tokens. For this case, the tokens comprise the function signatures and any associated function metadata such as expected execution time. Creating a context-free grammar and generating the associated syntax tree from the lexical input is straightforward.   Dynamic arrays of function pointers can then be allocated at run-time, and code within external object files or libraries can be executed in parallel using multiple processes or threads. The symbol table information from those files can be stored in multi-dimensional arrays. While C is a statically typed language, the above design can be used for executing generic, variadic functions at run-time from tokenized input, with constant time lookup, minimal overhead, and specific run-time expectations (stack return value, execution time, count, etc.).

At a high level, lists of pointers to type-independent, variadic functions and their associated parameters can be stored within multi-dimensional arrays.  The following C code uses arrays of function pointers to execute functions via their addresses.  The code uses list management functions from the Linux kernel which I ported to userspace.

https://github.com/brhinton/bcn

Mittwoch, 12. Januar 2022

Concurrency, Parallelism, and Barrier Synchronization - Multiprocess and Multithreaded Programming

On preemptive, timed-sliced UNIX or Linux operating systems such as Solaris, AIX, Linux, BSD, and OS X, program code from one process executes on the processor for a time slice or quantum. After this time has elapsed, program code from another process executes for a time quantum. Linux divides CPU time into epochs, and each process has a specified time quantum within an epoch. The execution quantum is so small that the interleaved execution of independent, schedulable entities – often performing unrelated tasks – gives the appearance of multiple software applications running in parallel.

When the currently executing process relinquishes the processor, either voluntarily or involuntarily, another process can execute its program code. This event is known as a context switch, which facilitates interleaved execution. Time-sliced, interleaved execution of program code within an address space is known as concurrency.

The Linux kernel is fully preemptive, which means that it can force a context switch for a higher priority process. When a context switch occurs, the state of a process is saved to its process control block, and another process resumes execution on the processor.

A UNIX process is considered heavyweight because it has its own address space, file descriptors, register state, and program counter. In Linux, this information is stored in the task_struct. However, when a process context switch occurs, this information must be saved, which is a computationally expensive operation.

Concurrency applies to both threads and processes. A thread is an independent sequence of execution within a UNIX process, and it is also considered a schedulable entity. Both threads and processes are scheduled for execution on a processor core, but thread context switching is lighter in weight than process context switching.

In UNIX, processes often have multiple threads of execution that share the process's memory space. When multiple threads of execution are running inside a process, they typically perform related tasks. The Linux user-space APIs for process and thread management abstract many details. However, the concurrency level can be adjusted to influence the time quantum so that the system throughput is affected by shorter and longer durations of schedulable entity execution time.

While threads are typically lighter weight than processes, there have been different implementations across UNIX and Linux operating systems over the years. The three models that typically define the implementations across preemptive, time-sliced, multi-user UNIX and Linux operating systems are defined as follows - 1:1, 1:N, and M:N where 1:1 refers to the mapping of one user-space thread to one kernel thread, 1:N refers to the mapping of multiple user-space threads to a single kernel thread. M:N refers to the mapping of N user-space threads to M kernel threads.

In the 1:1 model, one user-space thread is mapped to one kernel thread. This allows for true parallelism, as each thread can run on a separate processor core. However, creating and managing a large number of kernel threads can be expensive.

In the 1:N model, multiple user-space threads are mapped to a single kernel thread. This is more lightweight, as there are fewer kernel threads to create and manage. However, it does not allow for true parallelism, as only one thread can execute on a processor core at a time.

In the M:N model, N user-space threads are mapped to M kernel threads. This provides a balance between the 1:1 and 1:N models, as it allows for both true parallelism and lightweight thread creation and management. However, it can be complex to implement and can lead to issues with load balancing and resource allocation.

Parallelism on a time-sliced, preemptive operating system means the simultaneous execution of multiple schedulable entities over a time quantum. Both processes and threads can execute in parallel across multiple cores or processors. Concurrency and parallelism are at play on a multi-user system with preemptive time-slicing and multiple processor cores. Affinity scheduling refers to scheduling processes and threads across multiple cores so that their concurrent and parallel execution is close to optimal.

It's worth noting that affinity scheduling refers to the practice of assigning processes or threads to specific processors or cores to optimize their execution and minimize unnecessary context switching. This can improve overall system performance by reducing cache misses and increasing cache hits, among other benefits. In contrast, non-affinity scheduling allows processes and threads to be executed on any available processor or core, which can result in more frequent context switching and lower performance.

Software applications are often designed to solve computationally complex problems. If the algorithm to solve a computationally complex problem can be parallelized, then multiple threads or processes can all run at the same time across multiple cores. Each process or thread executes by itself and does not contend for resources with other threads or processes working on the other parts of the problem to be solved. When each thread or process reaches the point where it can no longer contribute any more work to the solution of the problem, it waits at the barrier if a barrier has been implemented in software. When all threads or processes reach the barrier, their work output is synchronized and often aggregated by the primary process. Complex test frameworks often implement the barrier synchronization problem when certain types of tests can be run in parallel. Most individual software applications running on preemptive, time-sliced, multi-user Linux and UNIX operating systems are not designed with heavy, parallel thread or parallel, multiprocess execution in mind.

Minimizing lock granularity increases concurrency, throughput, and execution efficiency when designing multithreaded and multiprocess software programs. Multithreaded and multiprocess programs that do not correctly utilize synchronization primitives often require countless hours of debugging. The use of semaphores, mutex locks, and other synchronization primitives should be minimized to the maximum extent possible in computer programs that share resources between multiple threads or processes. Proper program design allows schedulable entities to run parallel or concurrently with high throughput and minimum resource contention. This is optimal for solving computationally complex problems on preemptive, time-sliced, multi-user operating systems without requiring hard, real-time scheduling.

Mittwoch, 24. Februar 2021

A hardware design for variable output frequency using an n-bit counter

The DE1-SoC from Terasic is an excellent board for hardware design and prototyping. The following VHDL process is from a hardware design created for the Terasic DE1-SoC FPGA. The ten switches and four buttons on the FPGA are used as an n-bit counter with an adjustable multiplier to increase the output frequency of one or more output pins at a 50% duty cycle.

As the switches are moved or the buttons are pressed, the seven-segment display is updated to reflect the numeric output frequency, and the output pin(s) are driven at the desired frequency. The onboard clock runs at 50MHz, and the signal on the output pins is set on the rising edge of the clock input signal (positive edge-triggered). At 50MHz, the output pins can be toggled at a maximum rate of 50 million cycles per second or 25 million rising edges of the clock per second. An LED attached to one of the output pins would blink 25 million times per second, not recognizable to the human eye. The persistence of vision, which is the time the human eye retains an image after it disappears from view, is approximately 1/16th of a second. Therefore, an LED blinking at 25 million times per second would appear as a continuous light to the human eye.

scaler <= compute_prescaler((to_integer(unsigned( SW )))*scaler_mlt);
gpiopulse_process : process(CLOCK_50, KEY(0))
begin
if (KEY(0) = '0') then -- async reset
count <= 0;
elsif rising_edge(CLOCK_50) then
if (count = scaler - 1) then
state <= not state;
count <= 0;
elsif (count = clk50divider) then -- auto reset
count <= 0;
else
count <= count + 1;
end if;
end if;
end process gpiopulse_process;
The scaler signal is calculated using the compute_prescaler function, which takes the value of a switch (SW) as an input, multiplies it with a multiplier (scaler_mlt), and then converts it to an integer using to_integer. This scaler signal is used to control the frequency of the pulse signal generated on the output pin.

The gpiopulse_process process is triggered by a rising edge of the CLOCK_50 signal and a push-button (KEY(0)) press. It includes an asynchronous reset when KEY(0) is pressed.

The count signal is incremented on each rising edge of the CLOCK_50 signal until it reaches the value of scaler - 1. When this happens, the state signal is inverted and count is reset to 0. If count reaches the value of clk50divider, it is also reset to 0.

Overall, this code generates a pulse signal with a frequency controlled by the value of a switch and a multiplier, which is generated on a specific output pin of the FPGA board. The pulse signal is toggled between two states at a frequency determined by the scaler signal.

It is important to note that concurrent statements within an architecture are executed concurrently, meaning that they are evaluated concurrently and in no particular order. However, the sequential statements within a process are executed sequentially, meaning that they are evaluated in order, one at a time. Processes themselves are executed concurrently with other processes, and each process has its own execution context.